软工16作业3
软件工程 作业三
Task1.项目地址
- 项目伙伴 201621123016郑玉波 博客地址
Task2.PSP表格
PSP2.1 | 结对开发流程 | 预估耗费时间(分钟) | 实际耗费时间(分钟) |
---|---|---|---|
Planning | 计划 | 10 | 5 |
· Estimate | 明确需求和其他相关因素,估计每个阶段的时间成本 | 5 | 0 |
Development | 开发 | 150 | 200 |
· Analysis | 需求分析 (包括学习新技术) | 10 | 15 |
· Design Spec | 生成设计文档 | 10 | 0 |
· Design Review | 设计复审 | 10 | 5 |
· Coding Standard | 代码规范 | 0 | 0 |
· Design | 具体设计 | 10 | 20 |
· Coding | 具体编码 | 100 | 120 |
· Code Review | 代码复审 | 10 | 5 |
· Test | 测试(自我测试,修改代码,提交修改) | 10 | 25 |
Reporting | 报告 | 10 | 6 |
· | 测试报告 | 5 | 2 |
· | 计算工作量 | 5 | 2 |
· | 并提出过程改进计划 | 0 | 0 |
Task3.题目解析
第一步,增加新功能
- 词组统计:能统计文件夹中指定长度的词组的词频
- 自定义输出:能输出用户指定的前n多的单词与其数量
思路:自定义输出的话题目与上次前十频率单词相仿所以改for
循环次数即可
词组统计的话根据输入长度用+
字符串拼接,然后统计词频和单词和自定义输出方法相仿
for(int y=0;y<k;y++){
if(y==0)
group=group+text2.get(h);
else
group=group+" "+text2.get(h+y);
}
第二步,增加GUI
在此用NetBeans进行页面设计,在关键代码中展示
Task4.关键代码
GUI关键函数
public static String fileChooser() throws FileNotFoundException, UnsupportedEncodingException, IOException {
JFileChooser chooser = new JFileChooser();
List<String> list = new ArrayList<String>();
String line = null;
FileNameExtensionFilter filter = new FileNameExtensionFilter(
"JPG & GIF Images", "jpg", "gif","txt");
//设置文件类型
chooser.setFileFilter(filter);
//打开选择器面板
int returnVal = chooser.showOpenDialog(new JPanel());
//保存文件从这里入手,输出的是文件名
if(returnVal == JFileChooser.APPROVE_OPTION) {
System.out.println("你打开的文件是: " +
chooser.getSelectedFile().getName()+chooser.getSelectedFile());
if (chooser.getSelectedFile() == null || !chooser.getSelectedFile().exists()) {
return null;
}
String encoding = "UTF-8";
InputStreamReader read = new InputStreamReader(new FileInputStream(chooser.getSelectedFile()),
encoding);
BufferedReader br = new BufferedReader(read);
line =chooser.getSelectedFile().toString();
br.close();
read.close();
return line;
}
return line;
}
词频单词构造
for(int h=0;h<text2.size()-k+1;h++){
String group ="";
for(int y=0;y<k;y++){
if(y==0)
group=group+text2.get(h);
else
group=group+" "+text2.get(h+y);//长度循环拼接
}
text3.add(group);
}
Map<String, Integer> map = new TreeMap<String, Integer>();
for(String word:text3)
{if(map.get(word) != null){
map.put(word,map.get(word) + 1); //相同放入map并计数
}else{
map.put(word,1);
}
}
Task5.运行结果
Task6.回归测试
@Test
public void testWordnumber() {
assertEquals(0, jiekou.wordnumber("C:/Users/Administrator/Desktop/c1.txt"));//空文件
assertEquals(14, jiekou.wordnumber("C:/Users/Administrator/Desktop/c2.txt"));//14个单词的纯英文
assertEquals(160, jiekou.wordnumber("C:/Users/Administrator/Desktop/c3.txt"));//160个单词的英文数字混合
}
@Test
public void testbytenumber() {
assertEquals(0, jiekou.bytenumber("C:/Users/Administrator/Desktop/c1.txt"));
assertEquals(136, jiekou.bytenumber("C:/Users/Administrator/Desktop/c2.txt"));
assertEquals(1505, jiekou.bytenumber("C:/Users/Administrator/Desktop/c3.txt"));
}
@Test
public void testout() {
Map<String, Integer> map2 = new HashMap<String, Integer>();
Map<String, Integer> map3 = new HashMap<String, Integer>();
map2.put("xmkczui84",5);
map2.put("agisckxvn",4);
map3.put("puma",9);
map3.put("from",4);
List<Map.Entry<String, Integer>> map = new ArrayList<Map.Entry<String, Integer>>(
map2.entrySet());
List<Map.Entry<String, Integer>> map1 = new ArrayList<Map.Entry<String, Integer>>(
map3.entrySet());
assertEquals(map, jiekou.out("C:/Users/Administrator/Desktop/c2.txt", 2));
assertEquals(map1, jiekou.out("C:/Users/Administrator/Desktop/c3.txt", 2));
}
@Test
public void testoutg() {
Map<String, Integer> map3 = new TreeMap<String, Integer>();
Map<String, Integer> map2 = new TreeMap<String, Integer>();
map3.put("accumulate experts from felt obliged",1);
map2.put("america when reports came into",1);
List<Map.Entry<String, Integer>> map1 = new ArrayList<Map.Entry<String, Integer>>(
map3.entrySet());
assertEquals(map3, "{"+jiekou.outg("C:/Users/Administrator/Desktop/c3.txt", 5).get(0)+"}");
assertEquals(map2, "{"+jiekou.outg("C:/Users/Administrator/Desktop/c3.txt", 5).get(1)+"}");
}
Task7.码云提交
Task8.实验心得
此次实验熟悉了一些java的新语法,并且领会到合作开发项目的必要性,互相提问题互相对代码提出质疑对开发项目好处良多。