概述
一、github项目地址:https://github.com/DouglasLee001/wordcountPRO
二、PSP表格
PSP2.1表格
PSP2.1 | PSP阶段 | 预估耗时 (分钟) | 实际耗时 (分钟) |
Planning | 计划 | 20 | 20 |
· Estimate | · 估计这个任务需要多少时间 | 5 | 5 |
Development | 开发 | 30 | 30 |
· Analysis | · 需求分析 (包括学习新技术) | 60 | 60 |
· Design Spec | · 生成设计文档 | 40 | 40 |
· Design Review | · 设计复审 (和同事审核设计文档) | 20 | 20 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 60 | 65 |
· Design | · 具体设计 | 30 | 30 |
· Coding | · 具体编码 | 5 | 10 |
· Code Review | · 代码复审 | 10 | 20 |
· Test | · 测试(自我测试,修改代码,提交修改) | 180 | 200 |
Reporting | 报告 | 40 | 50 |
· Test Report | · 测试报告 | 40 | 50 |
· Size Measurement | · 计算工作量 | 20 | 20 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 10 | 10 |
合计 | 580 | 605 |
三、模块的接口实现说明
1)sort类:
重载comparator()函数,当两个word对象的num值不同的时候,就返回两者的num值比较结果,如果两者的num值相同,就返回两者的中string ::word的比较值
1 class sort implements Comparator { 2 public int compare(Object o1, Object o2) { 3 word s1 = (word) o1; 4 word s2 = (word) o2; 5 if (s1.getNum() > s2.getNum()) 6 return -1; 7 else if(s1.getNum()<s2.getNum()) 8 return 1; 9 else { 10 if(s1.word.compareTo(s2.word)>0) 11 return 1; 12 else 13 return -1; 14 } 15 } 16 }
2)类sortWord:提供将未排序的arrayList<word>数组变成已排序的,返回ArrayList<word>,调用重载了比较算符comparator的sort类
1 public class sortWord { 2 public ArrayList<word> Sortword(ArrayList<word> wordList) { 3 Collections.sort(wordList, new sort()); 4 return wordList; 5 } 6 }
四、测试用例的设计
1)测试方法的考虑:
(1)对于我自身写的两个类,sort与sortWord类,前者是重载了comparator运算符,后者是进行排序,采用白盒测试方法,对不同的路径进行覆盖,需要对当不同的词频时,相同词频不同单词,相同词频不同单词长度的情况进行排序。
(2)对于组员所写的输入方法,进行黑盒测试,根据功能需求,需要考虑当输入正常,输入不为txt文件,输入文件不存在,输入中只有一行空行时的情况进行测试。
(3)对于组员写的单词识别和词频统计方法,采用黑盒测试的方法,根据功能需求,考虑了边界值条件,测试当内容为空,内容为带“-”,常见字符,数字等情况,并进行了等价类划分:
第一,Let’s,这种包含单引号的情况,视为2个单词,即let和s。
第二,night-,带短横线的单词,视为1个单词,即night。
第三,“I,带双引号的单词,视为1个单词,即i。
第四,TABLE1-2,带数字的单词,视为1个单词,即table。
第五,(see Box 3–2).8885d_c01_016,带数字、常用字符和单词的情况,视为4个单词,即see, box, d, c。
2)测试效率的考虑:使用junit框架能够实现快速有效地进行针对性的测试,通过与自己的预期结构进行对比,查漏补缺。
3)测试用例表,具体测试代码详见github中的test文件夹
五.Junit测试截图
(1)针对readfileBylines的测试,使用assertEquals进行判断,并判断了抛出异常时的情况。个人认为达到了预期效果。
(2)对于sortword函数进行测试,针对num是否重复划分了等价类,进行了白盒测试,由于代码较为简单,测试用例设计了4个,个人认为达到了预期效果
(3)对count函数的测试,由于采用了黑盒测试,因此需要针对不同等价类进行划分,针对需求中的对于单词的定义,设计如下各个等价类,并通过对代码的分析,进行路径覆盖。设计了11个用例,达到了预期目标。
运行结果:
六,小组贡献分:0.25
扩展功能:
一、代码规范参照地址:http://www.cnblogs.com/xinz/archive/2011/11/20/2255971.html(邹欣老师的博客)
1)选择其中的“代码风格规范”,包括了缩进,行宽,括号,断行和空白的{}行,分行,命名,下划线问题,大小写问题,注释。
2)个人认为通过规范代码可以增强代码的可读性和可调试性,方便进行团队成员内部之间进行同行评审,命名规范可以使得各个变量一目了然,清晰地了解各个变量和类的作用,对于类,常用每个单独的单词首字母大写,其余小写,而普通变量则第一个单词首字母小写,其后的单词首字母大写,比如读文件的类ReadFileByLines,统计方法countWord。
二、对组员代码的分析
分析了17034的代码:(部分如下)
import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; public class readFileByLines { public String fileName; public readFileByLines(String theFilename){ this.fileName=theFilename; } public ArrayList<String> fileString(){ File file = new File(fileName); ArrayList<String> lineArray = new ArrayList<String> (); BufferedReader reader =null;{ try { reader = new BufferedReader(new FileReader(file)); String tempString = null; while ((tempString = reader.readLine()) != null) { lineArray.add(tempString); } reader.close(); } catch (IOException e) { //e.printStackTrace(); System.out.println("no file exits"); } finally { if (reader != null) { try { reader.close(); } catch (IOException e1) { } } } } return lineArray; } }
优点:
1)符合命名规范,意义明确。
2)符合大小写问题的规范,清晰明了。
缺点:1)缺少适当注释
2)括号没有对齐
3)大括号没有每个占一行,复杂的条件表达式中,逻辑优先级容易不清晰。
三、静态代码检查工具选择了:阿里巴巴Java开发代码检测IDE插件,参考安装网址:https://www.cnblogs.com/ysgcs/p/7675977.html
四.
静态代码检查过程
1)界面截图:
2)代码存在的问题都为一些风格规范问题,对应的具体和解决方法分别是:
对于if/else语句应必须使用大括号,即使只有一行代码
对于命名应该采用驼峰形式,对于sort应写成Sort
五、整个小组代码存在的问题
主要还是代码风格不够规范,注释信息较少导致阅读代码时不方便,因为一开始没有这种习惯,导致后来手动添加比较麻烦;其次是命名规范不够标准,其他常见问题与我自己的代码相似,不在一一列举。
转载于:https://www.cnblogs.com/lee17015/p/8747401.html
最后
以上就是标致日记本为你收集整理的第四周小组作业:WordCount优化的全部内容,希望文章能够帮你解决第四周小组作业:WordCount优化所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复