Wordcount项目总结报告

Github网页链接:https://github.com/yunsansui/software
(注:采用了1504成建伟的代码)

 

 

PSP2.1

PSP阶段

预估耗时

(分钟)

实际耗时

(分钟)

 

Planning

计划

 10

 20

 

· Estimate

· 估计这个任务需要多少时间

 20

 20

 

Development

开发

 40

 60

 

· Analysis

· 需求分析 (包括学习新技术)

 60

 100

 

· Design Spec

· 生成设计文档

 60

 100

 

· Design Review

· 设计复审 (和同事审核设计文档)

 40

 50

 

· Coding Standard

· 代码规范 (为目前的开发制定合适的规范)

 60

 80

 

· Design

· 具体设计

 300

 360

 

· Coding

· 具体编码

 360

 540

 

· Code Review

· 代码复审

 60

 80

 

· Test

· 测试(自我测试,修改代码,提交修改)

 100

 120

 

Reporting

报告

60 

 80

 

· Test Report

· 测试报告

 60

 120

 

· Size Measurement

· 计算工作量

 20

 20

 

· Postmortem & Process Improvement Plan

· 事后总结, 并提出过程改进计划

 30

 40

 

 

合计

 1280

 1790

 

 

 

1.需求分许
这个项目的需求可以概括为:对程序设计语言源文件统计字符数,单词书,行数,统计结果以指定格式输出到默认文件中,以及其他扩展功能,并能够快速地处理多个文件。初开始拿到题目的时候有一丝困惑,在经过一段时间的思考后,打算用来java来实现。大体思路分为一读取命令行,二统计各项数据,打算采用自底向上一层层来实现相应功能。最后再通过使用编译器生成jar包后,由第三方软件exe4j即可将jar包转换成exe文件。(由于自己的java技术欠缺,所使用的是同学的代码)。


2.程序设计实现过程
可以划分为主函数和调用函数
其中调用又可以分为五个方面
参数处理 文件写入 读行 读字符 以及读单词
流程图如下:

 

 

 

3. 代码说明

基本功能:
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);
// System.out.println(string);}
br.close();
isr.close();
fis.close();
}
catch(FileNotFoundException e){
e.printStackTrace();
}
catch(UnsupportedEncodingException e){
e.printStackTrace();
}
catch(IOException e){
e.printStackTrace();
}
}
String message=null;
if(action1.equals("-l"))
message=(sourcefile+", 行数:"+linecount+"\r\n");//换行"\r\n"不是"\n"
else if(action1.equals("-c"))
message=(sourcefile+", 字符数:"+charcount+"\r\n");//换行"\r\n"不是"\n"
else if(action1.equals("-w"))
message=(sourcefile+", 单词数:"+wordcount+"\r\n");//换行"\r\n"不是"\n"
return message;
}


扩展功能:
static String moredata(String myfile)throws FileNotFoundException {
File file=new File(myfile);
// 记录注释行数
long annotationLine = 0;
// 记录空白行数
long blankLine = 0;
// 记录有效代码的行数
long codeLine = 0;
//假注释
long notLine=0;
if (file == null || !file.exists())
throw new FileNotFoundException(file + ",文件不存在!");
BufferedReader br = null;
// 判断此行是否为注释行
boolean comment = false;
int whiteLines = 0;
int commentLines = 0;
int normalLines = 0;
try {
br = new BufferedReader(new FileReader(file));
String line = "";
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++;
}
}
见github详细说明

 

4.测试设计过程
本次测试采用白盒测试的方法(结构测试)白盒测试法的覆盖标准有逻辑覆盖、循环覆盖和基本路径测试。其中逻辑覆盖包括语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖。
六种覆盖标准:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖发现错误的能力呈由弱至强的变化。语句覆盖每条语句至少执行一次。判定覆盖每个判定的每个分支至少执行一次。条件覆盖每个判定的每个条件应取到各种可能的值。判定/条件覆盖同时满足判定覆盖条件覆盖。条件组合覆盖每个判定中各条件的每一种组合至少出现一次。路径覆盖使程序中每一条可能的路径至少执行一次。
测试用例分为10种,分别对相应功能进行测试,并对组合的功能进行整体测试。如下:

 

1. wc.exe -w -c -l test.c
(走无-o,无-e 无-a的路径,文件名用(默认)当前路径)
2. wc.exe -w -c D:\test\test.c
(走无-l的路径,文件名用绝对路径)
3,wc.exe -w test.c -e stoplist.txt -o out.txt
(停用词列表是否对生效)

4. wc.exe  -a -c -l -w  test.c -e stoplist.txt

(测试功能-a,-e忽视词。此处应该注意要有-w,单词数的显示。)

5. wc.exe -a -c test.c -o out.txt

(错误输入的反应。)

6. wc.exe -s -w  test.c -e stoplist.txt
(-e指令在输入文件指令之前的情况)

7. wc.exe -w -l D:\test\test.c -o out.txt

(-o指令在输入文件的操作指令之前的情况)
8.wc.exe -a -l -c -w test.c
(打乱顺序,看输出到文件中的顺序是否依然不变)
9.wc.exe  -l test.c -e stoplist.txt
 (该文件不存在)
10. wc.exe  -s -w test.c -o out.txt
(输入文件的名称错误。显示错误信息)

 

5.总结
通过本次课程设计知道了自己很多的不足,熟悉了java的编程,同时也了解了软件开发的整体过程,知道了psp的使用。总而言之,收益匪浅。

 

6.参考文献链接
https://www.baidu.com/
http://www.cnblogs.com/xinz/archive/2011/10/22/2220872.html
https://baike.baidu.com/item/%E7%99%BD%E7%9B%92%E6%B5%8B%E8%AF%95/934440?fr=aladdin
《编译技术》

 

posted on 2018-03-21 12:50  yunfeiHu  阅读(313)  评论(5编辑  收藏  举报