WordCount优化
github地址
https://github.com/mrlandiao/WCpro
PSP表格
PSP2.1 |
PSP阶段 |
预估耗时(分钟) |
实际耗时(分钟) |
Planning |
计划 |
10 |
15 |
· Estimate |
· 估计这个任务需要多少时间 |
10 |
15 |
Development |
开发 |
400 |
500 |
· Analysis |
· 需求分析 (包括学习新技术) |
50 |
60 |
· Design Spec |
· 生成设计文档 |
15 |
25 |
· Design Review |
· 设计复审 (和同事审核设计文档) |
20 |
30 |
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
5 |
10 |
· Design |
· 具体设计 |
20 |
30 |
· Coding |
· 具体编码 |
160 |
180 |
· Code Review |
· 代码复审 |
50 |
80 |
· Test |
· 测试(自我测试,修改代码,提交修改) |
120 |
120 |
Reporting |
报告 |
70 |
100 |
· Test Report |
· 测试报告 |
40 |
50 |
· Size Measurement |
· 计算工作量 |
10 |
20 |
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
20 |
30 |
|
合计 |
480 |
615 |
接口设计
根据实验前的调查与讨论,本次实验分为四个模块,分别为main(input),scan,sort,writetxt。其中main负责接受输入,scan用来统计单词的数量,sort用来排序,writetxt用来实现文本输出。我负责的模块为input模块,根据讨论的结果,input分别对其他三个模块都有接口,先把filepah传给scan模块进行扫描,再接受扫描结果sum,并将其传给sort模块进行排序,返回res,最后把排序的结果res输出。
代码如下:
1 public class Main { 2 public static void main(String[] args)throws Exception { 3 if(args.length<1){ 4 throw new IllegalArgumentException("请输入足够的参数"); 5 } 6 if(!args[args.length-1].endsWith(".txt")){ 7 throw new IllegalArgumentException("请输入txt文件"); 8 } 9 String filepath=null;//默认被统计文件路径 10 String outpath="result.txt";//默认结果保存路径 11 filepath=args[args.length-1];//被统计文件路径 12 Map<String, Integer> sum=scan(filepath); 13 String res=SortMap(sum); //按值进行排序 14 writetxt(res,outpath); 15 }
测试设计过程
测试用例的设计应当根据软件需求和模块特点进行考量。输入函数仅有两个简单判断,并没有太多分支,所以没有必要也无法采用白盒测试。故采用黑盒测试,检验模块面对不规范输入和非法字符时的表现。
Test Case ID 测试用例编号 |
Test Item 测试项 (功能模块或函数) |
Test Criticality 重要级别 |
Pre-condition 预置条件 |
Input 输入 |
Procedure 操作步骤 |
Output 预期结果 |
Result |
Status |
Remark 备注 (在此描述使用的测试方法) |
input_1 |
input |
H |
无 |
args数组 |
无 |
true |
True |
Y |
黑盒测试 |
input_2 |
input |
H |
无 |
args数组 |
无 |
true |
True |
Y |
黑盒测试 |
input_3 |
input |
M |
无 |
args数组 |
无 |
true |
True |
Y |
黑盒测试 |
input_4 |
input |
M |
无 |
args数组 |
无 |
true |
True |
Y |
黑盒测试 |
input_5 |
input |
M |
无 |
args数组 |
无 |
true |
True |
Y |
黑盒测试 |
input_6 |
input |
M |
无 |
args数组 |
无 |
true |
True |
Y |
黑盒测试 |
input_7 |
input |
H |
无 |
args数组 |
无 |
false |
false |
Y |
黑盒测试 |
input_8 |
input |
H |
无 |
args数组 |
无 |
false |
false |
Y |
黑盒测试 |
input_9 |
input |
H |
无 |
args数组 |
无 |
false |
False |
Y |
黑盒测试 |
input_10 |
input |
H |
无 |
args数组 |
无 |
false |
False |
Y |
黑盒测试 |
input_11 |
input |
H |
无 |
args数组 |
无 |
false |
False |
Y |
黑盒测试 |
input_12 |
input |
H |
无 |
args数组 |
无 |
false |
False |
Y |
黑盒测试 |
input_13 |
input |
M |
无 |
args数组 |
无 |
false |
False |
Y |
黑盒测试 |
input_14 |
input |
M |
无 |
args数组 |
无 |
false |
False |
Y |
黑盒测试 |
input_15 |
input |
M |
无 |
args数组 |
无 |
false |
False |
Y |
黑盒测试 |
input_16 |
input |
M |
无 |
args数组 |
无 |
false |
False |
Y |
黑盒测试 |
input_17 |
input |
L |
无 |
args数组 |
无 |
false |
False |
Y |
黑盒测试 |
input_18 |
input |
L |
无 |
args数组 |
无 |
false |
False |
Y |
黑盒测试 |
input_19 |
input |
L |
无 |
args数组 |
无 |
false |
False |
Y |
黑盒测试 |
input_20 |
input |
L |
无 |
args数组 |
无 |
false |
False |
Y |
黑盒测试 |
单元测试的时候通过对scan返回的map数组的分析,可知输入的为各个单词以及对应的数量,在进行测试的时候,首先自行判断测试用例文本各个单词的词频情况,并自行加入map数组,然后再使用sort函数分析测试用例,然后将两个string进行比对。以下为其中一个单元测试例子
1 @Test 2 public void testmain1() { 3 flag=main("wcPro.txt",0); 4 assertEquals(flag,0); 5 }
单元测试截图
开发规范说明
选择的是Google Java编程风格指南
中文版链接:https://blog.csdn.net/zen99t/article/details/50763231
代码分析
评审的是scan模块(学号:U201517079)的代码,该代码基本符合编程规范。其中有所不符合的是代码大括号的使用,规范说明大括号前不要换行,但该模块中的代码有的进行了换行,有的则没有,这是不够好的。命名规范方面,该模块与规范一致,类名都以UpperCamelCase风格编写,方法名都以lowerCamelCase风格编写,参数名以lowerCamelCase风格编写等。
静态代码检查工具
采用了多种工具,并比对发现各种工具的检测规则不尽相同。
有PMD,findbugs,checkstyle,所需插件均能在该站点找到:http://sourceforge.net/
工具扫描结果
PMD和findbugs扫描结果都为无错误,选用其他代码进行展示错误结果。
PMD:
Checkstyle:
Checkstyle规范较为严格,对缩进空格有着严格的规定,导致所有代码都不符合规范,而findbugs和PMD则发现不了问题。这说明本次实验代码还是较为符合编程规范的。其遵循的好的规范主要都在Google Java编程风格指南中可以找到。
小组代码分析
本次小组实验的代码基本还是比较符合规范的,就是接口的设计不够好,模块划分的不够严谨,导致部分模块的代码可读性不够高。
性能指标
采用的性能指标为时间的长短。
数据加倍之后:
可以发现程序的效率还是非常高的。
同行评审
全部组员都参加了同行评审,由组长进行主持,主要评审的模块是scan和sort模块,由于这两个模块消耗资源较多,所以需要进行评审改进。通过对实验需求的研究和模块效率的实验,最终评审的结论为,由于这两个模块采用的函数都是使用的Java内置函数来解决,如split(),map数组的排序等,所以效率应该最大化,不需要太大的改进。
测试结果
经过多次对比测试,可知影响效率的主要因素为scan和sort函数以及输入txt的大小。结果与评审结果一致,无需对函数进行改进,效率已经很高了。
实践总结
经过整个任务的过程,我认为软件开发、软件测试、软件质量之间的关系是,软件开发是基础,即首先应该完成项目的需求,软件测试要穿插其中,用来发现软件不符合需求的地方,软件质量可以放在最后来实现但也要时刻注意,用来提高整个项目的质量。这三个也是密不可分的,三者结合起来才能是项目实现的最好。
小组贡献
根据全员的讨论结果,我的小组贡献分为0.25
参考文献
https://blog.csdn.net/u010180815/article/details/52208924
https://blog.csdn.net/jaune161/article/details/40025861
https://www.cnblogs.com/bhlsheji/p/4807669.html
https://www.cnblogs.com/EasonJim/p/7685724.html
https://zhidao.baidu.com/question/117274778.html
https://blog.csdn.net/u013132051/article/details/54345742
https://www.cnblogs.com/fnlingnzb-learner/p/6018604.html
https://zhidao.baidu.com/question/406042091.html
https://www.cnblogs.com/huangye-dream/archive/2013/03/01/2938937.html