个人第四次作业-结对编程

一.Fork仓库的地址和伙伴的地址

github项目地址 https://github.com/sunnyyyt/WordCount
结对伙伴作业地址 https://www.cnblogs.com/zxx-xxx/p/11656666.html
结对伙伴学号 姓名 201731062601 周小萱

二.psp表格

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 1540 1750
Estimate 估计这个任务需要多少时间 1540 1750
Development 开发 450 540
Analysis 需求分析 (包括学习新技术) 40 60
Design Spec · 生成设计文档 60 40
Design Review · 设计复审 (和同事审核设计文档) 50 60
Coding Standard · 代码规范 (为目前的开发制定合适的规范) 30 40
Design · 具体设计 50 70
Coding · 具体编码 480 550
Code Review · 代码复审 50 40
Test 测试(自我测试,修改代码,提交修改) 120 130
Reporting 报告 100 100
Test Report · 测试报告 40 30
Size Measurement · 计算工作量 40 50
Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划 30 40
合计 1540 1750

三.项目代码设计包括测试代码部分设计

1.项目实现的基础功能:

  • 统计文件的字符数:
  • 只需要统计Ascii码,汉字不需考虑
  • 空格,水平制表符,换行符,均算字符
  • 英文字母:A-Z,a-z
  • 字母数字符号:A-Z,a-z,0-9
  • 分割符:空格,非字母数字符号
  • 统计文件的单词总数,单词:至少以4个英文字母开头,跟上字母数字符号,单词以分隔符分割,不区分大小写。
  • 统计文件的有效行数:任何包含非空白字符的行,都需要统计。
  • 统计文件中各单词的出现次数,最终只输出频率最高的10个。频率相同的单词,优先输出字典序靠前的单词。
  • 按照字典序输出到文件txt:例如,windows95,windows98和windows2000同时出现时,则先输出windows2000
    新增功能:
  • 词组统计:能统计文件夹中指定长度的词组的词频
  • 自定义输出:能输出用户指定的前n多的单词与其数量

2.项目设计思路

仔细梳理了作业要求后我们列出了几个所需的函数要求:

函数:1.统计字符 2.统计行数 3.统计单词 4.建立单词字典 5.字典中的单词排序 6.打开文件
主要函数的逻辑思路如下:


逻辑思路:

先要成功打开文件才能实现功能

具体实现各个函数的功能
建立单词词典:判断是否满足单词的条件(长度大于三,是否以数字开头)
建立完成后,调用统计单词函数通过对字典value值的来统计单词数,并对单词进行排序
输出到文件。
3.项目流程图
在整理清楚这次项目的逻辑思路之后,我们根据整体画出了整个项目的项目逻辑流程图。

4.c#代码规范(和队友共同规定项目的解题代码规范)

四.代码解析部分

1.统计字符数方法

ps:在统计字符的时候,我们最开始是用的File Stream的Read方法,通过判断返回结果是否返回-1来统计,后来发现其实可以直接用Ascll码还更加的简单。考虑到后面的函数结构以及传参方便所以采用了这种方式

2.统计行数方法

ps:统计行数的时候,因为是通过判断换行符的方法来判断行数,然后文本在转换成字符串的时候,空行变成了换行符,这样的话就统计了两次,于是就加上了一个判断,判断是否连续两次出现换行符。

3.统计单词数方法

最开始不知道应该怎么统计,也是查找资料和博客才学会了要用字典的方法来进行统计
参考链接https://www.cnblogs.com/gengaixue/p/4002244.html
参考链接https://www.cnblogs.com/wt-vip/p/5997094.html

4.频率次数排序方法

5.写入文件方法

因为上次作业也涉及到了写入文件,所以这次就比较熟悉。

6.执行结果


五.测试代码部分设计及展示。

在写接口封装前我们对项目代码各个函数书写了相应的测试代码,对于每个函数我们自定义了一个字符串的方式来测试函数功能,其实也可以通过传入路径的方式来测试,测试的方式很多,我们选择了即简便又快捷的方式来测试代码过程,然后测试也都通过了,然后将函数分别进行了接口封装。改进后的测试代码截图如下:



在接口封装部分,我们把整个代码分成了两个类,主类和计算单词的类,总共有一个主函数,五个功能函数 CountChar函数、CountLines函数、CountWords函数、GetDic函数、SortWord函数,在还没有分离出来时,主函数里面的内容比较多,导致代码的运行效率不高,之后在分离出来之后主函数就会简便很多,继而也会提高代码的运行效率。

新增功能部分:


六.计算模块部分异常处理说明

七.项目性能分析报告


在最开始进行接口封装之前,主函数的消耗要大很多,因为基本上功能部分都需要在主函数中引用,之后我们将各个函数进行分离出来后,减轻了主函数在cpu,内存方面的消耗。

八.结对的过程

本次结对编程选择的是跟室友一起结对,因为对彼此比较熟悉,所以一起结对编程较为方便。在这次的结对编程过程中,我门本身对c#代码不大熟悉,所以我们两个要完成所有功能是有一定的难度,中途我们也查找了很多资料,也问了室友相关的c#代码问题,然后在接口部分我们也查找了很多资料,这次项目的完成过程也是比较曲折的,但是还好最后通过两个人的共同努力将项目作业完成,两个人分工合作,先规定代码规范,然后再各自书写相应的代码,然后再汇总起来,过程中遇到困难互相帮助,互相鼓舞,提高了各自得团队合作能力,是很好的一次项目作业体验,也证实了有时候1+1是真的大于2的。

posted @ 2019-10-12 13:40  sunnyyt  阅读(274)  评论(1编辑  收藏  举报