代码地址:https://github.com/maymaymaymaymay/WordCount
如下是PSP表格:
PSP2.1表格
PSP2.1 | PSP阶段 | 预估耗时 (分钟) | 实际耗时 (分钟) |
Planning | 计划 | 30 | 20 |
· Estimate | · 估计这个任务需要多少时间 | 30 | 20 |
Development | 开发 | 740 | 910 |
· Analysis | · 需求分析 (包括学习新技术) | 120 | 200 |
· Design Spec | · 生成设计文档 | 30 | 30 |
· Design Review | · 设计复审 (和同事审核设计文档) | 20 | 20 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 30 | 60 |
· Design | · 具体设计 | 60 | 60 |
· Coding | · 具体编码 | 300 | 360 |
· Code Review | · 代码复审 | 120 | 120 |
· Test | · 测试(自我测试,修改代码,提交修改) | 60 | 60 |
Reporting | 报告 | 180 | 270 |
· Test Report | · 测试报告 | 60 | 120 |
· Size Measurement | · 计算工作量 | 60 | 120 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 60 | 30 |
合计 | 960 | 1200 |
解题思路:
将问题细化,如基本功能,知识要点可分为:
1、如何读取一个文件,并将其转为字符串
2、处理获得的字符串:读取字符数,通过判断逗号和空格得到单词书,读取字符串的行数
3、将内容输入到指定文件
4、如何将Java文件转化为exe文件
5、获取main函数参数之后进行处理,通过对比参数与相关指令从而决定调用那个函数
程序设计实现过程:
代码涉及的类有:
readFileChars(用于读取指定文件中的字符数)
readFileWords(用于读取指定文件中的字符数)
readFileLine(用于读取指定文件中内容的行数)
writeToFile(用于把指定内容写入指定文件中)
readMoreData(用于获取指定文件的代码行/注释行/空行)
searchFiles(用于遍历当前目录)
由主函数的参数获得用户输入的是哪个指令(如-c,-w,-l,-o等),以此决定调用哪个函数
代码说明:
readFileChars()
//读取文件中的字符数 -c
public static String readFileChars(String fileName) {
File file=new File(fileName);
long len=file.length();
String text=fileName+",字符数:"+len+"\r\n";
System.out.println(text);
//textToFile(text);
return text;
}
readFileWords()
//计算单词数的过程,除开逗号和空格在开头和结尾,或者两者连续出现的情况外,
//每次出现逗号和空格都记为一个单词的出现
for(int i=1;i<str.length()-1;i++){
if((String.valueOf(str.charAt(i))).equals(",")||(String.valueOf(str.charAt(i))).equals(" ")){
if(judgeWord==false){
count++;
judgeWord=true;
}
} else{
judgeWord=false;
}
}
readFileLine()
while((s=bReader.readLine())!=null){
sb.append(s);
count++;
}
writeToFile()
try {
reader = new FileReader(tempFile);
BufferedReader bReader=new BufferedReader(reader);
StringBuilder sb=new StringBuilder();
String s="";
try {
while((s=bReader.readLine())!=null){
sb.append(s+"\r\n");
}
bReader.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
str=sb.toString();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
textToFile(str,fileName); //将之前获得的内容写入指定文件
searchFile():
public static List<File> searchFiles(String fileDir,String str){
List<File> fileList=new ArrayList<File>();
File file=new File(fileDir);
File[] files=file.listFiles();
for(File f:files){
if(f.isFile()){
fileList.add(f);
}else if(f.isDirectory()){
//System.out.println(f.getAbsolutePath());
searchFiles(f.getAbsolutePath(),str);
}
}
// for(File f1:fileList){
// if(f1.getName().endsWith(str)){
//
// System.out.println(f1.getName());
// }
// }
return fileList;
}
测试用例的设计
总结白盒测试的各种方法:语句覆盖,判定覆盖,条件覆盖,路径覆盖等。
得出以下测试用例:
测试用例 | 预期结果 |
wc.exe -c -w - l note.txt | 分别显示出note.txt中的字符数,单词数,行数 |
wc.exe -w -l -c result.txt | 即使指令输入顺序不一样,但是结果与上面的一致 |
wc.exe -o result.txt | 把以上输出的结果写入result.txt中 |
wc.exe -c -w - l note.txt -o result.txt | 以上结果直接显示且同时添加到result.txt中 |
wc.exe -o | 结果提示:-o后面需要加入文件名 |
wc.exe -a note.txt | 结果显示note.txt 的代码行/空行/注释行 |
wc.exe -s *txt | 显示当前目录下的txt文件 |
wc.exe -a -s *txt | 实现当前目录下的txt文件中的代码行/空行/注释行 |
wc.exe | 提示指令不完整 |
部分运行结果:
参考文献链接
一个更简单的Java转exe的方法:https://jingyan.baidu.com/article/ca00d56c59f881e99eebcff7.html
Java相关操作文件的例子:http://blog.csdn.net/liuweiyuxiang/article/details/69487326
Java判断指定字符:http://blog.csdn.net/yeyingss/article/details/53690098