201671030124 闫雪《英文文本统计分析》结对项目报告

博文简要信息表

项目 内容
这个做业属于哪一个课程 软件工程 代祖华老师 博客
这个做业的要求在哪里 实验四 软件工程结对项目
课程学习目标 熟悉软件开发总体流程,提高自身能力
本次做业在哪一个具体方面帮助咱们实现目标 第一次体验一个完整的工程

任务一:点评博客

项目 内容
点评博客地址 201671030111 词频统计软件项目报告
github连接地址 源码
点评内容 在读完你的博文后,我有一些建议和见解:
1.在博文排版方面,你的结构清晰,内容明了,而且使用了博文简要内容信息表,这点作的很不错。可是,在排版方面还有待提升的地方,好比图片的大小不一致,致使给人观感不是特别的好,能够在插入图片前统一图片的大小。
2.在博文结构方面,你使用了简化的软件工程流程(需求分析-功能设计-设计实现-结果展现-代码展现-总结),在浏览博文时,让人能够层层递进的对博文的内容有深刻的了解。可是,若是有空闲时间的话但愿能够加一个详细设计的模块,这样让人对你的软件开发过程有更加深入的理解。
3.在博文内容方面,你作的是英文文本词频统计,根据老师所给的要求,你基本实现了查询指定单词,查询前K个高频单词,将全部单词按字典顺序输出到文本中。可是,在绘制柱状图方面,有点投机取巧,并无完整的实现柱状图的绘制,你能够学习一下Java的Graphics类,给你一篇博文做为参考(http://www.cnblogs.com/donghb/p/7637990.html)。其次,在功能设计模块,你的内容不太完善,只说明了实现什么功能,可是没有说明怎样实现功能,能够进一步详细叙述一下。
4.博文结构与PSP中“任务内容”列的关系:你的博文结构和PSP任务内容列的关系比较紧密,基本按照PSP任务内容列的顺序编写了博文.
5.PSP中“计划共完成须要的时间”与“实际完成须要的时间”两列数据的差别化分析与缘由探究:经过对比博文中计划完成时间和实际完成时间,发现实际完成时间比计划完成时间超出不少,看到你在下面总结了本身在PSP过程当中的困难,主要在于编程能力不强,在开发过程当中花费了较多的时间。其余的流程花费时间基本和计划时间差异不大,可是也超出了一些时间,多是因为初次按照PSP流程进行软件开发,因此对时间的把握不充分。
6.我在GitHub上下载了你的源码,编译运行后,和博文内容贴合,代码比较规范,结构清晰明了,基本实现了老师所要求的功能,可是人机交互方面没有很好的实现。
点评心得 经过阅读点评别人的博文,我了解到了别人在编写代码和博文的优势,好比博文简要信息表等。并且在点评团队成员的博文时,和队友互相交流了一些问题,好比代码的规范,博文的规范,使本身有了进步。在此次点评博文的过程当中,我学习了别人的优势,也经过别人的视角认识到了本身的缺点,让本身在下次作做业时改正这些错误,而且对队友有了深刻的了解。

任务二:结对编程

需求分析

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

  • (1)实验2要求的功能;git

  • (2)绘制单词频数可视化柱状图;github

  • (3)统计该文本行数及字符数;编程

  • (4)各类统计功能均提供计时功能,显示程序统计所消耗时间(单位:ms);ide

  • (5)可处理任意用户导入的任意英文文本;学习

  • (6)人机交互界面要求GUI界面(WEB页面、APP页面均可);测试

  • (7)附加分功能:统计文本中除冠词、代词、介词以外的高频词。编码

软件设计

核心功能代码展现

计时功能设计

Date date1 = new Date();//得到当前时间
                int sum = 0;
                for (int j = 0; j < 100000000; j++) {
                    sum += j;
                }
Date date2 = new Date();//得到当前时间
                System.out.println("程序的执行时间为:");
                System.out.println(date2.getTime()-date1.getTime()+"ms");

柱状图的实现3d

//绘制词频的柱形图
        public main(){
            super();
            setTitle("单词的词频统计图");
            setBounds(Count.length, 200, 450, 450);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
        @Override
        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;
            g2.setColor(Color.BLACK);//绘制黑色背景
            g2.fillRect(0, 0, Width, Height);//绘制矩形图
            g2.setColor(Color.LIGHT_GRAY);
            for(int i=0;i<rulerStep;i++){
                g2.drawString((400-20*i)+"个", 8, topMargin+rulerStep*i);//绘制Y轴上的数据
            }
            g2.setColor(Color.WHITE);
            int m=0;
            for(int i = 0;i<Count.length;i++){
                int value = WordsCount.get(Count[i]);
                int step = (m+1)*40;//设置每隔柱形图的水平间隔为40
                g2.fillRoundRect(leftMargin+step*2,Height-value, 40, value, 40, 10);//绘制每一个柱状条
                g2.drawString(Count[i], leftMargin+step*2, Height-value-5); //标识每一个柱状条       
                m++;
        }
    }

选择文件

canner in = new Scanner(System.in);
        System.out.println("请输入读取文件的文件名:");
        String line= in.nextLine();
        File file = new File(line);
        InputStreamReader is = new InputStreamReader(new FileInputStream(file), "utf-8");//将字节流转换为字符流
        BufferedReader buff = new BufferedReader(is);//提供通用的缓冲方式文本读取
        List<String> list = new ArrayList<String>();//list中只存放纯单词文本
        String readLine = null;//单词列表初始为空
        while((readLine = buff.readLine())!=null){
            String[] WordsArr = readLine.split("[^a-zA-z]");
            for(String word:WordsArr){
                if(word.length()!=0){
                    list.add(word);//将截取后的纯单词放入list
                }
            }
        }
        buff.close();

程序运行

高频词查询

指定单词查询

按字典顺序输出

查询行数及字符数

GitHub上传了三次过程代码,按照1,2,3的顺序,由最初的代码,过程当中修改的代码,最终的代码组成。

结对过程

  • 咱们在实验二的基础上,分析了还需实现的功能。

  • 咱们分开实现了文本行数和字符数和计时功能,我负责计时功能的实现。

  • 最后的GUI界面由咱们两人共同编写。

PSP流程

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

结对编程的总结

我认为两人合做真的可以带来1+1>2的效果。由于一我的在编程时,总会有思惟枯竭的时候,两我的的互相合做可使开发的过程卡壳时间不过久。而且能够及时发如今代码编写过程当中的错误。此次结对编程让我意识到在编写代码的过程当中和他人交流的重要性,不能本身钻进死胡同。别人也许能给本身提供一种新的思路。在之后的编程过程当中,我和队友准备再次使用结对编程,让编写软件的过程更顺畅。

Github源码地址

github源码

相关文章
相关标签/搜索