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) } } |
结对编程总结:
结对编程可有效突破单人编程的思维局限性,通过快速、有效地的口头交流对要解决问题的求解方案达成一致的看法和认识。结对双方在编码时,一人出声描述代码构造思路,另一人认真聆听编程者的设计思路和意图,可快速诊断编码存在的缺陷与不足。结对编程可有效诊断被程序员熟视无睹的代码误写问题。例如本次任务,编码者误将运算符“+=“写为”=+“,编码者一直未诊断出此错误,而结对方则在代码走查时,根据程序执行结果迅速定位错误。