标签:1.2 rem 编写 定义 asn junit4 等价 report .so
https://github.com/ReWr1te/WcPro
PSP2.1 | PSP阶段 | 预估耗时 (分钟) |
实际耗时 (分钟) |
---|---|---|---|
Planning | 计划 | 60 | 60 |
·Estimate | ·估计这个任务需要多上时间 | 60 | 60 |
Development | 开发 | 680 | 890 |
·Analysis | ·需求分析(包括学习新技术) | 30 | 30 |
·Design Spec | ·生成设计文档 | 30 | 30 |
·Design Review | ·设计复审(和同事审核设计文档) | 20 | 30 |
·Coding Standard | ·代码规范(为目前的开发制定合适的规范) | 20 | 30 |
·Design | ·具体设计 | 60 | 60 |
·Coding | ·具体编码 | 240 | 300 |
·Code Review | ·代码复审 | 40 | 50 |
·Testing | ·测试(自我测试,修改代码,提交修改) | 240 | 360 |
Reporting | 报告 | 240 | 300 |
·Test Report | ·测试报告 | 100 | 120 |
·Size Measurement | ·计算工作量 | 40 | 60 |
·Postmortem & Process Improvement Plan | ·事后总结,并提出过程改进计划 | 100 | 120 |
合计 | 980 | 1250 |
本人所在小组对WordCount优化项目定义了4个接口,分别为
String parseCommand(String[] args)//输入命令行命令,返回文件内容
HashMap<String, Integer> parseContent(String str)//输入文件内容,返回单词统计信息
void writeResult(HashMap<String, Integer> result)//输入单词统计信息,排序并将其写入文件
GUI//GUI界面完成人机交互
我要设计实现的接口是void writeResult(HashMap<String, Integer> result)
,输入的参数为单词统计信息,存放在一个HashMap里面,key是字符串类型,存放的是单词内容,value是整型,存放的是词频。首先,我要对单词词频进行降序排列,对单词词频相同的情况,按照单词所包含的每个字母从a到z的次序依次排列,若单词包含连字符-,则连字符优先。这涉及到对HashMap的排序,我参考了博客如何将HashMap,按照value值排序[1]和Java Map 按Key排序和按Value排序[2]实现对单词词频的降序排列。下面贴出重写实现Comparator接口的compare方法的代码。
/**
* 排序类
*/
private static class ValueComparator implements Comparator<Map.Entry<String,Integer>> {
public int compare(Map.Entry<String,Integer> m,Map.Entry<String,Integer> n){
if(n.getValue()-m.getValue()==0)
return m.getKey().compareTo(n.getKey());
else
return n.getValue()-m.getValue();
}
}
使用的时候需要调用Collections工具类的sort方法,传入我们自己写的这个实现类的对象,作为参数就可以了。
接下来是输出词频排序的结果,排序之后得到的是一个List,里面存放的是Map.Entry
/**
* 输出
*/
public String output(List<Map.Entry<String,Integer>> list){
final String pathOfOutput="result.txt";
String outContent="";
Map.Entry<String,Integer> oMap;
int amount=0;//仅输出单词词频从高到低排序的前100个(从1到100)
for(Iterator<Map.Entry<String,Integer>> it=list.iterator();it.hasNext()&&amount<100;++amount){
oMap=it.next();
outContent+=oMap.getKey()+" "+oMap.getValue()+"\n";
}
if(outContent.length()>0) {
outContent = outContent.substring(0, outContent.length() - 1);//去除输出文件末尾多余的换行符
}
writeFile(pathOfOutput,outContent);
return outContent;
}
关键方法流程图
我对ResultWriter类的排序方法sort()和输出方法output()进行了单元测试,采用黑盒测试和白盒测试方法设计了22个测试用例,进行了等价类划分,得到以下分类:
各单词词频不重复;
单词词频重复;
词频重复基础上单词首字母重复;
词频重复基础上单词首字母、二字母重复;
词频重复基础上单词首字母、二字母、三字母重复;
词频重复基础上字母和连字符的比较;
单词数不过百(50个);
单词数过百(113个)。
边界情况:
单词数为0;
单词数为100;
调用排序方法之前单词词频已有序;
调用排序方法前单词词频倒序排列。
测试用例由于内容过多,详情请见本项目Github的test文件夹上的测试用例清单。
我在IntelliJ IDEA上用JUnit4单元测试框架对自己负责实现的接口进行单元测试,编写单元测试脚本ResultWriterTest.java,下面给出关键部分代码和运行截图:
/**
* test method sort
* @throws Exception
*/
@Test
public void testSort1() throws Exception {
System.out.println("sort1");
List<Map.Entry<String, Integer>> list = resultWriter.sort(result);
String sortedContent="";
Map.Entry<String,Integer> sortedMap;
for(Iterator<Map.Entry<String,Integer>> it=list.iterator();it.hasNext();){
sortedMap=it.next();
sortedContent+=sortedMap.getKey()+" "+sortedMap.getValue()+"\n";
}
sortedContent=sortedContent.substring(0,sortedContent.length()-1);
assertEquals(sortedStr,sortedContent);
}
/**
* test method output
* @throws Exception
*/
@Test
public void testOutput1() throws Exception {
System.out.println("output1");
List<Map.Entry<String, Integer>> sortedList = resultWriter.sort(result);
String string=resultWriter.output(sortedList);
assertEquals(outContent,string);
}
运行截图:
评价:自己的单元测试的等价类划分还不够完美,可能没覆盖所有情况,边界测试也可能没覆盖所有边界,对输入内容为空的测试没有覆盖,测试覆盖了常见的情况,能满足基本需求。通过测试我觉得被测模块的质量水平较高,该模块被其他模块调用不会出现问题。
[1] https://blog.csdn.net/u012730840/article/details/19699179
[2] https://www.cnblogs.com/zhujiabin/p/6164826.html
[3] https://www.cnblogs.com/Simeonwu/p/7565005.html
标签:1.2 rem 编写 定义 asn junit4 等价 report .so
原文地址:https://www.cnblogs.com/SSSGLQ/p/8748002.html