1.小组项目地址:
2.PSP表格:
PSP2.1 | PSP阶段 | 预估耗时 (分钟) | 实际耗时 (分钟) |
Planning | 计划 | 20 | 20 |
· Estimate | · 估计这个任务需要多少时间 | 20 | 20 |
Development | 开发 | 390 | 460 |
· Analysis | · 需求分析 (包括学习新技术) | 25 | 35 |
· Design Spec | · 生成设计文档 | 10 | 15 |
· Design Review | · 设计复审 (和同事审核设计文档) | 15 | 20 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 10 | 5 |
· Design | · 具体设计 | 30 | 35 |
· Coding | · 具体编码 | 220 | 240 |
· Code Review | · 代码复审 | 20 | 30 |
· Test | · 测试(自我测试,修改代码,提交修改) | 60 | 80 |
Reporting | 报告 | 45 | 50 |
· Test Report | · 测试报告 | 25 | 25 |
· Size Measurement | · 计算工作量 | 10 | 10 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 10 | 15 |
合计 | 435 | 510 |
3.接口设计和实现
小组把项目wordcount优化的任务划分为:
1.main函数编写,判断并处理命令行参数
2.统计文件内单词和词频,定义模块接口
3.单词与词频的排序
4.将排序后的单词与词频输出到文件
其中我负责单词与词频的排序,具体实现的功能是根据词频大小进行降序排列,取词频最高的前100个单词。对于单词词频相同的单词,按照单词所包含的每个字母从a到z的次序依次排列。使用arraylist对词频和单词进行存放。
// 词频排序 public static ArrayList<String> sortList(HashMap<String, Integer> hashMap) { // 以Key进行排序 TreeMap treeMap = new TreeMap(hashMap); // 以value进行排序 ArrayList<Map.Entry<String, Integer>> sortList = new ArrayList<Map.Entry<String, Integer>>( treeMap.entrySet()); Collections.sort(sortList, new Comparator<Map.Entry<String, Integer>>() { public int compare(Map.Entry<String, Integer> mapEntry_1, Map.Entry<String, Integer> mapEntry_2) { // 降序 return mapEntry_2.getValue() - mapEntry_1.getValue(); // 升序 mapEntry_1.getValue() - mapEntry_2.getValue()) } }); ArrayList<String> strSort = new ArrayList<String>(); int loopNum = 0; for (Map.Entry<String, Integer> mapString : sortList) { // 排除-与空格 if (!(mapString.getKey().equals("")) && !(mapString.getKey().equals("-"))) { strSort.add(mapString.getKey()); strSort.add(mapString.getValue().toString()); // 输出前100个单词 if (loopNum > 100) break; loopNum++; } } return strSort; }
4.测试设计
sortList()方法的测试设计是以黑盒测试为主。在单元测试采用断言来比较输出结果。
5.测试结果
6.测试评价
词频统计的测试比较简单直接,但感觉自己测试设置的范围还不够全面。