https://github.com/HastingsX/SoftwareTest
先读取在命令行输入的参数来判断进行哪些操作,通过循环和if语句得到相关信息,然后将文件内的字符数、单词数、行数、代码行/空行/注释行一并统计出来,根据参数选择性输出到结果文档内。
查阅资料:
java main方法参数传递(http://blog.csdn.net/docuxu/article/details/73604038)Java实现词频统计(Wordcount)-Map或Hashtable的value排序 (http://blog.csdn.net/qy20115549/article/details/52784926)Java一次读取文本文件所有内容(http://www.cnblogs.com/longronglang/p/7458027.html)String使用equals和==比较的区别(http://blog.csdn.net/andyzhaojianhui/article/details/75176807)Java-IO之BufferedWriter(字符缓冲输出流)(http://blog.csdn.net/qq924862077/article/details/52740488)Java获取文件后缀名(http://www.cnblogs.com/henuyuxiang/p/7485834.html)Java使用递归找出某目录下的所有子目录以及子文件(http://www.cnblogs.com/wangtianze/p/6690644.html)java获取指定文件夹下的所有文件名 (http://blog.csdn.net/aa8568849/article/details/52670133)一个类(Main类),三个函数(main函数,getAllFilePaths函数和scan函数)。
main函数首先先通过读入参数判断要进行哪些操作,统计是否要用到停用词表,统计结果是否有指定的输出文件名,然后判断是对一个文件进行统计还是利用getAllFilePaths函数对一个目录下符合条件的文件进行统计,这些都通过if语句来判断分别进行不同的操作,把要统计的文件名或路径存入一个String数组,通过循环依次对指定的文件使用scan函数进行统计,将统计结果合成一个字符串(String),一次性写入到结果文件中。
在完成基本功能字符统计,单词数统计,行数统计后git推送一次;完成扩展功能递归处理目录下符合条件的文件,返回代码行、空行、注释行,采用停用词表进行统计后git推送一次,后为完善功能,修复bugs而推送多次。
scan方法中将文件按行读入,分行处理。
有关字符统计和单词统计的代码如下:
InputStreamReader isr = new InputStreamReader(new FileInputStream(path)); BufferedReader br = new BufferedReader(isr); ...... String str=null;int flagex=0,j=0; while((str=br.readLine())!=null){ char[] chars=str.toCharArray(); for( i=0;i<chars.length;i++) {//统计每行字符数并加到字符总数里 numChar++; } numChar++;//添上每行最后的换行符 String[] tmp= str.split(" |,");//以空格或英文逗号分隔开每个单词 for(i=0;i<tmp.length;i++){ if(tmp[i].length()!=0){ if(extraList.size()!=0){//假如使用了停用词表 flagex=0; for(j=0;j<extraList.size();j++) { if (tmp[i].equals(extraList.get(j))){ flagex = 1;//这个存在于停用词表内,将flagex置1 break; } } if(flagex!=1) {//只统计不在停用词表里的单词 numWord++; } } else{ numWord++; } } } ...... numChar--;//减去最后一行不存在的换行符与“-s”功能相关的读取目录及子目录下所有文件的代码如下:
//获取当前目录和子目录下所有文件 public static ArrayList<String> getAllFilePaths(File filepath,ArrayList<String> filePaths){ File[] array=filepath.listFiles(); if(array==null) return filePaths; for(File f:array){ if(f.isDirectory()){//递归读取子目录下内容 filePaths.add(f.getPath()); getAllFilePaths(f,filePaths); } else{ filePaths.add(f.getPath()); } } return filePaths; }判断行性质的代码因为过长而进行文字说明:假如一行不超过一个可显示字符,则它是空行,假如它有只两个字符且该行是“//”或“/*”,则是注释行,假如它有三个或三个以上字符,假如它是以“{//”或“{/*”或“}//”或“}/*”开头,则他是注释行,剩下的情况都是代码行。
测试中风险最高的地方在单词数的统计,代码行、空行、注释行的统计,因为这这些地方的代码较为复杂,与其它较为简明的地方相比更易出错。
设计测试用例的思想是是没一个判断语句执行一遍,实现条件覆盖,更进一步,尽量让每一个判断语句在是或否的情况下都执行一遍,实现语句覆盖。
设计10个测试用例。
编写的测试脚本"test.bat"内容如下:
wc.exe -a a.c wc.exe a.c wc.exe -c *.c wc.exe -o wc.exe a.c -o wc.exe -s -c -w -l -a *.c -out0.txt wc.exe -s -c -w -l -a *.c -e b.c -o out1.txt wc.exe -c -w -l -a a.c out2.txt wc.exe -c -w -l -a a.c -e b.c -o out3.txt wc.exe -c -w -l -a a.c -e -o文件“a.c”内容如下:
a bc a,c,,c ,a //a /*a */ /*a b c */ /* */ {// }//文件”b.c“内容如下:
abc bc ad这些测试用例基本符合了需求 。
转载于:https://www.cnblogs.com/zhiwei97/p/8598022.html
相关资源:JAVA上百实例源码以及开源项目