作业三
作业地址:
GitHub项目地址:https://github.com/pbnbpb/WordCount.git
结对伙伴博客地址:https://www.cnblogs.com/Xl2248570171/p/10636087.html
PSP表格:
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
Planning | 计划 | 10 | 15 |
· Estimate | · 估计这个任务需要多少时间 | 10 | 15 |
Development | 开发 | 200 | 300 |
· Analysis | 需求分析 (包括学习新技术) | 30 | 100 |
· Design Spec | · 生成设计文档 | ||
· Design Review | · 设计复审 (和同事审核设计文档) | ||
· Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 25 | 25 |
Design | 具体设计 | 10 | 15 |
Coding | 具体编码 | 180 | 300 |
Code Review | 代码复审 | 30 | 45 |
Test | 测试(自我测试,修改代码,提交修改) | 15 | 25 |
Reporting | 报告 | 20 | 30 |
Test Report | 测试报告 | 10 | 20 |
Size Measurement | 计算工作量 | ||
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 10 | 25 |
合计 | 515 | 915 |
我是和肖磊组队进行的结对项目,我主要负责编写代码,他负责单元测试和复审,所以这里主要是我的编写过程,而单元测试,效能分析则是在我的搭档的博客作业中。
合作过程的照片:
解题思路:
刚刚看到题目的时候,我是有点头大的,不知道如何下手,后来在查看了作业要求后我发现最难的地方就是在于统计单词的数量和每个单词的频数,还要为他们排序。于是我便上网搜索了统计英文文本文件中的单词及频数的方法。发现主要是有利用hashtable和字典的方法,在看到有不少人的博客上都是通过hashtable来进行统计后,我便决定利用哈希表来作为统计的方法了。我也同时了解到要对hashtable中的键対值进行排序需要依靠ArrayList来执行操作,否则是无法单独依靠哈希表自身来进行排序的。解决了单词频数和排序的话,统计其他数据就相对简单了。
先是设计了一个接口,将后续所能用到的统计与排序及输出文件方法进行封装。
interface ICore { Hashtable WordCount(string paht,Hashtable ht); int WordCount1(string path, Hashtable ht); ArrayList oreder(Hashtable ht); int letterCount(string path); void outPut(string path, Hashtable ht, string outpath, int n, int line, int letcount, ArrayList akeys, int wordcount); }
然后为了能方便后面的单元测试,主函数内只放入一个test方法,而后通过test方法进行相应的操作。
接下来就针对统计单词总数,频数,字符总数,有效行数,输出至文件分别编写对应的方法。
在完成了对单词频数的统计后,我再利用了这个方法不过返回的值为int型,通过统计有多少次循环来计算单词的总数。
而后通过ArrayList以及插入排序实现了对其频数的降序排序。
test方法:
后来我们在复审阶段利用了下载的英文小说文本进行测试得到的答案与事实基本无差异:
单元测试结果:
代码规范:
1.关键的代码,方法后要有注释,能清晰表达其作用。
2.代码缩进要有条理,让人明白大体结构。
遇见的问题:
1.一开始编写的的代码结构比较乱,很多方法调用,变量命名都在主函数内不利于单元测试,后来便将变量命名,函数调用都划分到另一个方法中了。
2.最开始输出的结果中发现单词总数明显小于实际上的值,后来我们一起讨论发现输出时用的是ArrayList实例变量的count函数,他是表达列表内的元素个数也就是键——不相同的单词出现次数,而非单词总数,于是最后我们是在想不到好的主意就重复了一次当时统计单词频率的方法,利用一个整型变量来存储哈希表执行操作的次数,用这个变量来代表单词总数。
提交代码:
GitHub上的截图:
总结:
这次的项目相对于上一次要麻烦不少,刚开始看到作业要求时整个人都是有点不知所措的,后来和搭档一起讨论分析之后,渐渐有了思路也就没有那么慌了。而结对项目比起个人项目来说,搭档可以帮忙找到自己的不足,也能在卡壳的时候为你提供思路。但是如果合作不好,交流不够的话,对于项目的进展是会起到负效果的。所以结对项目中的效果是要看搭档的两人的默契和配合,如果两人的配合不够,那么无疑1+1<2;反之则是1+1>2。