201671030127赵津莹 《英文文本统计分析》结对项目报告
博文简要信息表###
|项目|内容
|:--|:--|:--|:--|:--|:--|:--|:--|
|作业所属课程 | 软件工程
|作业要求 | 实验四 软件项目结对
|课程学习目标 | 熟悉软件开发整体流程,提升自身能力
|帮助实现目标 | 第一次体验一个完整的工程
任务一###
- 1.点评的博客地址
https://www.cnblogs.com/yehong123/p/10554937.html - 2.github链接地址
https://github.com/yehong123/ye - 3.点评内容
阅读你的博文后,我的看法如下:
(1).你的博文结构严谨,从需求分析、功能设计、设计实现、运行测试、代码片段、总结、PSP这几个部分来展示项目完成的全部过程。
(2).博文内容完善,在需求分析中详细的描述了软件所蕴含的功能;在功能设计中写出软件所实现的功能;在设计实现中,讲述了具体的编程过程,创建三个类,分别为Main.java Sort.java WordCont.javMain.java,还画出程序的流程图,但是流程图的设计不是很美观,图片看的不是很清晰,希望你可以继续努力。在测试运行中通过截图展示了运行结果;在代码片段中,张贴了此次项目中重要的代码片段。总结了自己的经验与不足,列出PSP图表,总结实际用时与理想用时的差别。
(3).PSP中“任务内容”列的内容是博文结构内容的具体展开与完善。
(4).通过详细浏览PSP图表,对比分析可知,你在具体编码过程中计划完成时间与实际完成时间都耗时最长,可能还是对JAVA编程的不熟练,希望你以后勤加练习。
(5).阅读了你的代码并运行后发现软件结构比较严谨,创建了三个类,分别是Main.java Sort.java WordCont.java。Main.java 实现了文本中单词的读入并将单词及其词频数按字典顺序输出到result.txt。Sort.java 实现对文本中单词数目的降序排序,找出出现频率最高的单词。WordCont.java实现了词频统计,将单词及其词频数按字典顺序输出,并输出文本中单词的总数目和出现频率最高的单词。代码书写比较规范,但是功能实现的不是很完善,没能将查找词频的单词用柱状图显示出来也没能显示前k个单词的词频及单词。人机交互做的比较好,使人轻易的可以明白操作指令. - 4.点评心得
阅读完这位同学的博文后,首先对结对的同学有了简单的连接,了解了对方的编码习惯和优缺点,为以后两人合作开发项目做铺垫,避免在日后编码过程中产生大的分歧。通过分析自己和对方的PSP表发现在具体编码阶段都用时比较长,可能编程能力都不是很强,通过这次结对项目,加强对代码的编写,共同进步。
任务二###
- 1.需求分析
采用两人合作方式,设计开发一个英文文本统计分析软件,使之具有以下功能:
(1)实验2要求的功能;
(2)单词频数可视化柱状图;
(3)统计该文本行数及字符数;
(4)各种统计功能均提供计时功能,显示程序统计所消耗时间(单位:ms);
(5)可处理任意用户导入的任意英文文本;
(6)人机交互界面要求GUI界面(WEB页面、APP页面都可);
(7)附加分功能:统计文本中除冠词、代词、介词之外的高频词;,
(8)附加分功能:统计前10个两个单词组成的词组频率。 - 2.软件设计
(1)Main中主要是主菜单和读入文本进行词频统计和对功能的调用及绘制柱状图
(2)OutText实现词及词频数按字典顺序输出到文件result.txt的功能
(3)Test实现统计文本行数和字符数的功能
(4)TopWord实现统计高频词的功能
(5)WordCount实现统计词频个数
(6)各种统计功能均提供计时功能,显示程序统计所消耗时间 - 3.代码展示
(1)统计行数和字符数
public void zzz(Map<String, Integer> Map) throws IOException
{
Scanner input=new Scanner(System.in);
System.out.println("请输入路径");
String path=input.next();
long date1=System.currentTimeMillis();
int charNum= 0 ;
int lineNum = 0;
InputStreamReader isr = new InputStreamReader(new FileInputStream(path));
BufferedReader br = new BufferedReader(isr);
while( br.read()!= -1){
String s = br.readLine();
charNum+=s.length();
lineNum ++;
}
isr.close();//关闭
System.out.println("字符数:"+charNum+"行 数:"+lineNum);
long date2=System.currentTimeMillis();
long time=0;
time=date2-date1;
System.out.println("时间:"+time+"ms");
}
(2)将单词及对应的词频排序
public int compare(Entry<String, Integer> ele1, Entry<String, Integer> ele2) {
return ele1.getKey().compareTo(ele2.getKey());
}
});
Map<String,Integer> Map2 = new LinkedHashMap<String, Integer>();
for(Entry<String,Integer> entry: List) {
Map2.put(entry.getKey(), entry.getValue());
}
- 4.程序运行
(1)统计词频个数
(2)柱形图显示
(3)统计高频词
(4)统计行数、字符数
(5)用户界面
本次结对项目只做出一个界面
- 5.结对过程
(1)互相点评对方的博客,研究代码。总结两人在上次实验中的优势与不足,互相学习,讨论可以改进优化的地方。了解对方代码编写习惯,为合作做铺垫。完成此次结对作业的PSP中的计划时间。
(2)对本项目进行需求分析,功能设计等。确定程序的大致框架。
(3)进行编程。两人一起完成各功能的设计、编码。由于Java编程能力不足,在编写代码的过程中耗费了大量时间,需要经常上网查找资料。在编程想法上也会常常出现分歧,在编程过程中不断地磨合,共同完成本次项目。
(4)完成该项目的PSP填写工作。
(5)完成博客编写。
- 6.PSP
任务内容 | 计划共完成需要的时间(min) | 实际完成需要的时间(min) |
---|---|---|
计划 | 12 | 20 |
规划工作步骤 | 15 | 9 |
开发 | 130 | 130 |
需求分析 | 10 | 12 |
生成设计文档 | 15 | 20 |
设计复审 | 5 | 7 |
代码规范 | 10 | 15 |
具体设计 | 10 | 20 |
具体编码 | 300 | 400 |
代码复审 | 10 | 5 |
测试 | 20 | 15 |
报告 | 30 | 30 |
测试报告 | 5 | 5 |
计算报告量 | 5 | 5 |
事后总结 | 5 | 3 |
- 7.项目总结
通过此次的项目结对,培养了我们合作与交流的能力,锻炼了我们编程的能力,虽然在具体编码过程中所用时间较长,但是编程的能力得到了提升,效率得到了提高。在这次项目中,发现交流和沟通真的非常重要,良好的交流使得项目得到良好的进展,避免两人产生分歧和做同样的工作。