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

posted on 2018-04-08 22:07  刘晨曦  阅读(160)  评论(3编辑  收藏  举报

导航