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

一:作业点评

点评内容:

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

评价心得

  在阅读完改同学的代码与博客之后,值得我学习的地方是该同学书写代码的习惯,对项目功能能够见名思意,由于是我们结对需要完成的作业,也在评价该同学代码的时候向改同学请教了一些我自己不足的问题。

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

二:结对项目实施过程

一.需求分析

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

  • 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:一个前台页面,需要在网页中展示的页面
项目类图:

三:核心代码:

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集合中。

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网页的形式来实现,对于一些知识点有一些忘记,通过此次试验认识到软件开发需要时常的练习,不能遗忘,勤动手,多练习一些算法。

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

猜你喜欢

转载自www.cnblogs.com/yanglulu-yang/p/10645518.html