第三次作业
结对编程作业
本次作业地址 | https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1/homework/2882 |
伙伴作业地址 | https://www.cnblogs.com/lwy276701865/p/10658824.html |
代码github地址 | https://github.com/lwy276701865/WordCount.git |
一、 PSP表格编写
PSP2.1 |
Personal Software Process Stages |
预估耗时(分钟) |
实际耗时(分钟) |
Planning |
计划 |
30 |
30 |
· Estimate |
· 估计这个任务需要多少时间 |
30 |
30 |
Development |
开发 |
660 |
1700 |
· Analysis |
· 需求分析 (包括学习新技术) |
120 |
240 |
· Design Spec |
· 生成设计文档 |
60 |
60 |
· Design Review |
· 设计复审 (和同事审核设计文档) |
100 |
100 |
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
30 |
30 |
· Design |
· 具体设计 |
60 |
100 |
· Coding |
· 具体编码 |
240 |
1020 |
· Code Review |
· 代码复审 |
30 |
60 |
· Test |
· 测试(自我测试,修改代码,提交修改) |
30 |
90 |
Reporting |
报告 |
60 |
50 |
· Test Report |
· 测试报告 |
20 |
20 |
· Size Measurement |
· 计算工作量 |
10 |
10 |
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
30 |
20 |
|
合计 |
750 |
1780 |
二、设计思路与过程
1、结对过程
首先在下图位置输入结对伙伴的用户名
然后复制链接发给结对伙伴,他点击之后即可拥有自己仓库的读写权限
下图即为成功邀请伙伴加入自己的仓库
这是我们讨论的照片(非摆拍):
2、思路描述
通过审题发现输入一个文件名后,需要对它进行4种操作,分别是:统计字符数、单词总数、有效行数、单词出现频率最大的10个单词。我们先查阅了面向对象程序设计(C#)教材关于文件的操作。首先需要读取文件,然后对字符串种类进行判断,这时候就需要写不同的函数或类来实现统计了。
在经过一番讨论后这几个统计功能,我们发现些函数的话太复杂了,所以我们决定用正则表达式,所以我们在网上查阅了正则表达式的相关资料:链接。
3、设计实现过程
我们编写了一个wordcount类,用来统计各个数据。里面有三个函数:countword,countline,countchar,分别是统计单词数、有效行数、字符数的。
下面是流程图:
4、代码规范
①功能注释:在每个函数上面写上它的功能的注释。
②变量命名:给变量命名时用英语,不用拼音。
③语句规范:使用循环时必须加花括号,并且里面的语句缩进一个TAB。
④视觉组织:必要时使用空行和缩进,比如每个函数之间、每个类之间都加一个空行。
⑤变量安排有序:定义变量时必须赋初值,一个变量占一行且定义在最前面(不允许在中间出现)。
⑥字段:属性全为public,方便后面单元测试。
⑦函数命名:函数名首字母大写。
三、代码审查
1、类库生成dll组件
2、自审与互审
自审:我最先写的函数用了许多循环,和伙伴一起分析之后,发现这些函数耗费了许多不必要的时间。于是我们在讨论之后改变了一些算法。
互审:我们发现两个人写的代码的参数不同,于是经过商量之后同一了函数的参数,并对相关内容进行了修改。然后我们是在做了第一版代码之后才进行的代码规范制定,于是很多之前的函数都需要重新写。
四、关键代码
1、统计单词函数
2、统计有效行数函数
3、统计字符函数
4、主函数中的控制函数
五、测试与性能分析
1、单元测试
这是测试统计字符数函数的,下面几个函数的测试方法一模一样
2、性能分析
六、感受与总结
第一次与他人结对编程,总体来说感觉挺好,基本上做出了1+1>2的感觉,在大部分环节中,都能做出互补,遇到问题时,对一个个问题提出了疑惑,并对其做出解决方案后,但是又发现了其他的小问题。然后虽然到最后我们还有一些功能没有实现,但我们还是学到了很多关于结对编程的知识,大概熟悉了是怎样操作的。