WordCount 实现与测试
一、github地址
https://github.com/cosensible/WordCountPlus
二、PSP表格
PSP2.1 | PSP阶段 | 预估耗时(分钟) | 实际耗时 |
---|---|---|---|
Planning | 计划 | 30 | 30 |
· Estimate | · 估计这个任务需要多少时间 | 30 | 30 |
Development | 开发 | 280 | 280 |
· Analysis | · 需求分析 (包括学习新技术) | 20 | 20 |
· Design Spec | · 生成设计文档 | 20 | 20 |
· Design Review | · 设计复审 (和同事审核设计文档) | 10 | 10 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 20 | 20 |
· Design | · 具体设计 | 30 | 40 |
· Coding | · 具体编码 | 60 | 60 |
· Code Review | · 代码复审 | 20 | 20 |
· Test | · 测试(自我测试,修改代码,提交修改) | 100 | 90 |
Reporting | 报告 | 110 | 100 |
· Test Report | · 测试报告 | 60 | 60 |
· Size Measurement | · 计算工作量 | 20 | 10 |
· Postmortem & ProcessImprovement Plan | · 事后总结, 并提出过程改进计划 | 30 | 30 |
合计 | 420 | 410 |
三、接口实现
我主要负责的是对文件读取的接口,该接口的功能是按行读取文件,并简单处理为字符串数组,最终返回这个字符串数组
代码如下:
public static String[] read(final String filePath) {
File file = new File(filePath);
// 当文件不存在或者不可读时
if ((!isFileExists(file)) || (!file.canRead())) {
System.out.println("file [" + filePath + "] is not exist or cannot read!!!");
return null;
}
List<String> lines = new LinkedList<String>();
BufferedReader br = null;
FileReader fb = null;
try {
fb = new FileReader(file);
br = new BufferedReader(fb);
String str = null;
int index = 0;
while ((str = br.readLine()) != null) {
lines.add(str);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
closeQuietly(br);
closeQuietly(fb);
}
return lines.toArray(new String[lines.size()]);
}
- 在main函数中,已经过滤掉了非txt文件,所以执行本接口的所有文件名,均为txt。
- 判断文件是否存在,以及能否读取,不能则返回null。
- 若为正确且存在的txt文件,则按行读取文件内容,并以字符串数组形式返回。
四、测试设计
程序流程图如下:
- 判断是否可读且存在
- 不可读或不存在返回null
- 可读且存在返回处理后的字符串数组
白盒测试:有两条路径
路径 | 测试用例 | 预期输出 | 实际输出 |
---|---|---|---|
A->B->C->E | notExist.txt | file [notExist.txt] is not exist or cannot read!!! | file [notExist.txt] is not exist or cannot read!!! |
A->B->D->F | d.txt | {"asdsj dsfd","adsf dsfd"} | {"asdsj dsfd","adsf dsfd"} |
黑盒测试
- 可划分为三个等价类
等价类 | 描述 | 输入 | 输出 |
---|---|---|---|
1 | 文件不存在或不可读 | notExist.txt | null |
2 | 文件存在可读,为空 | a.txt | {} |
3 | 文件存在可读,不为空 | d.txt | {"asdsj dsfd","adsf dsfd"} |
五、单元测试
- 运行截图如下(具体代码 FileUtilReadTest.java)
测试及模块评价
- 测试用例覆盖全面,白盒测试覆盖了所有路径,黑盒测试也测试了所有情况,测试完善。
- 测试模块功能明确,代码简介易懂,注释详尽,测试中未发现较大缺陷。
六、静态测试
- 使用了《阿里巴巴Java开发手册》中第三部分,代码格式
- 由于代码量不多,分析了所有代码。(下面是问题展现)
缺点:
- if 与 else的模块中缺少了大括号
优点:
- 左小括号和字符之间不出现空格
- if/for/while/switch/do 等保留字与括号之间都必须加空格。
- 任何二目、三目运算符的左右两边都需要加一个空格。
- 采用 4 个空格缩进,禁止使用 tab 字符。
- 注释的双斜线与注释内容之间有且仅有一个空格。
- 单行字符数限制不超过 120 个,超出需要换行,
使用了alibaba规范的自制IDE插件
下载地址:https://pan.baidu.com/s/1NSJo9yXKmOoP6bM4CyMMig代码中存在的问题截图如下:
存在问题:
- if与else不加大括号
- 通过类实例访问静态变量
- 数组定义格式错误