201671010447杨露露 实验四软件工程结对项目

一:做业点评

点评内容:

评价博文连接:http://www.javashuo.com/article/p-whaerzlf-kn.html
1.缺点:博文结构不太清晰,排版能够在美化一些,博文的内容中对程序功能的描述不太齐全,能够在加一下本身作的软件功能的截图,博文结构设计凌乱,对一些功能的描述比较的浅。因为咱们之间没有养成对细致软件书写规范,在对PSP的设计与时间的掌握有着很大差异。
2.优势:功能实现的比较完整,对柱形图的实现也比较的完美。在博客中基体现了软件的各类需求,软件实现过程当中人机交互书写的比较的好。
评价源代码连接:https://github.com/runju/WordCount
1.优势:最值得表扬的是代码的规范,该同窗有着良好的书写代码的习惯,各类类与方法命名见名思意,有着良好书写代码的习惯
2.缺点:在代码方面须要注意的是功能模块的强化,对代码质量的提升,例如在封装类的时候注意封装的方法。html

评价心得

在阅读完改同窗的代码与博客以后,值得我学习的地方是该同窗书写代码的习惯,对项目功能可以见名思意,因为是咱们结对须要完成的做业,也在评价该同窗代码的时候向改同窗请教了一些我本身不足的问题。

GitHub的使用过程当中存在的一些问题:
对GitHub的不熟悉,练习了好几回才学会对GitHub的克隆、Pull request、Merge pull reques等一些操做,对结对方的代码进行下载与修改的时候也存在过一些问题,在网上查找一些资料解决问题。java

二:结对项目实施过程

一.需求分析

为了练习软件的我的开发流程,设计一个关于词频统计的小程序,在词频统计的小程序中须要实现的功能具体有:git

  • 1.1:程序可读入任意英文文本文件,该文件中英文词数大于等于1个。
  • 1.2:指定单词的查找与所须要的时间
  • 1.3:在对指定单词统计作一个柱状图
  • 1.4:高频词统计功能:用户从键盘输入高频词输出的个数k,运行程序统计功能,可按文本中词频数降序显示前k个单词的词频及单词。
  • 1.5 :对统计的文件进行行数和字符的统计
  • 1.6:.统计该文本全部单词数量及词频数,并能将单词及词频数按字典顺序输出到文件result.txt。

二.软件设计

咱们组主要是利用web网页的方式来实现这次项目的功能,服务器是经过Tomcat来支撑项目的实现。采用的是最简单的servlet来传递参数,将全部的方法封装在一个WordCount类,在这个类里面每一个功能的核心实现存放在不一样的方法里面,将此类进行封装。在servlet中直接调用封装好的方法,经过请求(request)与响应(response)的方式来与jsp页面进行传递。
这次的项目一共有三个类
2.1 WordCount.java 类:对全部功能的方法的一个封装
2.2 WordCountServlet.java :与web页面相联系的servlet类,是java内容与web交互的一个java封装好的类
2.3 WordCount.jsp:一个前台页面,须要在网页中展现的页面
项目类图:github

三:核心代码:

3.1:经过servlet来实现前台与后天的交互,servlet是java封装好的交互类,经过请求(request)与响应(response)的方式来传递数据,实现先后台的交互。

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //请求与响应的编码格式
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out=response.getWriter();
        String id=null;
        //接受页面数据
        fileName = request.getParameter("fileName");//文件名
        String  words = request.getParameter("word");//指定单词
        String wordnum = request.getParameter("wordnum");//高频数
        String wordlines = request.getParameter("wordlines");//行数
        String result = request.getParameter("result");//存放
        id=request.getParameter("id");//功能编号的获取
        if(id.equals("0")){
            //文件的上传
            WordCount wordCount = new WordCount();
            map=wordCount.count(fileName);
            out.print("<script>alert('上传成功!!');location.href='html/WordCount.jsp'</script>");   
        }else if(id.equals("1")){
            //指定单词的查找
            //开始时间
            long startTime=System.currentTimeMillis();
            TreeMap<String,Integer> map1 = new TreeMap<String, Integer>(); 
            WordCount wordCount = new WordCount();
            map1= wordCount.bijiao(map, words);
            //结束时间
            long endTime=System.currentTimeMillis();
            float excTime=(float)((endTime-startTime)/1000)*1000;
            //向jsp页面传参数
            request.setAttribute("map1", map1);
            request.setAttribute("excTime", excTime);
            System.out.println("执行时间:"+excTime+"ms"); 
            request.getRequestDispatcher("html/WordCount.jsp").forward(request, response);
        }else if(id.equals("2")){
            //高频词的统计
            //开始时间
            long startTime=System.currentTimeMillis();
            WordCount wordCount = new WordCount();
            int k=Integer.parseInt(wordnum);
            ArrayList gaopin=wordCount.gaopin(map, k);
            //结束时间
            long endTime=System.currentTimeMillis();
            float excTime2=(float)((endTime-startTime)/1000)*1000;
            request.setAttribute("gaopin", gaopin);
            request.setAttribute("excTime2", excTime2);
            request.getRequestDispatcher("html/WordCount.jsp").forward(request, response);  
        }else if(id.equals("3")){
            //行数统计
            //开始时间
            long startTime=System.currentTimeMillis();
            WordCount wordCount = new WordCount();
            List list=wordCount.statistics(fileName);
            //结束时间
            long endTime=System.currentTimeMillis();
            float excTime3=(float)((endTime-startTime)/1000)*1000;
            request.setAttribute("excTime3", excTime3);
            request.setAttribute("list", list);
            request.getRequestDispatcher("html/WordCount.jsp").forward(request, response);
        }else if(id.equals("4")){
            //写入文件
            //开始时间
            long startTime=System.currentTimeMillis();
            WordCount cunfang = new WordCount();
            cunfang.cunfang(map);
            //结束时间
            long endTime=System.currentTimeMillis();
            float excTime1=(float)((endTime-startTime)/1000)*1000;
            request.setAttribute("excTime1", excTime1);
            out.print("<script>alert('存储成功!!');location.href='html/WordCount.jsp'</script>");   
               
            request.getRequestDispatcher("html/WordCount.jsp").forward(request, response);
        }
    }

