第2周个人作业:WordCount

mac2022-06-30  22

github地址

https://github.com/HastingsX/SoftwareTest

PSP表格

PSP2.1PSP阶段预估耗时(分钟)实际耗时(分钟)Planning计划101· Estimate· 估计这个任务需要多少时间101Development开发730890· Analysis· 需求分析 (包括学习新技术)6060· Design Spec· 生成设计文档2030· Design Review· 设计复审 (和同事审核设计文档)1010· Coding Standard· 代码规范 (为目前的开发制定合适的规范)1010· Design· 具体设计3060· Coding· 具体编码480540· Code Review· 代码复审6060· Test· 测试(自我测试,修改代码,提交修改)60120Reporting报告120150· Test Report· 测试报告100120· Size Measurement· 计算工作量1010· Postmortem & Process Improvement Plan· 事后总结, 并提出过程改进计划1020合计8601050

解题思路

先读取在命令行输入的参数来判断进行哪些操作,通过循环和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

这些测试用例基本符合了需求 。

参考文献

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)

转载于:https://www.cnblogs.com/zhiwei97/p/8598022.html

相关资源:JAVA上百实例源码以及开源项目
最新回复(0)