一.Github地址
https://github.com/Adogssky/WordCountGroupWork
二.psp表格
PSP2.1表格
PSP2.1 |
PSP阶段 |
预估耗时 (分钟) |
实际耗时 (分钟) |
Planning |
计划 | ||
· Estimate |
· 估计这个任务需要多少时间 | 300 | 370 |
Development |
开发 | ||
· Analysis |
· 需求分析 (包括学习新技术) | 30 | 30 |
· Design Spec |
· 生成设计文档 | 60 | 45 |
· Design Review |
· 设计复审 (和同事审核设计文档) | 30 | 20 |
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) | 30 | 30 |
· Design |
· 具体设计 | 30 | 30 |
· Coding |
· 具体编码 | 45 | 30 |
· Code Review |
· 代码复审 | 30 | 30 |
· Test |
· 测试(自我测试,修改代码,提交修改) | 60 | 75 |
Reporting |
报告 | ||
· Test Report |
· 测试报告 | 60 | 45 |
· Size Measurement |
· 计算工作量 | 20 | 20 |
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 | 30 | 30 |
合计 | 350 | 375 |
三.接口实现
个人负责的是词频统计模块,与单词分割模块和输出模块对接。
从单词分割模块接受一个字符串数组作为本模块的输入
ArrayList<String> input = new ArrayList<String>();
Map<String,Integer> map = new HashMap<String,Integer>();
List<Map.Entry<String, Integer>> list = new ArrayList<>();
public void setInput(ArrayList<String> i){
this.input = i;
}
获取输入之后进行词频统计,算法原理非常简单,不在此赘述,代码很短,如下
public void count(){
for(String p:input){
if(map.get(p) == null){
map.put(p,1);
}
else{
int tmpCount = map.get(p) + 1;
map.remove(p);
map.put(p,tmpCount);
}
}
for(Map.Entry<String, Integer> entry : map.entrySet()){
list.add(entry);
}
list.sort(new Comparator<Map.Entry<String, Integer>>(){
@Override
public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
return o2.getValue()-o1.getValue();}
//逆序(从大到小)排列,正序为“return o1.getValue()-o2.getValue”
});
for(Map.Entry<String, Integer> entry: list){
System.out.println(entry);
}
}
四.测试用例
本人负责模块只接受一种输入,也就是字符串数组,测试全部采用黑盒测试
首先是常规输入
@Test
void WCwordcountTest_1(){
WCwordcount wc = new WCwordcount();
wc.input.add("assd");
wc.count();
}
@Test
void WCwordcountTest_2(){
WCwordcount wc = new WCwordcount();
wc.input.add("assd");
wc.input.add("aa");
wc.input.add("owowo");
wc.count();
}
@Test
void WCwordcountTest_3(){
WCwordcount wc = new WCwordcount();
wc.input.add("p_wq");
wc.input.add("aa");
wc.input.add("owowo");
wc.count();
}
之后又测试了转义字符与空格作为数组项的输入
@Test
void WCwordcountTest_5(){
WCwordcount wc = new WCwordcount();
wc.input.add("oqpwq");
wc.input.add("\n");
wc.input.add("owowo");
wc.count();
}
@Test
void WCwordcountTest_6(){
WCwordcount wc = new WCwordcount();
wc.input.add(" ");
wc.input.add("\n");
wc.input.add("a");
wc.count();
}
@Test
void WCwordcountTest_7(){
WCwordcount wc = new WCwordcount();
wc.input.add("a");
wc.input.add(" ");
wc.input.add("owowo");
wc.count();
}
最后是综合测试
@Test
void WCwordcountTest_13(){
WCwordcount wc = new WCwordcount();
wc.input.add("assd");
wc.input.add("aa");
wc.input.add("owowo");
wc.input.add("assd");
wc.input.add("aa");
wc.input.add("owowo");
wc.input.add("assd");
wc.input.add("aa");
wc.input.add("owowo");
wc.input.add("assd");
wc.input.add("aa");
wc.input.add("owowo");
wc.input.add("assd");
wc.input.add("aa");
wc.input.add("owowo");
wc.input.add("assd");
wc.input.add("aa");
wc.input.add("owowo");
wc.count();
}
五.运行截图
运行截图如下
六.小组贡献
完成了词频统计的核心功能
贡献度0.22
扩展任务
七.规范理解
开发文档:《阿里巴巴Java开发手册》
《阿里巴巴java开发手册》对于变量命名和OOP规约都有很严格的规定,我自己在开发的时候变量命名不够规范,没有复合严格的OOP规约,同时我也没有做到很好的注释所写的代码
八.代码评价分析
评价对象:游晨宇 17119 负责模块:单词分割模块
变量命名没有按照《开发手册》
没有良好的注释
九.静态代码分析工具
使用的工具:checkstyle
下载地址:https://sourceforge.net/projects/checkstyle/files/checkstyle/
十.分析结果
十一.小组代码问题
前期沟通不够,整合时花费了较多时间,代码风格没有很好的统一起来