四:测试截图

4.1网页首次显示

4.2上传

文件上传首先须要获取的是文件的名字,经过文件名来获取文件的内容,将文件内容存放在TreeMap集合中。web

4.3指定单词查找

在上传的文件中查找指定单词算法

4.4高频词

高频词的统计是须要指定所须要查找单词的个数,每一个功能都有时间的统计,须要在调用方法前设置时间,在结束后设置一个时间,先后时间相减。小程序

4.5文本行数与字符数

4.6文件的存放

4.7柱状图的显示

柱状图是经过继承JFrame可视化界面来实现的,这个方法中须要传递存放文件的集合和指定单词的数组,调用java已有的方法来绘制柱状图,二维的柱状图方法是Graphics2D。数组

五:讨论过程与心得(图片)

在项目开发过程当中,遇到了不少的问题,主要是在前台与后台的交互,包括前台页面中文件名上传以后再后台获取文件名的问题,在el表达式的操做过程当中数据从servlet中拿不到值,主要在servlet中数据获取后调用方法饭后的集合类型的数据在jsp中遍历的空难,经过重定位的方式转接到jsp页面,在JavaScript中经过forEach的方式遍历servlet传来的数据集合,一些必要的jar包的支持,例如standard.jar,jstl.jar等一些jar包。这次项目中还用到了Tomcat服务器来做为运行项目的一个小型的支撑服务器。经过结对项目的过程,体会到团队的重要性,合做工做过程当中会有一些分歧,例如各自见解与想法的不一样。经过无数次的实验与测试才会有此次的项目。服务器

六:展现PSP,这个环节重要的是让本身看到本身的估计和实际消耗时间,哪一个环节耗时最多,哪一个环节估计和实践相差巨大?为何?

PSP2.1 任务内容 计划共完成须要的时间(min) 实际完成须要的时间(min)
Planning 计划 6 5
Estimate 估计这个任务须要多少时间,并规划大体工做步骤 10 14
Development 开发 200 400
Analysis 需求分析 (包括学习新技术) 3 5
Design Spec 生成设计文档 5 10
Design Review 设计复审 (和同窗一块儿审核设计文档) 5 7
Coding Standard 代码规范 (为目前的开发制定合适的规范) 3 3.5
Design 具体设计 14 20
Coding 具体编码 180 420
Code Review 代码复审 6 10
Test 测试(自我测试,修改代码,提交修改) 6 10
Reporting 报告 10 15
Test Report 测试报告 6 15
Size Measurement 计算工做量 5 10
Postmortem & Process Improvement Plan 过后总结 ,并提出过程改进计划 5 10

项目心得:

经过这次的项目认识到本身代码的不足以及对以前知识的回顾,以前全部的项目经验都是经过jsp页面来写的,这次因为时间问题也利用了以前学过的jsp网页的形式来实现,对于一些知识点有一些忘记,经过这次试验认识到软件开发须要时常的练习,不能遗忘,勤动手,多练习一些算法。jsp

查看源代码:https://github.com/yanglulu-yang/shiyan4

相关文章
相关标签/搜索