WordCount测试小程序的实现
一、GitHub地址:
https://github.com/245553473/WordCount
二、PSP表格:
PSP |
PSP阶段 |
预估耗时(分钟) |
实际耗时(分钟) |
Planning |
计划 |
10 |
5 |
Estimate |
估计这个任务需要多少时间 |
10 |
5 |
Development |
开发 |
60 |
50 |
Analysis |
需求分析(包括学习新技术) |
5 |
5 |
Design Spec |
生成设计文档 |
5 |
5 |
Design Review |
设计复审(和同事审核文档) |
5 |
5 |
Coding Standard |
代码规范(为目前的开发制定合适的规范) |
5 |
5 |
Design |
具体设计 |
5 |
5 |
Coding |
具体编码 |
40 |
30 |
Code Review |
代码复审 |
5 |
5 |
Test |
测试 |
20 |
10 |
Reporting |
报告 |
10 |
10 |
Test Report |
测试报告 |
10 |
10 |
Size Measurement |
计算工作量 |
10 |
10 |
Postmortem & Process Improvement Plan |
事后总结,并提供过程改进计划 |
5 |
5 |
|
合计 |
205 |
165 |
三、 解题思路
通过文件路径获得所需测试的文件,FileReader.readLine()逐行读取文件内容,再通过正则表达式判断该行为空或是代码行或是注释行,每行的字符数直接获得相加即可。拓展功能中递归处理文件夹下符合条件的文件,通过实现java.io.FilenameFilter接口,并根据所给条件创建相应正则表达式,用File.list(FilenameFileter f)方法获取所给路径下满足条件的文件名即可。通过命令行获取参数后根据参数的不同确定执行不同的方法。
四、程序实现
创建一个信息类,里面存储所需要的各项数据,该类的构造器为所测试文件的路径,在构造一个新的对象时即对该文件进行分析,即将所有信息存储在内存中,不同的命令参数使得打印的数据不尽相同。通过java.io.PrintWriter对结果进行格式化打印。
五、 代码说明
private void analysis(){
if(!isAnalysis){
isAnalysis=true;
String s;
BufferedReader in = null;
try {
n =new BufferedReader(new FileReader(path.toString()));
while((s=in.readLine())!=null){
switch(analysisLine(s)){
case SPACE:spaceSum++;break;
case CODE:codeSum++;break;
case NOTE:noteSum++;break;
}
charNum+=s.replaceAll("\\s", "").length();
wordNum+=s.split("\\W+").length;
lineSum++;
}
} catch (IOException e) {
System.out.println("文件不存在"+path());
}finally{
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
这是该程序的核心分析代码,对文件的所有信息进行统计。\\s 是正则表达式中代表空格的符号,包括\t,\n,空格, \\W代表非字符的符号。
六、测试设计过程
在wc.exe相同目录下放置多个.java文件,如A.java,b.java,c.java,d.java,e.cpp,f.cpp,g.cpp。
命令行输入以下命令:
(1) wc.exe -c A.java
(2) wc.exe -c -s .*java
(3) wc.exe -a A.java
(4) wc.exe -l A,java
(5) wc.exe -a -s .*java
(6) wc.exe -s -a .*cpp
(7)wc.exe -c -l -a -s .*cpp
(8) wc.exe -c -l -a -s .*java -o output.txt
(9) wc.exe -o output.txt -c f.cpp
(10) wc.exe -o output.txt -s -a .*cpp
七、参考文献链接
http://www.cnblogs.com/xinz/archive/2011/10/22/2220872.html