软件工程 wordcount
GitHub地址
PSP表格
PSP2.1 | Personal Software Process Stages | 预计耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 80 | 120 |
·Estimate | 估计这个任务需要多少时间 | 2100 | |
Development | 开发 | ||
·Analysis | 需求分析(包括学习新技术) | 360 | 300 |
·Design Spec | 生成设计文档 | – | – |
·Design Review | 设计复审(和通识审核设计文档) | 120 | 240 |
·Codeing Standard | 代码规范(为目前的开发设定合适的规范) | 80 | 120 |
·Design | 具体设计 | 120 | 120 |
·Coding | 具体编码 | 1000 | 1000 |
·CodeReview | 代码复审 | 240 | 300 |
·Test | 测试(自我测试,修改代码,提交修改) | 180 | 120 |
Reporting | 报告 | 240 | 180 |
·Test Report | 测试报告 | 30 | 60 |
·Size Measurement | 计算工作量 | 40 | 60 |
·Postmortem & Process Improvement Plan | 事后总结,提出过程的改进计划 | 100 | 100 |
合计 | 2240 | 2100 |
解题思路
此次的题目可以将其分为三个部分
- 对于一个文件的求解,
- 通过一定的方式不断的搜索满足要求的文件进行求解,
- 生成一个桌面应用方便用户的使用
对于三个问题进行依次的求解
设计类 WC
FileFound
Interface
分别实现三个主要的功能
类WC
在接受布尔型变量确定需要求解的问题,接受文件的指针对于文件进行处理。整个求解过程中,遍历一次文件同时对几个进行问题同时求解。对于字符的统计和对于空行的统计实现较为简单,不做太多描述;对于单词的统计默认一个不包含空格的字符串为一个单词,每次检测到非空格单词的时候认为进入了单词之中,再次检测到空格/换行时默认脱离一个单词。注释行的判断单行注释与多行注释的作用和判断范围不同,因此将其分开讨论。每次考察前一个字符和当前的状态就可判断注释的开始和结束。
类FileFound
处理传入的文件名,因为文件名可能有通配符的情况,所有需要对文件进行判断。通配符和文件名的匹配采用了动态规划的方式进行处理。
初次之外,要处理的是处理当前目录下的文件或者还需要不断递归处理。在C++2017的标准中,将filesystem
引入了标准之中,对于文件可以方便地处理。接受外界传入输入表达式和是否进行递归处理的布尔变量后利用directory_iterator
或者recursive_directory_iterator
即可完成相应的求解操作。
用户图形界面运用Qt实现,运用Qt带来的标准对话框FileDialog
实现文件的选择。
程序优化
最开始的处理时,利用文件的读取函数fgetchar()
对于文件的字符进行读取,但是因为IO的时间过长导致程序的运行时间缓慢。
在文件的读取过程中,运用了一个buffer对于文件进行读取,为了提高程序的处理速度,适当的提高了buffer的大小。使得一次的文件读取能够处理更多的字符。
学习感想
两个人合作效率上其实挺高的,类的封装性处理的较好的情况下,在写程序时不需要了解对方的具体实现过程,只需直接调用即可,整个开发的速度进行了提高。且在初次的开发完成后,两个人相互审查代码,可以较快的发现代码中的bug。
多人的代码开发过程中,变量名的统一命名格式和意义明确对于开发也有着重要的影响,如果在这方面处理不好,可能会使得代码的开发过程出现许多的问题。