第三次作业 郭昭杰 201731062608
一、关于地址
Github项目地址:https://github.com/guozhaojie/WordCount
结对伙伴作业地址:https://www.cnblogs.com/trjjcool/p/10650129.html
二、关于结对
我的结对伙伴是坐我右边的室友唐任峻杰,在结对过程中我主要负责编写代码,他负责进行单元测试和效能分析。
结对照片:
三、结对的PSP表格
PSP2.1 |
Personal Software Process Stages |
预估耗时(分钟) |
实际耗时(分钟) |
Planning |
计划 |
20 |
30 |
· Estimate |
· 估计这个任务需要多少时间 |
30 |
35 |
Development |
开发 |
360 |
480 |
· Analysis |
· 需求分析 (包括学习新技术) |
60 |
80 |
· Design Spec |
· 生成设计文档 |
15 |
20 |
· Design Review |
· 设计复审 (和同事审核设计文档) |
20 |
20 |
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
20 |
30 |
· Design |
· 具体设计 |
20 |
20 |
· Coding |
· 具体编码 |
240 |
360 |
· Code Review |
· 代码复审 |
30 |
40 |
· Test |
· 测试(自我测试,修改代码,提交修改) |
60 |
60 |
Reporting |
报告 |
30 |
45 |
· Test Report |
· 测试报告 |
10 |
20 |
· Size Measurement |
· 计算工作量 |
10 |
10 |
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
10 |
10 |
|
合计 |
575 |
780 |
四、解题思路
我的想法是建立一个字符数组获取文件中的所有字符,再对数组进行遍历来统计文件的数据。题目要求从文档中读取字符并将结果保存到另一个文档中,因此去查询并使用了关于操作文件的代码。
五、实现过程
我创建了一个“Program”类储存主函数和保存文件的函数,另一个“Library”类储存统计文档数据的函数。
1)统计文件字符数:由于我将整个文档的字符都存入了一个字符数组中,故只需要获取数组的长度即可得到文件的字符数。
2)统计文件单词数:定义一个letter变量代表连续出现的字母数量,遍历整个字符数组,若为字母则letter+1,若不为字母则letter归0,若为空格则根据letter是否>=4来决定是否将单词数+1,并将letter归0开始重新累计。
3)统计文件总行数:遍历整个字符数组获取换行符“\n”的数量,总行数为换行符数+1(最后一行无换行符)。
4)统计文件中单词出现次数并排序:首先将文件中的所有单词提取到一个字符串数组中,创建一个整数数组用于存放对应位置单词的频数,利用循环结构统计单词出现的次数,并用冒泡法按照频数从大到小排序。排序完成后取两个数组中前10个元素构成两个新数组,再通过比较频数相等的字符串的大小进行按字典顺序排序。
流程图:
六、代码互审
代码的早期版本我没有加注释导致结对伙伴有些难以理解我代码的意义,在受到他提醒后我在代码的第三版本中添加了注释。这说明了代码的注释对于复审代码的人能快速理解非常重要。
七、改进程序
经过性能分析后能看出words函数占用了最多工作时间,我对代码重新分析后发现words函数是比较多余的,因此在第三版本中将它的功能整合进了其他函数中,提升了运行的效率。
八、代码介绍
在前面的“实现过程”中已经介绍得比较详细了,在此就不再赘述。
完成代码提交:
九、小结
1)第二次通过Github提交代码,使我对于Github的使用更加熟练。
2)对于一直独自编程的我来说这次结对编程是一次新奇的体验,我认为两个人合理地分配任务进行结对编程能够极大地提升编程效率,达到1+1>2的效果。
3)编写代码的过程中遇到了许多难以解决的困难,并且在编写完成后还需要大量时间对出现的错误进行调试和修正,让我认识到编程需要有足够的耐心和毅力。
4)这次的代码虽然能够满足需求但仍然存在用时较长等一些弊端,使我意识到个人能力上的不足,我需要在未来继续努力学习编程,提高自己代码的质量。