201671030120 王晶《英文文本统计分析》结对项目报告

  


项目 内容
课程名称 2016级计算机科学与工程学院软件工程(西北师范大学)
做业要求 实验四 软件工程结对项目
课程学习目标 熟悉软件开发总体流程,提高自身能力
本次结对项目的意义 第一次体验一个完整的工程

  


1、任务一

 两两自由结对,对结对方的《实验二 软件工程我的项目》的项目成果进行评价

  一、所在班级:2016级计算机科学与工程学院软件工程(西北师范大学)

  二、所评博文:201671030125+词频统计软件项目报告

  三、github连接地址:github

  四、点评内容:

     如下是我读完这篇博文以后,本身的一些拙见。html

  • (1)、这篇博文总体结构布局仍是很不错的,能够看出博主有对Markdown编辑器进行系统的了解和学习,但在一些细节方面还须要进一步完善。好比,我我的认为各个模
         块之间的空行有点多,能够考虑只空出一行便可。
  • (2)、显示词频和柱状图时,感受柱状图有点取巧,虽然用符号的个数表示柱状图是一个很不错的想法,可是仍是但愿能够了解一下Java的可视化,用可视化界面实现柱状
         图,以此凸显基本的专业素养。
  • (3)、设计实现部分作的挺好,能够看出在词频统计软件项目的需求分析阶段有用心去作。
  • (4)、美中不足的是菜单循环结构部分,能够参考其余一些同窗的博文,进行适当的完善。
  • (5)、流程图自己没有逻辑上的问题,可是美观度须要提升,按照规定开始符和结束符应该位于最顶端和最底端,且均独立为一行。
  • (6)、编码时要注意代码规范,切实可行,容易观察和客观检验,以便提升开发效率。博主在github中所提交的代码基本符合现有的代码规范,可是依旧存在一些细节问
         题。对于函数以及变量的命名须要进一步增强规范,为了达到代码自解释的目标,任何自定义编程元素在命名时,都要使用尽可能完整的单词组合来表达其意。括号的使
         用作的不错,符合基本的代码规范,只有少部分须要进行更改。还有其余的一些问题,好比全部的类都必须添加建立者和建立日期;全部的枚举类型字段必需要有注
         释,说明每一个数据项的用途等,在博主的代码中并未体现,建议仔细阅读代码规范,在之后编写代码的过程当中多多注意这些问题。
  • (7)、PSP中,在开发阶段和具体编码阶段,计划共完成须要的时间与实际完成须要的时间之间的差距比较大,博主本身总结缘由是对Java语言掌握不熟练,上机练习不
         够。我本身也存在着一样的问题,因为基础不扎实,对Java掌握的不熟练,所以致使写代码的过程很困难。但愿咱们能够一块儿努力,多加练习,尽快解决这些问题。

  五、点评心得:

  不一样的同窗有不一样的思惟方式,对同一个问题的认知也有各自的独特之处。经过阅读其余同窗的博文,我受益不浅,深入认识到了本身的不足之处,懂得了应该善于互相学习,汲取他人的精华,不断改善本身的学习。同时,对于编码规范有了必定的认识,之前编写代码的时候,会为所欲为地按照本身的方式来写,经过阅读代码规范,发现本身存在不少问题,之后会多加注意去改正。此外,我对软件工程的内涵有了更深入的体会,感觉到了文档在项目开发过程当中的重要性。阅读其余同窗的博文,发现问题并进行适当的评价,实际上是一种很好的学习方式,从别人的问题中能够反射出本身存在的问题。所以,咱们在日常的学习中,要善于去评价他人,评价本身。java

  


2、任务二

(一)、需求分析

  采用两人合做方式,设计开发一个英文文本统计分析软件,使之具备如下功能:

    一、实验2要求的功能
    二、单词频数可视化柱状图
    三、统计该文本行数及字符数
    四、各类统计功能均提供计时功能,显示程序统计所消耗时间(单位:ms)
    五、可处理任意用户导入的任意英文文本
    六、人机交互界面要求GUI界面(WEB页面、APP页面均可)
    七、附加分功能1:统计文本中除冠词、代词、介词以外的高频词
    八、附加分功能2:统计前10个两个单词组成的词组频率git

  


(二)、功能设计

    一、柱状图功能——单词频数可视化柱状图
    二、计时功能——各类统计功能均提供计时功能,显示程序统计所消耗时间(单位:ms)
    三、显示功能——人机交互界面GUI界面
    四、统计功能——统计文本行数、字符数、大小写字母、汉字、数字、字节数等github

  


(三)、软件设计——使用类图

    一、本次项目设计一共使用了三个类,分别为Main.java,Result.java,Histogram.java
    二、程序整体流程图以下:
编程

  


(四)、结对过程

    一、首先咱们对实验二中对方的代码进行了仔细研读,了解了对方的编码习惯,根据老师所给的代码规范肯定了本次项目的代码规范。
    二、本次项目是在实验二的基础上添加、修改部分功能而实现的,所以在实验二的基础上,咱们对本次项目进行了需求分析,肯定了基本的框架。
    三、对统计文本行数、字符数、大小写字母、汉字、数字、字节数等功能,计时功能,统计文本中除冠词、代词、介词以外的高频词功能等进行了分工。
    四、共同编写了GUI界面。
    五、代码编写结束后,咱们根据代码规范进行了代码复审。
    六、最后咱们根据完成该项目的实际状况填写了PSP中各个阶段实际所用时间,并各自撰写了博客。
  数组

  在讨论、细化和编程时的结对照片

  


