WordCount优化

一、github项目地址
github
二、PSP表格
PSP2.1表格
|
PSP2.1 |
PSP阶段 |
预估耗时 (分钟) |
实际耗时 (分钟) |
|
Planning |
计划 |
||
|
· Estimate |
· 估计这个任务需要多少时间 |
400 | 430 |
|
Development |
开发 |
||
|
· Analysis |
· 需求分析 (包括学习新技术) |
20 | 30 |
|
· Design Spec |
· 生成设计文档 |
45 | 60 |
|
· Design Review |
· 设计复审 (和同事审核设计文档) |
30 | 20 |
|
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
30 | 30 |
|
· Design |
· 具体设计 |
30 | 30 |
|
· Coding |
· 具体编码 |
45 | 40 |
|
· Code Review |
· 代码复审 |
30 | 50 |
|
· Test |
· 测试(自我测试,修改代码,提交修改) |
60 | 75 |
|
Reporting |
报告 |
||
|
· Test Report |
· 测试报告 |
60 | 45 |
|
· Size Measurement |
· 计算工作量 |
20 | 20 |
|
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
30 | 30 |
|
合计 |
400 | 430 |
三、接口实现
我的任务是进行单词的分割,我根据上一次第二周的个人作业,使用了pattern进行正交法则的分割,很快的就完成了主要的核心任务,具体方法是先以除-以外的所有符号并包括数字读取的内容进行分割,得到的数组中全是所需的单词,但可能会出现类似于a--或者--a的单词出现,再对这个数组进行一次遍历并判断就完成单词分割。
while ((s = bufferReader.readLine()) != null) {
String[] word = s.split("[ ,'\"~`!#%^&*_\\(\\)\\[\\]+=:;|<>.?/[0-9]]");
for (String l : word){
if (!Pattern.matches("\\s*",l)&&!Pattern.matches("[-]+",l))
sing.add(l);
}
for (int i=0;i < sing.size();i++) {
s = sing.get(i);
if (Pattern.matches("[a-z]+[-]+",s)){
word = s.split("[-]+");
sing.remove(i);
sing.add(i,word[0] );
}
else if(Pattern.matches("[-]+[a-z]+",s)){
word = s.split("[-]+");
System.out.println(word.length);
sing.remove(i);
sing.add(i,word[1] );
}
}
}
然后由于负责输入模块的同学只把文件打开了,传输给我的是一个文件,所以我利用了输入流对此文件进行处理,并利用了一个读取缓存来保证一次都取量不至于过大而导致崩溃。
public void readFile(File file) throws FileNotFoundException{
inputStreamreader = new InputStreamReader(
new FileInputStream(file));
bufferReader = new BufferedReader(inputStreamreader);
}
四、测试用例
设计测试用例的时候,要根据老师上课讲过的测试用例覆盖方法进行测试。
因为负责输入的同学传输给我的是文件,但是我在测试的时候只测试了自己的WordSplit模块,在我的代码大部分都为黑盒测试,只有在对类似于a--和--a的例子中进行处理的时候才采用了白盒测试。
下面是对于模块的白盒测试,用于测试判断覆盖。
@Test
public void testSplit14(){
ArrayList<String> result14 = new ArrayList<String>();
result14.add("d");
assertEquals(result14,Test1.split(s14));
}
@Test
public void testSplit15(){
ArrayList<String> result15 = new ArrayList<String>();
result15.add("d");
assertEquals(result15,Test1.split(s15));
}
下面是对于基本功能的检测
@Test
public void testSplit1(){
ArrayList<String> result1 = new ArrayList<String>();
result1.add("ab-d");
result1.add("table");
assertEquals(result1,Test1.split(s1));
}
@Test
public void testSplit2(){
ArrayList<String> result2 = new ArrayList<String>();
result2.add("ab");
result2.add("d");
result2.add("table");
assertEquals(result2,Test1.split(s2));
}
@Test
public void testSplit13(){
ArrayList<String> result13 = new ArrayList<String>();
result13.add("software");
assertEquals(result13,Test1.split(s13));
}
下面是对于较复杂的符号分割的检测
@Test
public void testSplit9(){
ArrayList<String> result9 = new ArrayList<String>();
result9.add("see");
result9.add("Box");
result9.add("d");
result9.add("c");
assertEquals(result9,Test1.split(s9));
}
五、测试截图和测试质量的分析

测试用例覆盖了全部的代码,有效的检查了被测验的模块;被测模块没有任何的错误。(吐槽一下,20个测试用例或许太多了,20个测试用例中有部分是重复无必要的。)
六、小组贡献
扩展任务
七、规范理解和评价对象
开发文档阿里巴巴java开发手册 评价对象:何思聪 11083 负责的模块:单词统计模块(wordcount)
选择了开发手册的命名风格和代码格式来进行评价。

在这段命名风格中,在编写代码的过程中没有遵守驼峰风格。

在代码格式这部分中,使用的是tab键进行缩进,而不是使用的是4个空格进行缩进。
八、静态代码分析工具
九、分析结果截图

十、小组分析
缺少注释,并且代码使用的是tab缩进。

浙公网安备 33010602011771号