软件测试第二周个人作业:WordCount

1、Github地址

https://github.com/Hust17003/WordCount 

2、PSP表格

PSP2.1

PSP阶段

预估耗时

(分钟)

实际耗时

(分钟)

Planning

计划

4060

· Estimate

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

8401070

Development

开发

720950

· Analysis

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

120180

· Design Spec

· 生成设计文档

--

· Design Review

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

--

· Coding Standard

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

3030

· Design

· 具体设计

6060

· Coding

· 具体编码

360420

· Code Review

· 代码复审

3060

· Test

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

120200

Reporting

报告

120120

· Test Report

· 测试报告

60 60

· Size Measurement

· 计算工作量

3030

· Postmortem & Process Improvement Plan

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

30 30
 

合计

8801130

3、解题思路

看到题目之后,我首先在百度上查找了JAVA文件操作的相关内容;对命令行进行分析主要利用了split()方法,将命令行中的字符串按空格分解为字符串数组,再判断每个部分的含义,并调用相关函数执行命令,具体的文件内容计数见下面的代码说明部分,另外由于时间关系,只实现了作业要求中的基本功能。

wc.exe -c file.c     //返回文件 file.c 的字符数
wc.exe -w file.c     //返回文件 file.c 的单词总数
wc.exe -l file.c     //返回文件 file.c 的总行数
wc.exe -o outputFile.txt     //将结果输出到指定文件outputFile.txt

4、程序设计实现过程

设计的时候,考虑到程序实现并不需要创建属性类,所以打算把所有功能集合到一个Java文件内,先利用argv[]将用户的输入的命令按空格进行分割存储,从wc.exe开始利用if和switch一步步的判断命令是否符合格式以及要求实现哪些功能,并调用相应功能模块进行功能跳转,根据命令按行读取相应文件内容,每读一个字符就使字符数加一,按空格和‘,’对读取内容分解,得到的字符数组长度就是单词数,因为是按行读取,所以每读一行加一即可,最后对结果进行输出。

5、代码说明

(1)命令行处理与判断

 1              if(argv!= null){
 2                 /*argv[0]存储"wc.exe",argv[1]存储文件内容操作"-s-w-l(中间无空格)"
 3                   argv[2]存储"需要读取判断的文件名",argv[3]存储"-o",argv[4]存储输出文件名*/
 4                 if(argv[0].equals("wc.exe")){//检测输入语法正确性
 5                     String[] cmd = argv[1].split("-");//过滤"-",将标志字存入数组
 6                     if(cmd.length>0){
 7                         int i=1;
 8                         while(i<cmd.length){//利用循环使得能够判断strArray[1]中的所有标志位
 9                             if(argv[2] != null)
10                                 pathName = argv[2];
11                             else
12                                 System.out.println("error input!");
13                             switch(cmd[i]){
14                             case "c":
15                                 isChar = true;
16                                 break;//跳出switch
17                             case "w":
18                                 isWord = true;
19                                 break;
20                             case "l":
21                                 isLine = true;
22                                 break;
23                             default:
24                                 System.out.println("error input!");
25                             }
26                             i++;
27                         }
28                     }else{
29                         System.out.println("error input!");
30                     }
31                     
32                     if(argv.length > 3)//如果存在-o参数,判断并设置标志位
33                         if(argv[3].equals("-o") && argv[4] != null){
34                             isOut = true;
35                             outputPath = argv[4];
36                         }

(2)文件读取与计数

 1             File filename = new File(filePath);  
 2             InputStreamReader reader = new InputStreamReader(
 3                     new FileInputStream(filename)); 
 4             BufferedReader br = new BufferedReader(reader);  
 5             String str;
 6             while(( str=br.readLine() ) != null)//按行读取文件内容
 7             {
 8                 countChar += str.length();//字符长度就是字符个数
 9                 countChar++;//每一行会有一个换行符,所以加一
10                 countWord += str.split(",| {1,}").length-1;//split() 由一个或一个以上空格或",",把一个字符串分割成字符串数组,字符串数组的长度,就是单词个数
11                 countLine++;//因为是按行读取,所以每次增加一即可计算出行的数目
12             }
13             br.close();

(3)将结果输出到其它文件

1             File file = new File(str); 
2             if (!file.exists()) {  
3                 file.createNewFile();  
4             }  
5             FileWriter fw = new FileWriter(file.getAbsoluteFile());  
6             bw = new BufferedWriter(fw);  
7             bw.write(content);  
8             bw.close();  

6、测试用例

wc.exe –c file.txt
测试了多种字符的识别,确保能够应对大多数情况
测试文件内容:!@#$%^&*()_+{}|"?><[]\;',./~`a,结果与预期一致为30

wc.exe -w-l file.txt
测试文件内容:
测试多行代码的单词数判断,并且单词与单词之间有 ‘=’、‘()’、‘;’等符号
  • File write,name = new File(outputPath);
                writename.createNe|wFile();
                Buffe,redWriter out = new BufferedWrit,er(new FileWriter(writename));
                out.close();
测试结果:单词数16,行数4,与预期一致

wc.exe -c-w-l file.txt -o outputfile.txt,以上述文件内容测试,输出文件内容与预期相符合

7、参考文献

a:作业内容与要求 http://www.cnblogs.com/llag9810/p/8604262.html

b:文件的读写操作 https://www.yiibai.com/java_io/java_nio_files_content.html

c:java中split函数的用法 https://jingyan.baidu.com/article/9989c746c5d707f648ecfe05.html

d:判断字符串中单词个数 https://www.cnblogs.com/gccbuaa/p/7097332.html

e:jar转exe http://blog.csdn.net/sunkun2013/article/details/13167099

f:测试要求 https://elearning.hust.edu.cn/webapps/blackboard/content/listContent.jsp?content_id=_41037_1&course_id=_16233_1&mode=view#_41137_1

8、参考了软工1502班李桐岩同学U201517013的代码

https://github.com/TongyanLi/WordCount

转载于:https://www.cnblogs.com/sher-tqb/p/8604972.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值