Github项目地址:https://github.com/shenyaxin/WordCount.git
作业链接:https://www.cnblogs.com/793181431q/p/10647323.html
1.结对项目PSP编写
PSP2.1 |
Personal Software Process Stages |
预估耗时(分钟) |
实际耗时(分钟) |
Planning |
计划 |
30 |
30 |
· stimate |
· 估计这个任务需要多少时间 |
400 |
500 |
Development |
开发 |
200 |
300 |
· Analysis |
· 需求分析 (包括学习新技术) |
100 |
150 |
· Design Spec |
· 生成设计文档 |
30 |
30 |
· Design Review |
· 设计复审 (和同事审核设计文档) |
30 |
30 |
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
30 |
30 |
· Design |
· 具体设计 |
40 |
40 |
· Coding |
· 具体编码 |
200 |
200 |
· Code Review |
· 代码复审 |
30 |
30 |
· Test |
· 测试(自我测试,修改代码,提交修改) |
30 |
30 |
Reporting |
报告 |
60 |
60 |
· Test Report |
· 测试报告 |
30 |
30 |
· Size Measurement |
· 计算工作量 |
10 |
10 |
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
10 |
10 |
|
合计 |
1230 |
1480 |
结对过程:在各种因素的考虑下,我与室友一起进行结对编程,原本我们预估的所需时间并不长,但是在进行编程的过程中我们发现因为对于C#一些类运用的不熟练导致我们延长了时间,尤其是学习新内容与编码的过程。最后的成品经由我们删改规范,勉强达到我们心中的预期。
解题思路:
一.基本功能
题目的要求中基本功能分为三类,首先是统计字符数,根据作业内容提示,我们考虑使用正则表达式,即Regex类来进行字符数统计,同时考虑到了空格,水平制表符,换行符均算字符。
二.统计文件的单词总数与词频
设计代码时我们使用搜索引擎参考了一部分文件内容排序代码,发现了C#的字典类Dictionary是一种良好的单词排序方式,通过遍历可以迅速有效的分辨出根据题目要求划分的单词并计算出单词个数。词频的处理也采用了Dictionary字典类,同时还有冒泡排序来计算出出现频率最高的单词。
三.扩展新功能
扩展新功能时因为对于词组的要求,我们改进了主函数文件输入的方法,在词组统计以及用户自定义词组长度问题上,我们使用了字典类和正则表达式一起使用的方法,并且与基础功能只需要读入文件相比,还加入了输出文件功能。
3. 设计
3.1结构设计
功能类:主函数类(Program类)。接口类(Word类,Cipin类,Danci类,Shuchu类,Cizu类)
3.2流程图
4. 代码说明
4.1基本功能模块
统计字符数:使用正则表达式
4.2统计单词:使用Dictionary字典类
4.3统计词频
4.4运行截图
5. 测试过程
5.1代码互审
在代码互审过程中,首先发现在判断字符个数时出现了遗漏,没有将空格等也算入字符计算。
其次是在文件名的输入,以及扩展新功能时与新功能链接使用的问题上,从一开始简单的输入文件名到我们加入了循环。
行数判断后来才加入循环,使空白行不算入行数。
5.2建立单元测试
测试设计:输入实例进入类的测试中,调用类的方法功能,得出结果,与正确数量使用Assrt类进行比较,若结果相等则测试成功。使用多种实例可以保证测试正确性。
5.3 统计字符数类测试
5.4统计单词与词频类测试
5.5效能分析
Main函数占用率最大。
6.代码规范链接
https://blog.csdn.net/qq_31606375/article/details/77783328
7. 总结
本次结对项目中,我们第一次体会到了结对编程的感受,从各方面来说,确实是1+1>2的,我们从设计开始,就从思路上进行了互补,而各人拥有各人擅长的特点,在另一个人不熟悉的领域进行补充,比如说我与我的室友在进行字符统计时对于正则表达式的运用各有各的看法,最后我们进行综合选择了一个最优方案,这在我们进行词频统计运用字典类时也有同样的经历。进行编码时,可能是我们对结对编程的概念理解还不够深,一开始我们选择各自编写,最后发现费时费力。于是我们换了一种思路,一人编写,另一人提供思路与设计,并且封装与测试也一同设计和进行。本次结对编程让我充分理解了书本上的理念,让我收获良多。