1. PSP表格
PSP2.1 |
Personal Software Process Stages |
预估耗时(分钟) |
实际耗时(分钟) |
Planning |
计划 |
30 | 30 |
· Estimate |
· 估计这个任务需要多少时间 |
410 | 880 |
Development |
开发 |
||
· Analysis |
· 需求分析 (包括学习新技术) |
30 | 30 |
· Design Spec |
· 生成设计文档 |
0 | 0 |
· Design Review |
· 设计复审 (和同事审核设计文档) |
0 | 0 |
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
0 | 0 |
· Design |
· 具体设计 |
30 | 25 |
· Coding |
· 具体编码 |
180 | 240 |
· Code Review |
· 代码复审 |
30 | 30 |
· Test |
· 测试(自我测试,修改代码,提交修改) |
60 | 480 |
Reporting |
报告 |
0 | 0 |
· Test Report |
· 测试报告 |
30 | 25 |
· Size Measurement |
· 计算工作量 |
0 | 0 |
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
20 | 20 |
合计 |
410 | 880 |
高估我们自己的能力了
2.Fork仓库的Github项目地址
和第二次作业一样,打开https://github.com/YuRenDaZ/WordCount克隆到自己仓库
我的git地址https://github.com/FreshFighter/WordCount
Fork成功
然后是将仓库克隆到自己电脑上
创建学号同名文件
3.计算模块接口的设计与实现过
我和黄林讨论时的照片
实现的基本功能,我和黄林根据项目要求讨论,我们大致得出一个方案:
a.创建一个类库,里边有三个类,分别是
CountCharacters.cs(统计字符个数的类):有一个带参数构造函数CountCharacters(string s和 一个实现统计字符的函数int Count_character();
CountLines.cs(统计有效行的类):有一个带参数的构造函数CountLines(string s)和一个实现统计有效行的函数int Count_line();
CountWords.cs(统计单词的类):带参数的构造函数CountWords(string s),实现统计单词个数的函数int Count_word(),实现统计频数的函数int Count_word_frequency();
b.然后是主程序,主程序里边除了主函数以外写两个函数,一个用来打开文件,一个用来装各种类和函数的调用。
由于这个程序的函数穿插不复杂,就没有画函数之间的关系图;算法关键没有什么独到之处,就是用string对象读取文本信息过后,用foreach语句进行遍历判断。
我们的设计是根据项目需求来设计的,然后我们用的是控制台应用程序没有界面。
4.实现基本功能的编码
下图就是举个列子,刚开始我我们的代码规范是不一样的,
他给我的代码没有任何注释,当然我也没有注释的习惯,所以我们就假吧意思的注释一下下,就有了下面这中难得一见的无用注释,和上边那种形式一下的对类和函数的注释,当然我知道这样做不对,我们会慢慢养成注释的习惯的。
5.代码复审过程
他的代码和我的代码差不多,我们也只是简简单单的看了下,大部分错误还是边调试边找出来修改的,所以确实在这我们体会不到代码复制的重要性,这也是我们要继续学习的地方,尽力养成好的习惯吧。
6.初步测试
简单的运行了一下程序,发现中间有个这个,应该是把空白统计进去了,后面单元测试也有说这个问题,
然后改了过后再次进行测试,测试看上去是没问题了
7.单元测试
测试要由我来测试,因为我们两个都不太会,我稍微会一点点
针对每个类的函数有七个函数,我写了七个测试,刚开始测试有错误
可以看到是统计单词的类里边的函数除了问题,
我就去看了一下应该是统计单词的时候把空白这种情况弄进去了
加了两个判断语句,搞定,重新测试
单元测试通过
还有个问题就是为啥我这儿没有代码覆盖率
8.性能测试
可以看出,除了主函数和那个包含各种功能的操作函数意外就是统计词频的函数好事最多了,里边用的遍历多了一个,我觉得这个就是原因吧,但是这也是正常的我觉得。
9.增加功能
下边是增加功能过后的测试
测试通过
然后是我用《简爱》英文版做的一个性能分析
可以看到跑了三分多钟,主要就是统计单词和词组那儿比较费时间,试着优化过几次,但是最后效果都不好
由于这个最后的代码实在前几次代码基础上增加了一些东西,所以就没有再进行单元测试了
10.提交代码
我的git地址https://github.com/FreshFighter/WordCount
第一次,初步测试的时候commit的,
第二次,单元测试和效能分析过后commit的
第三次提交是提交错了的,不用管
第四次提交,这个是最后的代码
11.心得体会
在这次结对编程的作业中,虽然说我和同伴黄林一起实现看这个程序,但是大部分还是分开编程的,最后整合代码,就没有书上讲的那样的感觉
然后就是在编码过程的调试中无数次失败并找出错误的感觉又难受又有意思,这是个考验人的事情
自己有尝试着进行了单元测试,不知道用法对不对,但是比上一次进步了一点点
我觉得这次作业的收获并不是我理解了多少结对编程的东西,而是自己和同伴一起,焦头烂额,发现错误,改正错误的那种过程