第四周作业 单元测试
Posted 17028
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第四周作业 单元测试相关的知识,希望对你有一定的参考价值。
基本功能
github地址:https://github.com/DouglasLee001/wordcountPRO
PSP表格
接口的实现
由于我是负责主函数类(包含输入模块)这部分的,因此没有负责相关接口的编写,在此简要的说明一下主函数的构成。
首先是导入java相关包,方便后面写代码时函数调用
主函数:含有一个字符串数组参数,创建一个String变量com保存主函数参数(即将其拼接成一个字符串,串与串之间用空格分开),然后创建一个String变量保存正则表达式,接下来调用Pattern包中的matches函数进行正则表达式匹配。
将匹配结果保存在布尔变量isMatch中,最后根据isMatch的真假来决定是否进行读文件以及打印单词和词频的操作。
import java.util.regex.Pattern; public class countWord { public static void main(String[] args) { //Scanner scan=new Scanner(System.in); //String com=scan.nextLine(); String com=args[0] + " " + args[1]; //利用正则表达式检查用户命令行输入参数是否正确 String pattern = "wcPro.exe .+(\\\\.)txt"; boolean isMatch = Pattern.matches(pattern, com); //表达式正确则跳出循环,否则继续接受用户输入 if(isMatch){ count tar=new count(com.replace("wcPro.exe ","")); tar.countWord(); for(int i=0;i<tar.getWordArray().size();i++){ System.out.println(tar.getWordArray().get(i).word+" "+tar.getWordArray().get(i).num); } } } }
测试用例的设计
注:开始时的主函数参数的传递参数价值很大,可惜无法用Junit框架来测试(参数是从.exe程序输入,故无法在Junit中编写方法测试)
1.正则表达式的匹配测试
很重要的一个功能,格式的匹配以及文件名的获取,关系到程序接下来是否能顺利运行下去,所以需要着重测试。
2.字符串相加
虽然很简单,但是也有可能会出错
3.正则表达式匹配的效率测试
此过程可能会由于正则表达式的选取不当等原因而消耗大量时间,因此需要进行效率的测试
4.函数功能模块的测试
作为核心功能的实现部分,不论是结果的正确性,还是效率的测试都是重中之重。
根据这些模块分类,并结合采用黑盒和白盒测试方法进行测试。以下是测试用例表:
使用Junit进行单元测试
我针对四个类分了四个模块进行测试
1.countWord测试
测试质量中等,被测模块质量较好,暂未发现错误
2.word测试
该模块很简单,测试也简单
3.readFileByLines测试
比较复杂的模块,测试质量中等
4.count测试
该模块质量很高,测试也还行吧
下面为20个测试用例的Junit测试结果,全部都通过了
小组贡献分
0.2
扩展功能
一、代码规范参照地址:http://www.cnblogs.com/xinz/archive/2011/11/20/2255971.html(邹欣老师的博客)
1)选择其中的“代码风格规范”,包括了缩进,行宽,括号,断行和空白的{}行,分行,命名,下划线问题,大小写问题,注释。
二、对组员代码的主观评价
我选择了同组的易安明(17034)同学所负责的核心处理模块的代码,部分如下:
import java.util.ArrayList; import java.util.List; import java.util.regex.Pattern; import java.util.regex.Matcher; public class count { private ArrayList<word> wordArray;//单词数 private String file;//统计的源文件 public count(String theFile){ this.setFile(theFile); } //计算每个文件的单词数 public void countWord(){ readFileByLines readFile= new readFileByLines(this.getFile()); //按行读取指定文件 ArrayList<String> lineArray = new ArrayList<String> (); ArrayList<word> wordArray = new ArrayList<word> (); lineArray=readFile.fileString(); String pattern="([a-zA-Z]+(-[a-zA-Z]+)*)"; Pattern r = Pattern.compile(pattern); for(int i =0;i<lineArray.size();i++){ Matcher m = r.matcher(lineArray.get(i)); while(m.find()){ word cur=new word(m.group(1)); //System.out.println(wordArray.size()); int flag=0; for(int j=0;j<wordArray.size();j++){ if(wordArray.get(j).word.equals(cur.word)){ wordArray.get(j).add(); flag++; //sSystem.out.println("nihao"); break; } } if(flag==0){ cur.change(); wordArray.add(cur); } } } setWordArray(wordArray); } public ArrayList<word> getWordArray() { return wordArray; } public void setWordArray(ArrayList<word> wordArray) { this.wordArray = wordArray; } public String getFile() { return file; } public void setFile(String file) { this.file = file; } }
问题:
括号{}没有对齐,变量命名不太规范。
优点:
思路清晰,注释很规范,代码的缩进以及大括号的摆放很标准。
三、静态代码检查工具选择了:阿里巴巴Java开发代码检测IDE插件,参考安装网址:https://www.cnblogs.com/ysgcs/p/7675977.html
四、静态代码检查过程
1)界面截图:
主要问题及解决方案:
1.for语句缺少大括号:加上大括号
2.变量的命名不规范,首部不能是下划线:应该遵从驼峰形式
3.类中没有添加@author信息:修改方法参照https://blog.csdn.net/ln865709215/article/details/53112789
五、整个小组代码存在的问题
主要还是代码风格不够规范,对于@author此类的注解信息,因为一开始没有这种习惯,导致后来手动添加比较麻烦;最为严重的是类名的首字母没有大写,其他常见问题与我自己的代码相似,不在一一列举。
以上是关于第四周作业 单元测试的主要内容,如果未能解决你的问题,请参考以下文章