(五)、程序运行——程序运行时每一个功能界面截图

  一、人机交互界面——GUI界面


  

  二、输出词频和柱状图


  

  

  

  三、输出前N个高频词


  

  

  四、词频导出到文件


  

  

  

  五、对文本行数、字符数、大小写字母、汉字、数字、字节数等进行统计

  


(六)、核心功能代码展现

  • 一、单词频数可视化柱状图

public void paint(Graphics g) 
    { 
        int Width = getWidth(); 
        int Height = getHeight(); 
        int leftMargin = 50;//柱形图左边界 
        int topMargin = 50;//柱形图上边界 
        Graphics2D g2 = (Graphics2D) g; 
        int ruler = Height-topMargin; 
        int rulerStep = ruler/20;//将当前的高度平分为20个单位 
        g2.setColor(Color.WHITE);//绘制白色背景 
        g2.fillRect(0, 0, Width, Height);//绘制矩形图 
        g2.setColor(Color.BLACK); 
        for(int i=0;i<rulerStep;i++){ 
        g2.drawString((3000-150*i)+"个", 8, topMargin+rulerStep*i);//绘制Y轴上的数据 
        } 
        g2.setColor(Color.YELLOW); 
        int m=0; 
        for (Entry<String, Integer> entry : map.entrySet())  
            {  
            int value =entry.getValue(); 
            int step = (m+1)*40;//设置每隔柱形图的水平间隔为40 
            g2.fillRoundRect(leftMargin+step*2,Height-value/50-5, 40, value, 40, 10);//绘制每一个柱状条 
            g2.drawString(entry.getKey(), leftMargin+step*2, Height-value/50-5);    //标识每一个柱状条        
             m++; 
          }  
          
    }

  

  • 二、计时功能

long time=System.currentTimeMillis() - start; 
            JOptionPane.showConfirmDialog(null,print+"\n"+"所用时间为:"+(System.currentTimeMillis() - start)+"ms","结果",JOptionPane.DEFAULT_OPTION); 
                            Histogram histogram=new Histogram(map1,input.length);

  

  • 三、统计文本行数、字符数、大小写字母、汉字、数字、字节数等功能

while ((str = in.readLine())!= null) {//readLine()方法, 用于读取一行,只要读取内容不为空就一直执行
            i++;//每循环一次就进行一次自增,用于统计文本行数
            c += str.length();//用于统计总字符数
            byte[] bytes=str.getBytes();//求出该行的字节数组
            d += bytes.length;//用于统计总字节数
            for (int j = 0; j < str.length(); j++) {//for循环的条件,当j小于该行长度时就一直循环并自增
                b = Character.toString(str.charAt(j));//返回一个字符串对象
                if (b.matches("[\\u4e00-\\u9fa5]")) {//if语句的条件,判断是否为汉字
                        c1++;//若为汉字则c1自增
                } else if(b.matches("[A-Z]")){//if语句的条件,判断是否为大写字母
                    c2++;//若为大写字母则c2自增
                } else if(b.matches("[a-z]")){//if语句的条件,判断是否为小写字母
                    c3++;//若为小写字母则c3自增
                } else if(b.matches("[0-9]")){//if语句的条件,判断是否为数字
                    c4++;//若为数字则c4自增
                } else {//不然可判断为其余字符
                    c5++;//若为其余字符则c5自增
                }
            }
        }

  


(七)、PSP展现

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

  


(八)、总结

  “他们并排坐在一台电脑前,面对同一个显示器,使用同一个键盘,同一个鼠标一块儿工做。他们一块儿分析,一块儿设计,一块儿写测试样例,一块儿编码,一块儿作单元测试,一块儿作集成测试,一块儿写文档,等等。”
                                                                                                      ——《构建之法》框架

  本次实验是第一次结对项目实验,所以感触颇深。两人结对完成一个软件工程项目首先须要进行需求分析,对项目需求研究理解到位,对一个项目有总体的认知,而后再由两人分工互助实现所需的功能。因为每一个人都有本身编写程序的习惯和风格,所以为了不实验过程当中产生分歧,首先咱们对实验二中对方的文档和代码进行了仔细研读和评价,了解了对方的编码习惯,分析并指出了各自项目的优势和不足,最终达成了一致的代码规范。在具体的实现过程当中也遇到了不少问题,可是经过咱们一块儿讨论,相互协助,反复修改反复测试,最终都解决了这些问题。经过本次结对项目,本身的我的能力有所提高,同时明白了两人合做的重要性以及1+1>2的深入内涵。此外,还体会到告终对编程能够提升设计质量和代码质量以及两我的合做解决问题的能力,同时能够互相交流学习经验,提升本身的总体水平。“一千个读者眼中就有一千个哈姆雷特”,经过两我的思想的交融,最终的成果才会显得更加有意义。编辑器

  


    该英文文本统计分析软件的源代码可在此处查看

相关文章
相关标签/搜索