项目 | 内容 |
---|---|
这个做业属于哪一个课程 | 2016级计算机科学与工程学院软件工程(西北师范大学) |
这个做业的要求在哪里 | 实验四 软件工程结对项目 |
课程学习目标 | 熟悉软件开发总体流程,提高自身能力 |
本次做业在哪一个具体方面帮助咱们实现目标 | 第一次体验一个完整的工程 |
博客地址html
github连接地址git
修改后源码github
在博文结构方面,总体结构较为完整,功能设计的内容详细,对需求进行了认真的分析,方便以后的工做开展,测试运行部分能给出相应功能的实现结果,且运行界面对功能的说明清晰。在设计实现部分,没有体现出清晰的功能调用和函数之间的逻辑关系,内容稍简单。经过PSP表的数据,你在需求分析阶段用了较多的时间,有意识到分析的重要性,在编码和测试阶段用时较计划时间长,可能逻辑尚未清晰,处在一个试的过程。
在具体代码方面,功能和菜单功能的实现能独立编写,有较好的模块性,但能够分的在细一些,代码的规范性还有待提升,好比你的类名一个是Functions,另外一个是Function,这都表示功能,但我想要看相应功能的代码,到底应该看哪一个呢,类中有些变量名的定义有些随便。在功能实现方面,能和用户进行必定的交互,词频统计和柱状图显示作的很好,可是向文件写入的顺序是按字母表顺序,不是按词频顺序,但愿经过第四次实验咱们可以一块儿完善这部分的代码。编程
经过本次点评,了解告终对方的代码书写风格和功能逻辑,为任务二的开展定下基础,发现告终对方在博客书写,代码编写上的优势,经过学习注意到本身之后编写时要改进的问题,经过发现不足起到自省和相互学习的目的,有些不足是咱们同时都存在的,那么在接下来结对编程时更加注意,相互提醒,使得本次项目更加的完善和规范,功能不完善的地方也须要共同讨论完成。框架
经过对项目要求的分析,本次结对项目的需求为:
1.实验2要求的功能,单词频数可视化柱状图用GUI显示;
2.统计该文本行数及字符数;
3.各类统计功能均提供计时功能,显示程序统计所消耗时间(单位:ms);
4.可处理任意用户导入的任意英文文本;
5.人机交互界面要求GUI界面(WEB页面、APP页面均可);
6.附加分功能1:统计文本中除冠词、代词、介词以外的高频词;
附加分功能2:统计前10个两个单词组成的词组频率。ide
1.Main中主要是实现主界面和从文本中读入单词并统计词频,统计总行数和总单词数的功能
2.WordCountStatistics实现查询指定单词词频的界面和功能
3.PrintToFile实现向文件按字典顺序写入词频单词的功能
4.由于本次实验中的附加功能1是实验二的查看前N个高频词的扩展,进行合并后HighFrequencyWords实现输出除介词、代词、冠词的用户指定查看的前N个高频词
5.WordCountHistogram实现单词词频柱状图显示
6.在全部功能中都有计时功能函数
1.输出除介词、代词、冠词的用户指定查看的前N个高频词单元测试
String str = "above, over,in,of,at,on,behind,during,from,into, onto,inside,outside,to,without,throughout,out,she,he,its,we,them,your,i,you,my,myeself,a,an,the"; String s[] = str.split(","); ArrayList<Map.Entry<String, Integer>> list = new ArrayList<Map.Entry<String, Integer>>(maps.entrySet()); //按词频排序 Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() { public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) { return o2.getValue() - o1.getValue(); } }); int j=0; int i=0; while (j<wordNum) { boolean flag = true ; String tmpString = list.get(i).getKey(); for (String string : s) { if(tmpString.equals(string)) { flag = false; } } if(flag) { print += list.get(i).getKey()+ ": " +list.get(i).getValue()+" "; j++; } i++; }
2.时间统计学习
long start = System.currentTimeMillis(); JOptionPane.showConfirmDialog(null,print+"\n"+"所用时间:"+(System.currentTimeMillis() - start)+"ms","结果",JOptionPane.DEFAULT_OPTION);
3.柱状图显示测试
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.LIGHT_GRAY); for(int i=0;i<rulerStep;i++){ g2.drawString((30000-1500*i)+"个", 8, topMargin+rulerStep*i);//绘制Y轴上的数据 } g2.setColor(Color.PINK); 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, 40, value, 40, 10);//绘制每一个柱状条 g2.drawString(entry.getKey(), leftMargin+step*2, Height-value/50-5); //标识每一个柱状条 m++; }
1.主界面
2.向文件按字典顺序写入单词词频,并显示所用时间
3.统计总行数和单词数,并显示所用时间
4.除介词、代词、冠词的用户指定查看的前N个高频词
5.查询指定单词词频并显示柱状图
1.根据参考代码规范共同列出本次结对实验的代码规范。
2.互相阅读对方的代码,了解对方代码编写习惯,并按照制定的代码规范改进对方代码。
3.一块儿讨论并填写PSP计划时间。
4.共同进行本次项目的需求分析和整体设计,尤为在实验二基础上新增的功能的实现。
5.由我主导GUI框架的搭建、统计行数单词数和运行时间显示部分,赵燕霞主导柱状图和附加功能的实现,在主导位置的互换过程当中,另外一人则进行对代码规范的监督和提醒,提供功能实现上的不一样想法,以后选择出更好的思路,在出现Bug时,一块儿对代码进行阅读,找出逻辑错误。
6.整个项目完成后,两人共同根据代码规范进行复审,对多余的语句进行简化。
7.填写PSP实际所用时间。
8.撰写报告文档。
任务内容 | 计划完成时间(min) | 实际完成时间(min) |
---|---|---|
计划 | 10 | 7 |
规划工做步骤 | 10 | 7 |
开发 | 255 | 264 |
需求分析 | 10 | 9 |
生成文档 | 5 | 10 |
设计复审 | 15 | 10 |
代码规范 | 20 | 15 |
具体编码 | 180 | 200 |
代码复审 | 15 | 10 |
测试 | 10 | 10 |
报告 | 15 | 12 |
测试报告 | 5 | 7 |
计算报告量 | 5 | 2 |
过后总结 | 5 | 3 |
在本次结对编程的过程当中,体会了合做编程的过程,经过相互的讨论和监督使得代码更规范,功能更完善,逻辑较为严谨,特别是在单元测试和代码复审时,能更快的发现代码的错误,结对编程的效率比较高,在代码规范方面,意识到随意编写的危害,读代码改代码都很费劲,在按编写规范写程序后,逐渐改善了这种状况,但在结对编程中也遇到了问题,好比刚开始分工上打算一人主导一人辅助,但发现主导的人思惟有时会混乱,因此就交换充当主导者的角色;在编程的过程当中常常会出现都感受本身的想法是对的,这样使得讨论陷入僵局,这时咱们采用独自编程的方法,最后谁的能较好实现功能就用哪一个。