第二周作业:wordCount
第二周作业:WordCount
注:(代码借用1504班成建伟)
1.Github地址:https://github.com/woloveyi/ruance
2.PSP2.1表格:
PSP2.1 |
PSP阶段 |
预估耗时 (分钟) |
实际耗时 (分钟) |
Planning |
计划 |
30 |
20 |
· Estimate |
· 估计这个任务需要多少时间 |
25 |
35 |
Development |
开发 |
450 |
760 |
· Analysis |
· 需求分析 (包括学习新技术) |
60 |
100 |
· Design Spec |
· 生成设计文档 |
60 |
60 |
· Design Review |
· 设计复审 (和同事审核设计文档) |
30 |
30 |
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
25 |
10 |
· Design |
· 具体设计 |
70 |
60 |
· Coding |
· 具体编码 |
320 |
410 |
· Code Review |
· 代码复审 |
40 |
100 |
· Test |
· 测试(自我测试,修改代码,提交修改) |
60 |
80 |
Reporting |
报告 |
120 |
110 |
· Test Report |
· 测试报告 |
60 |
100 |
· Size Measurement |
· 计算工作量 |
20 |
30 |
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
40 |
45 |
|
合计 |
1420 |
1950 |
3.设计思路
由于对Java了解的很少,作业的时间又很紧,所以借用了其他同学的代码,根据他的讲解对代码进行了一定的了解。
本次编程的需要是统计文件的字符数。单词数和行数,以及进行一系列的测试根据命令输出相应结果。
大概的思路是分为主函数和调用函数,根据调用函数来读行,在读行的过程中进行对字符还有单词的判断。然后在依次执行参数的功能,并输出到文件中。
4.代码说明
1.文件中字符数,单词数,行数计算的代码
package wordcount;
//基本功能
import java.io.*;
import java.util.Set;
import java.util.TreeMap;
public class basecount {
//字符数、单词数和行数
while((line=br.readLine())!=null)
{
linecount++;
sb.append(line);
charcount+=line.length();
String[] split = line.split("\\s++|\\.|,|\\;|\\(|\\)|\\[|\\]|\\<|\\>|\\=|\\-|\\+|\\*|\\/|\\{|\\}|\\_");
for (int i = 0; i < split.length; i++) {
// 获取到每一个单词
Integer integer = map.get(split[i]);
// 如果这个单词在map中没有,赋值1
if(null==integer){
map.put(split[i], 1);
}else{
// 如果有,在原来的个数上加上一
map.put(split[i], ++integer);
}
}
}
// 遍历,根据key获取所对应的value
Set<String> keySet = map.keySet();
for (String string : keySet)
if(!(string.equals("")))//{
wordcount+=map.get(string);
2扩展功能
while ((line = br.readLine()) != null) {
line = line.trim();
if (line.matches("^[//s&&[^//n]]*$")||line.equals("{")||line.equals("}")) {
// 空行 :本行全部是空格或格式控制字符,如果包括代码,则只有不超过一个可显示的字符,例如“{”
whiteLines++;
}
/* 本行不是代码行,并且本行包括注释。一个有趣的例子是有些程序员会在单字符后面加注释:
* }//注释
*/
else if (line.startsWith("/*") && !line.endsWith("*/")||((line.startsWith("{/*")||line.startsWith("}/*"))&&!line.endsWith("*/"))){
// 判断此行为"/*"开头的注释行
commentLines++;
comment = true;
} else if (comment == true && !line.endsWith("*/")&&!line.startsWith("*/")) {
// 为多行注释中的一行(不是开头和结尾)
notLine++;
commentLines++;
} else if (comment == true && (line.endsWith("*/")||line.startsWith("*/"))) {
// 为多行注释的结束行
commentLines++;
comment = false;
} else if (line.startsWith("//")|| line.startsWith("}//")||line.startsWith("{//")||
((line.startsWith("{/*") ||line.startsWith("}/*")||line.startsWith("/*")) && line.endsWith("*/"))) {
// 单行注释行
commentLines++;
} else {
// 正常代码行
//System.out.println(line);
normalLines++;
}
}
}
5.测试过程
本次测试采用白盒测试的方法,白盒测试的测试方法有代码检查法、静态结构分析法、静态质量度量法、逻辑覆盖法、基本路径测试法、域测试、符号测试、路径覆盖和程序变异。语句覆盖每条语句至少执行一次。判定覆盖每个判定的每个分支至少执行一次。条件覆盖每个判定的每个条件应取到各种可能的值。判定/条件覆盖同时满足判定覆盖条件覆盖。条件组合覆盖每个判定中各条件的每一种组合至少出现一次。路径覆盖使程序中每一条可能的路径至少执行一次。
测试用例:
(1)测试 -l wc.exe -l file.c -o output.txt
(2)测试 -c-w wc.exe -c -w test.c
(3)测试 - a wc.exe – a file.c -o output.txt,
(4)测试-c wc.exe – c test. c
(5)测试-a
-l wc.exe – a -l . file c
(6)测试
-l -w -c wc.exe -l -w -c file.c
(7)测试 -c -l -w wc.exe -c -l -w file c
(8)测试-s
-c -w -l wc.exe -s -a -w -l file.c
(9)测试-s
-c -w -l wc.exe -s -l -w –c file.c -o output.txt,
(10)测试-s
-c -w -l wc.exe -s -l -w –c file.c -e
stoplist.txt -o output.txt
6.心得体会
通过这次程序的测试使我对软件测试的知识有了更好的理解,通过对以学知识的运用及对未学知识的学习和应用,使得我学习的知识更加系统化,并且能够很好的融会贯通。这次测试培养了我设计的能力,并大大增加了我对测试的兴趣。以后要更加努力学习软件测试,争取把它学的更好
7.需要改善
加强对其他一些语言的学习,由于自己知识的局限性让我知道自己不能自由的发挥,有很多需要改进的地方,希望能够有所提高。
8.参考文献
posted on 2018-03-21 22:19 foreverlln 阅读(154) 评论(2) 收藏 举报