1. 14组结对项目github项目仓库地址:
https://github.com/daizuhua123/PairProject2018
2. PSP表格
PSP2.1 |
任务内容 |
计划共完成需要的时间(min) |
实际完成需要的时间(min) |
Planning |
计划 |
5 |
3 |
· Estimate |
· 估计这个任务需要多少时间,并规划大致工作步骤 |
2 |
2 |
Development |
开发 |
135 |
110 |
·· Analysis |
需求分析 (包括学习新技术) |
10 |
5 |
· Design Spec |
· 生成设计文档 |
20 |
5 |
· Design Review |
· 设计复审 (和同事审核设计文档) |
5 |
5 |
· Coding Standard |
代码规范 (为目前的开发制定合适的规范) |
10 |
5 |
· Design |
具体设计 |
20 |
10 |
· Coding |
具体编码 |
30 |
30 |
· Code Review |
· 代码复审 |
20 |
20 |
· Test |
· 测试(自我测试,修改代码,提交修改) |
20 |
30 |
Reporting |
报告 |
40 |
15 |
·· Test Report |
· 测试报告 |
20 |
10 |
· Size Measurement |
计算工作量 |
10 |
5 |
· Postmortem & Process Improvement Plan |
· 事后总结 ,并提出过程改进计划 |
10 |
40 |
3.解题思路如下:
(1)使用英文单词词频统计+ java作为关键词搜索获得原型程序;
(2)结对分析原型程序代码,比较结对项目要求与原型程序功能的差异;
(3)在原型程序基础上,进行代码的补充与完善,以满足结对项目任务中主要的统计功能要求;
(4)使用刘乾助教提供的测试文件进行程序的功能测试。
(5)进一步细化完成运行程序交互参数的技术实现。
4. 设计实现过程。
程序只有一个类wordCount,根据任务需求,按照模块化分解,类中服务列表如下:
//集合数据排序服务
public static ArrayList<Map.Entry<String,Integer>> SortMap(Map<String,Integer> oldmap)
//数据集合数据
public static void outputResult(ArrayList<Map.Entry<String,Integer>> list,PrintWriter ps )
//统计集合数据的单词
public static int CountWords(Map<String,Integer> oldmap)
//统计字符个数
public static int CountCharacters(String line)
类中主函数依次调用以上函数完成文本中字符数据统计、文本行数统计、单词统计等功能。
结对任务要求无复杂计算任务,无须绘制流程图。
单元测试从指定文件读入短文本数据,根据程序运行结果测试程序功能正确性。
6. 代码说明。展示出项目关键代码,并解释思路与注释说明。
关键代码如下:
//逐行读入文本文件,按任务要求逐行统计字符、单词与行数 while((readLine = br.readLine()) != null){ rowNumbers++;//统计行数 characterNumbers+=CountCharacters(readLine); String[] wordsArr1 = readLine.split("[^a-zA-Z]"); //分解单词 for (String word : wordsArr1) { if(word.length() != 0){ //去除长度为0的行 lists.add(word); // } } } br.close();
Map<String, Integer> wordsCount = new TreeMap<String,Integer>(); //存储单词计数信息,key值为单词,value为单词数
//单词的词频统计 for (String li : lists) { if(wordsCount.get(li) != null){ wordsCount.put(li,wordsCount.get(li) + 1); }else{ wordsCount.put(li,1) } } |
结对编程总结:
结对编程可有效突破单人编程的思维局限性,通过快速、有效地的口头交流对要解决问题的求解方案达成一致的看法和认识。结对双方在编码时,一人出声描述代码构造思路,另一人认真聆听编程者的设计思路和意图,可快速诊断编码存在的缺陷与不足。结对编程可有效诊断被程序员熟视无睹的代码误写问题。例如本次任务,编码者误将运算符“+=“写为”=+“,编码者一直未诊断出此错误,而结对方则在代码走查时,根据程序执行结果迅速定位错误。