第三次作业
作业链接:https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass2/homework/2879
Git 仓库地址:https://github.com/Eleanoren/WordCount
Part 0. 分配工作
这次作业我是和我室友组的队,我们先商量了一下如何分配工作。无奈我们两个都缺乏项目经验,也是在标准的制定上争论了很久。最后商议的结果是代码一起写,她负责实现统计文件的字符数和有效行数以及搭建项目的大体框架,,我实现统计文件中单词总数,并按字典序排序输出到文件的功能。代码写好后,由我负责测试,她负责复审。
Part 1. PSP表格
PSP2.1 |
Personal Software Process Stages |
预估耗时(分钟) |
实际耗时(分钟) |
Planning |
计划 |
||
· Estimate |
· 估计这个任务需要多少时间 |
350 | 580 |
Development |
开发 |
||
· Analysis |
· 需求分析 (包括学习新技术) |
10 | 40 |
· Design Spec |
· 生成设计文档 |
5 | 15 |
· Design Review |
· 设计复审 (和同事审核设计文档) |
5 | 10 |
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
20 | 15 |
· Design |
· 具体设计 |
15 | 20 |
· Coding |
· 具体编码 |
300 | 440 |
· Code Review |
· 代码复审 |
20 | 10 |
· Test |
· 测试(自我测试,修改代码,提交修改) |
30 | 40 |
Reporting |
报告 |
||
· Test Report |
· 测试报告 |
20 | 30 |
· Size Measurement |
· 计算工作量 |
10 | 5 |
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
20 | 20 |
合计 |
350 | 580 |
Part 2. 规范编码格式
由于代码是一起合作写出来的,所以要制定一个标准提高代码的可读性和可移植性,于是,我们达成了一下几点共识:
- 给函数写注释
- 变量名要统一,且用英文
- 将需要实现的功能封装,具体的功能写成函数
Part 3. 设计程序
我做的部分是统计文件中单词总数,并按字典序排序输出到文件,大致的思路是将文章内容用 ReadToEnd() 转成一个字符串,将单词一个一个分割进 list ,统计完单词出现频率后再用字典序排序输出。
public void putword(string path)//统计单词出现频率 { List<string> List = new List<string>(); StreamReader sr = new StreamReader(path, Encoding.Default); string txt = sr.ReadToEnd(); txt = txt.ToLower(); string[] Array = txt.Split(new char[] { ' ', '\n', '\t' }); for (int i = 0; i < Array.Length; i++) { if (Array[i].Length < 4) continue; else { if (Array[i][0] >= 0 && Array[i][0] <= 9) continue; else List.Add(Array[i]); } } Dictionary<string, int> dic = new Dictionary<string, int>(); foreach (var p in List)//统计list中相同元素出现的次数并排序 { if (dic.ContainsKey(p)) dic[p] += 1; else dic.Add(p, 1); } Console.WriteLine("单词总数:{0}", List.Count); for (int count = 0; count < 10; count++) { var element = dic.ElementAt(count); var Key = element.Key; var Value = element.Value; Console.WriteLine("< {0} > : {1}", Key, dic[Key]); } using (StreamWriter file = new StreamWriter("myfile.txt")) for (int count = 0; count < 10; count++) { var element = dic.ElementAt(count); var Key = element.Key; var Value = element.Value; file.WriteLine("< {0} > : {1}", Key, dic[Key]); } sr.Close(); }
我们用了莎翁的十四行诗做测试,看起来是对的
将出现频率最高的十个单词写入 myfile.txt 中
Part 4. 测试程序
三个测试貌似都过了
做断点测试
Part 5. 小结
这次作业其实完成的并不顺利,因为和小伙伴难免有意见不一致的时候,这个时候进度就会停滞不前。也从侧面印证了一开始的沟通是多么重要。结对编程也是一个查漏补缺的过程,我也从中学到了很多,从一无所知到从项目中不断学习新知识,也学会了与队友沟通。同时,一个人看问题也往往比较片面,从而忽视了很多问题,这个时候结对编程的好处就展现出来了,可能我没想到的点,队友想到了,看问题能更加全面,而往往自己没看出来的错误,队友能发现,真正有了 1+1>2 的体验。