第2周个人作业:WordCount

Github地址

https://github.com/ohayogirls/SoftwareTest

PSP表格

PSP2.1

PSP阶段

预估耗时

(分钟)

实际耗时

(分钟)

Planning

计划

 30  60

· Estimate

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

 10  10

Development

开发

 600  600

· Analysis

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

 120  180

· Design Spec

· 生成设计文档

 30  60

· Design Review

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

 10  20

· Coding Standard

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

 30  40

· Design

· 具体设计

 120  180

· Coding

· 具体编码

 300  480

· Code Review

· 代码复审

 40  60

· Test

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

200  300 

Reporting

报告

 60  80

· Test Report

· 测试报告

60   60

· Size Measurement

· 计算工作量

 30  30

· Postmortem & Process Improvement Plan

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

30   40
 

合计

1670  2200 
# 解题思路 功能的实现要通过对命令行参数数组args进行解析,对对应的选项(例如-w -c)进行相应的操作。 需求里要求的选项有:-c -w -l -o -s -a -e 通过对参数第一个字符是否是‘-’来判断该参数是选项还是文件路径。 分析这些选项同时存在时逻辑上的执行顺序,可以得出-o -s是需要先处理的,-c -w -l -a是同一顺序等级的,-e是要在存在-w的情况下处理的。 我实现args解析的办法就是在这个逻辑顺序的基础上判断每个选项是否存在于args数组中,若存在则执行相应操作。 -c -w -l选项通过FileReader.readline()可以很简单的实现; -o 通过初始化FileWriter(output.txt),然后FileWriter.write()实现; -a 在读取文件的基础上要加上字符创的匹配; -e 停用词表功能和读单词数功能相关,操作也类似,先把停用词表文件里的单词读出存入一个ArrayList里,在读单词时加上判断单词是否在这个ArrayList里即可; -s 功能是递归读取目录下符合条件的文件,通过getfile函数得到符合条件的文件,进行迭代处理。 #程序设计实现过程 因为对java不是很熟悉,所以没有建其他类,把所有函数都写在了一个类里,有些具体操作也没写在函数里,程序的主体是通过if语句判断字符串数组args里的字符串来执行相应的操作,这里给出我写了的函数 - readfile(String fileName,int res,String ouputPath) fileName是要读取的文件路径,res是选项命令,outputPath是输出的文件路径 该函数的功能是实现-c -w -l三个选项的操作,函数内含一个switch,通过res来确定实现哪一个功能。 - countCode(String f,String Path) f是要读取的文件路径,Path是输出的文件路径 该函数的功能是实现-a选项的操作 - ArrayList\ getfile(String fileDir,String filename) 递归得到目录及子目录里符合条件的文件 - match(String pattern,String filename) 字符串匹配

代码说明

    /*
    在没有-s命令的情况下执行-c命令
    -w -l命令同理,-a命令将readFile函数改成countCode函数
    */
    if((optnum=opt.indexOf("-s"))==-1){			
		    //-c选项:返回文件 file.c 的字符数
			    if((optnum=opt.indexOf("-c"))!=-1){
				    int i = optNum.get(optnum);//获得选项在args中的位置
				    while(true){				
					    if(fileName.contains(args[++i])){
						    break;
					    }
				    }
				    readFile(args[i],'c',outputPath);
			    }
    /*
    在有-s命令的情况下递归执行-c命令
    其他命令同理
    */
    for(String f:filelist){
    if((optnum=opt.indexOf("-c"))!=-1){
	        			
		        		readFile(f,'c',outputPath);
			    }
    }
    //没有-o命令默认输出到result.txt
   
     if((optnum=opt.indexOf("-o"))==-1){
			File output = new File(outputPath);
			output.createNewFile();
			FileWriter fw =  new FileWriter(output);
			fw.write("");
			fw.close();
		}
    //-o命令

   if((optnum=opt.indexOf("-o"))!=-1){
			int i = optNum.get(optnum);//获得选项在args中的位置
			while(true){				
				if(fileName.contains(args[++i])){
					break;
				}
			}
			outputPath=args[i];
			File output = new File(outputPath);
			output.createNewFile();
			FileWriter fw =  new FileWriter(output);
			fw.write("");
			fw.close();

测试设计过程

考虑在测试所有功能的基础上,覆盖程序的每一条可执行路径。
测试用例里要用到的文件放在和wc.exe一个目录下

  • 测试单个基础功能选项是否正确输出在result.txt
    • wc.exe -c file.c
    • wc.exe -w file.c
    • wc.exe -l file.c
    • wc.exe -a file.c
  • 测试绝对路径下是否正确
    -wc.exe -c [测试环境下的绝对路径]
  • 测试多个选项能否共享一个参数
    • wc.exe -c -w -l -a file.c
  • 测试同时读取不同的文件
    • wc.exe -c file1.c -w file2.c -l file3.c
  • 测试指定输出文件
    • wc.exe -c -w -l -a file.c -o output1.txt
  • 测试递归处理目录下符合条件的文件
    • wc.exe -c -w -l -a -s *.c -o output2.txt
  • 测试停用词表
    • wc.exe -w -file.c -e stoplist.txt
  • 执行所有选项命令
    • wc.exe -c -w -l -a -s *.c -o output3.txt -e stoplist.txt

参考文献链接

http://blog.csdn.net/u010897406/article/details/50698012

posted @ 2018-03-19 20:57  多啦Z梦  阅读(168)  评论(0)    收藏  举报