WordCount优化
github地址: https://github.com/CoolWC/wcPro
基本任务:代码编写+单元测试
- PSP表格
PSP阶段 | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|
计划 | 30 | 30 |
· 估计这个任务需要多少时间 | 30 | 30 |
开发 | 330 | 470 |
· 需求分析(包括学习新技术) | 40 | 60 |
· 设计复审(和同事审核设计文档) | 5 | 5 |
· 代码规范(为目前的开发制定合适的规范) | 5 | 5 |
· 具体设计 | 30 | 20 |
· 具体编码 | 120 | 240 |
· 代码复审 | 10 | 20 |
· 测试(自我测试,修改代码,提交修改) | 120 | 120 |
报告 | 50 | 70 |
· 测试报告 | 30 | 50 |
· 计算工作量 | 10 | 10 |
· 事后总结,并提出过程改进计划 | 10 | 10 |
合计 | 410 | 570 |
- 在分工中我负责的排序模块的编写
经过分析,我们的总体设计是:建立一个WordList类,含有两个属性word和freq,分别代表单词本身和在文件中出现的次数。
协同顺序:统计模块会返回一个ArrayList,元素是包含这两个属性的对象,排序模块接受这个列表后进行处理,排序的结果返回一个新的列表传给输出模块。
在需求中我们可以看到,在获取统计模块得到的数据表后,不仅需要对单词进行词频上的排序,还需要在相同词频中根据字母进行排序。好在Java.Collections包中提供了给字符串根据字母排序的函数,所以我的大体思路是,先用一种排序方法(我选择的是冒泡排序)来对整体词频进行排序,然后再分别取词频相同的单词组成临时列表,去word属性进行排序后再添加入新的列表。
关键代码列举如下:
冒泡排序部分:
字母排序部分:
- 测试设计
因为我的代码中关键节点很少,故根据需求使用黑盒测试方法设计用例,从词频均相同,两种不同词频,四中不同词频,首字母是否相同,首字母是否大写等方面以强覆盖的思路去设计测试用例:
用例1: 空表
用例2: 词频相同 按字母排序 只有小写 第一个字母不同
用例3: 词频相同 按字母排序 只有小写 第一个字母相同
用例4: 词频相同 按字母排序 只有大写 第一个字母不同
用例5: 词频相同 按字母排序 只有大写 第一个字母相同
用例6: 词频相同 按字母排序 大小写混合 第一个字母不同
用例7: 词频相同 按字母排序 大小写混合 第一个字母相同
用例8: 两种词频 按字母排序 小写 第一个字母不同
用例9: 两种词频 按字母排序 小写 第一个字母相同
用例10: 两种词频 按字母排序 大写 第一个字母不同
用例11: 两种词频 按字母排序 大写 第一个字母相同
用例12: 两种词频 按字母排序 大小写混合 第一个字母不同
用例13: 两种词频 按字母排序 大小写混合 第一个字母相同
用例14: 四种词频 按字母排序 大小写混合 第一个字母不同
用例15: 四种词频 按字母排序 小写 第一个字母相同
用例16: 四种词频 按字母排序 大写 第一个字母不同
用例17: 四种词频 按字母排序 大写 第一个字母相同
用例18: 四种词频 按字母排序 大小写混合 第一个字母不同
用例19: 四种词频 按字母排序 大小写混合 第一个字母相同
测试用例代码示例:
测试输出示例:
单元测试运行截图:
测试分析:
第一个测试用例对于输入空表的处理未达到预期
其他的测试用例均顺利通过,较好地满足任务需求
- 小组贡献分:0.25
扩展任务:静态测试
我们组使用了附录四中提供的《阿里巴巴Java开发手册》作为编码规范,安装了阿里巴巴Java开发代码检测IDE插件;
使用Intellj Idea Java IDE 可以直接从IDE中安装该插件,步骤如下:
File-Settings-Plugins-Browse Reposories
搜索Alibaba
点击Install即可安装完成
我分析了组员17160同学的代码,该同学负责输出模块,用插件扫描后,她的代码没有显现出问题,做得好的方面有:变量命名遵从驼峰规范,注释清晰完整
我们组主要的问题就是许多变量命名不统一,根据插件显示的警告修改即可