GIT地址 | https://github.com/gentlemanzq/WordCount.git |
GIT用户名 | gentlemanzq |
结对伙伴博客地址 | |
博客地址 | https://www.cnblogs.com/gentlemanzq/ |
作业链接 | https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1/homework/2882 |
这一次结对编程,怎么说呢。带来了一次不一样的编程体验,很难说清楚。具体后面再说,先看作业
- 一.结对过程
照片如下:(一直很疑惑为什么后台更改的照片,前端不会更改,百度了也没有解决办法。将就看吧)
- 二.PSP表格
PSP2.1 |
Personal Software Process Stages |
预估耗时(分钟) |
实际耗时(分钟) |
Planning |
计划 |
30 | 20 |
· Estimate |
· 估计这个任务需要多少时间 |
30 | 20 |
Development |
开发 |
670 | 740 |
· Analysis |
· 需求分析 (包括学习新技术) |
180 | 180 |
· Design Spec |
· 生成设计文档 |
20 | 10 |
· Design Review |
· 设计复审 (和同事审核设计文档) |
20 | 20 |
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
30 | 30 |
· Design |
· 具体设计 |
60 | 60 |
· Coding |
· 具体编码 |
180 | 200 |
· Code Review |
· 代码复审 |
60 | 80 |
· Test |
· 测试(自我测试,修改代码,提交修改) |
120 | 160 |
Reporting |
报告 |
85 | 105 |
· Test Report |
· 测试报告 |
45 | 60 |
· Size Measurement |
· 计算工作量 |
20 | 15 |
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
20 | 30 |
合计 |
785 | 865 |
- 三.解题思路
1.首先拿到题目仔细阅读,理清题意。大致需要完成的功能都是关于字符操作和计数排序的操作。根据这几点需求,我们决定使用泛型Dictionary来完成这一系列操作。
2.关于如何解题,是根据作业要求来的,首先需要将文件读入成一个字符串,然后对其进行操作,如果是统计字符数量和行数,需要借助Regex函数通过正则表达式 ‘’.‘’来统计除换行符之外的字符,最后加上换行符。(此处要注意换行符是两个字符)
3.判断是否是单词的时候,先使用for循环将大小写统一转换为小写,重新定义一个新的Dictionary,然后使用笨办法if语句进行判断单词长度是否超过4个并且前四个是否是英文,如果满足条件则重新赋给新的dictionary。
4.输出频率最高的10个词,如果频率最高则按字典序输出这个地方。将新的dictionary先用frequencies函数进行统计判断,然后将结果首先按照value值进行排序,然后再按照key值进行排序
5.对每一个功能项进行封装,方便后面增加功能。
6.考虑到以上涉及的知识,所以我们在编码前,首先参考了字典的用法,如何进行单词判断,如何按照key值和value值进行排序(参考这两篇博客【1】【2】)。其次是关于regex,正则表达式的使用(参考这篇博客【3】)。
【1】:https://www.cnblogs.com/wt-vip/p/5997094.html
【2】:https://blog.csdn.net/ybhjx/article/details/69668442
【3】:https://blog.csdn.net/u012102536/article/details/85160138
- 四.代码设计
1.首先对于每一个功能大致设置一个类,初步设计六个类,将除了program类其余放入function文件夹中,具体关系后面说明(PS:增加功能之后再添加)
2.类与类之间的调用关系具体为:program类中调用path,linescount,asccount类。在asccount类中会调用linescount参与部分计算。wordcount调用ynword进行判断
3.启动主函数在program类里面,如果要计算有多少个字符就调用ascount里面的agelife方法,如果要统计有多少行,就调用linescount中的lines方法。同理其余都是一样。
4.基础功能的难点在于判断是否是单词,并且需要按照次数,字典序排序,在wordcount函数中先进行是否单词判断,此处调用ynword。具体设计见流程图
5.单元测试设计,主要测试function文件夹中的功能函数,类图如下 (PS:单元测试代码后见代码说明)
- 五.代码规范
1. 不要冗余无用代码,过于冗余的代码可以清理一下,一些已经注释掉的代码可以删除
2、不变的值,尽量写个常量类。
3、尽量使用if{}else,不要一直if去判断。
4、减少循环调用方法;减少IO流的消耗资源。
5. 当一行代码太长时,将其截断成两行写。
6. 常用缩进和换行,使代码层次清晰,明了。
7. 注释的量不应该少于代码量的三分之一。ps(变量统一使用例如/// <param name="s">文件读入路径</param>的注释方式)
8. 定义变量名字和方法名字的时候尽量使用英文缩写,或者拼音缩写,便于识别。
9. 对泛型进行循环时,都采用foreach而不使用for。
11. 对于功能函数写入一个function文件夹中,便于以后功能升级。
12. 一屏原则:一个方法体的代码幅应该在一屏比较和合理;逻辑复杂的代码可以抽离出方法体;