项目 | 内容 |
---|---|
这个做业属于哪一个课程? | 2016级计算机科学与工程学院软件工程(西北师范大学) |
这个做业的要求在哪里? | 实验四 软件工程结对项目 |
我在这个课程的目标是? | 熟悉软件开发总体流程,提高自身能力 |
本次做业在哪一个具体方面帮助咱们实现目标 | 第一次体验一个完整的工程 |
本次项目代码 | GitHub连接 |
点评内容:
在阅读了你的博文后,我学到了不少,下面时个人一些想法:
1.博文结构排版布局井井有条,排版合理,认真学习了Markdown编辑器语法使用,是我该学习的地方。
2.博文内容按照老师的要求以需求分析、功能设计、设计实现、测试运行、关键代码、总结、PSP展现的步骤分别书写,字体大小适宜,让阅读的人能够方便快捷、清楚明了地找到本身想看的部分。
3.在PSP表中“计划共完成须要的时间”与“实际完成须要的时间”两列数据差异较大的是开发和具体编码两个阶段,而且都是实际完成须要的时间相比更多,我也有这个问题,分析缘由多是对JAVA编程不熟练,或是在编码运行过程当中遇到了困难和阻碍。
4.运行代码时了解到你的代码习惯是主函数一个类,其他功能为一个类。我的以为将每一个功能单独为一个类,这样后续若是想对单个功能的代码进行优化,或者添加删除功能的时候,能够方便直接更改。这点也是我须要改进的地方。代码编写符合基本的代码规范,能够继续优化。
5.功能中的柱状图是用符号的长短代替了,若是能使用可视化界面显示会更好。符号代替在词频相差很少的时候符号长度同样,就不能显示出来哪一个单词词频更多。git
点评心得:
经过此次点评,我认识到本身的不少不足。排版不够美观大方,须要继续学习。编写代码时对类的划分不明确,不少功能都是在Main()函数中完成的,这样编写在后面有错误或者进行复审的时候找代码要先后滑动会很麻烦,个人代码编写不是很规范,这是我须要改进的一个很重要的点。实验二中仍是有不少功能作的太简单,柱状图也没有用可视化界面作出来,这点咱们会在实验四的结对项目中改进完善。github
经过对项目要求的分析,本次结对项目的需求为:
(1)实验2要求的功能;
(2)绘制单词频数可视化柱状图;
(3)统计该文本行数及字符数;
(4)各类统计功能均提供计时功能,显示程序统计所消耗时间(单位:ms);
(5)可处理任意用户导入的任意英文文本;
(6)人机交互界面要求GUI界面(WEB页面、APP页面均可);
(7)附加分功能:统计文本中除冠词、代词、介词以外的高频词。算法
计算查询单词词频的时间编程
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自增 } }
词频柱状图部分代码数据结构
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((30000-1500*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++; } }
主界面编辑器
输入要查询词频的单词,用“,”隔开函数
点击输出词频和柱状图,显示单词及词频数,以及运行时间布局
点击肯定后弹出柱状图界面
输入要查询的高频词个数
点击输出前N个高频词,弹出单词及词频个数,以及运行时间
点击词频导出到文件,弹出运行时间
点击肯定后弹出“写入文件成功...”
点击各项统计,弹出统计的文本行数、字符数、大小写字母、汉字、数字、字节数及运行时间等
将单词及词频按字典顺序输出到文件中
1.在实验二的基础上,分析了还需添加的功能。
2.分别实现统计文本行数、字符数、大小写字母、汉字、数字、字节数、运行时间、柱状图等功能。
3.完成附加功能1。
4.最后的GUI界面由咱们两人共同编写。
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 |
本次实验是第一次结对项目,相比以前的我的项目,此次实验的方法步骤都有很大改变。两我的一块儿编程时,须要在方法、数据结构甚至是变量和函数名上达成一致。这减小了其中一方随意编写代码的可能性,结对编程时也选择了更加标准的语法、格式。每一个人独自进行设计、实现软件的过程当中不免要犯这样那样的错误。若是是结对编程的话,解决问题的能力就提升了,程序中的错误就会少不少,设计质量和代码质量也会高不少,还会省下不少之后修改、测试的时间。由于有随时的复审和交流,并且程序各方面的质量都会由于实力较强的同伴而变得更高。还有就是两我的一块儿合做一件事的时候,精神力更能集中、更专一,从而更能快速高效的完成任务。结对编程时我了解到了不一样的解决问题的思路和算法,知道了一些还未接触到的键盘快捷键和调试技巧。和同伴在一块儿工做让我更好地相互了解对方,从而更加理解她,加强了团队凝聚力。一个成功的软件团队须要不少合做,有效地交流、相互学习和传递经验是颇有必要的。