软工网络16结对编程
Posted eshy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了软工网络16结对编程相关的知识,希望对你有一定的参考价值。
1、码云项目地址
陈瑀博客地址
侯湘宁博客地址
码云地址
2、PSP表格
PSP2.1 | 个人开发流程 | 预估耗费时间(分钟) | 实际耗费时间 |
---|---|---|---|
Planning | 计划 | 30 | 35 |
· Estimate | 明确需求和其他相关因素,估计每个阶段的时间成本 | 40 | 50 |
Development | 开发 | 350 | 430 |
· Analysis | 需求分析 (包括学习新技术) | 150 | 180 |
· Design Spec | 生成设计文档 | 30 | 30 |
· Design Review | 设计复审 | 40 | 50 |
· Coding Standard | 代码规范 | 25 | 30 |
· Design | 具体设计 | 30 | 30 |
· Coding | 具体编码 | 150 | 180 |
· Code Review | 代码复审 | 20 | 20 |
· Test | 测试(自我测试,修改代码,提交修改) | 20 | 30 |
Reporting | 报告 | 75 | 90 |
· | 测试报告 | 30 | 40 |
· | 计算工作量 | 50 | 50 |
· | 并提出过程改进计划 | 25 | 25 |
3、解题思路概述
1、编程语言的选择:java、html和css(用于做基于web的GUI页面)
2、开发工具以及环境:Eclipse
3、解题思路
本次实验需要新添加两个功能:能统计文件夹中指定长度的词组的词频、能输出用户指定的前n多的单词与其数量。
第一个功能需要先输入指定的长度n,再利用循环从map中判断value的长度是否与n相符,若相符则输出value和key。
第二个功能较为简单,只需要做简单的for循环,从map中取出前n多的value和key就能实现。
4、设计实现过程
1、相关类和函数的设计
定义了一个charCount类,在之前定义的三个方法的基础上,sortMap
方法(实现单词排序),wordCount
方法(实现词频统计),Output
方法(实现写文本文件处理),增加了两个方法。本次的结对编程项目增加了两个功能,也就是sortMap1
方法(能输出用户指定的前n多的单词),还有lenWordCount
方法(能统计文件夹中指定长度的词组的词频)。而且本次的项目中,我们改进了之前不能进行大小写区分的问题,在之后的单元测试会有详细的说明!
5、代码说明(代码片段)
在这边我们就说明一下新功能的代码(之前的代码就不再说明了)
1、sortMap1方法
能输出用户指定的前k多的单词与其数量:
public static void sortMap1(Map<String,Integer> oldmap,int k){
ArrayList<Map.Entry<String,Integer>> list = new ArrayList<Map.Entry<String,Integer>>(oldmap.entrySet());
Collections.sort(list,new Comparator<Map.Entry<String,Integer>>(){
@Override
public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
if (o1.getValue() == o2.getValue()) {
return o1.getKey().compareTo(o2.getKey());//词频相同时,按字典排列
}
return o2.getValue() - o1.getValue(); //降序排列
}
});
if(list.size()>=k){//单词数大于或等于k的时候,输出频数前k个
for(int i = 0; i<k; i++){
System.out.println(list.get(i).getKey()+ ": " +list.get(i).getValue());
}
}else {
for(int i = 0; i<list.size(); i++){//单词数小于k的时候,输出全部
System.out.println(list.get(i).getKey()+ ": " +list.get(i).getValue());//键值对一一对应
}
}
}
2、lenWordCount方法
能统计文件夹中指定长度的词组的词频:
public static void lenWordCount(Map<String,Integer> oldmap,int n) {
ArrayList<Map.Entry<String,Integer>> list = new ArrayList<Map.Entry<String,Integer>>(oldmap.entrySet());
Collections.sort(list,new Comparator<Map.Entry<String,Integer>>(){
@Override
public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
if (o1.getValue() == o2.getValue()) {
return o1.getKey().compareTo(o2.getKey());//词频相同时,按字典排列
}
return o2.getValue() - o1.getValue(); //降序排列
}
});
for(int i = 0;i < list.size();i++) {
if(list.get(i).getKey().length()==n) {
System.out.println(list.get(i).getKey()+ ": " +list.get(i).getValue());
}
}
}
}
6、单元测试
测试用例(部分)
- 该部分已在侯湘宁的博客中展示。
7、结对编程感受
本次结对编程我选择改进的是我的搭档的代码。我们并没有对同一模块进行编程,而是选择了分工合作,我负责新功能的添加以及对上次功能的改进,比如我的搭档上次没有实现不区分大小写的功能,我经过对代码的检查和反复修改测试最终解决了这个问题。我的搭档负责前端的设计与最后的整合。
总的来说,相比较单人编程,结对编程可以说是事半功倍,因为不需要一个人同时负责前端的设计和功能的实现,大大增加了编程效率。
以上是关于软工网络16结对编程的主要内容,如果未能解决你的问题,请参考以下文章