python实现wc.exe
一、github地址:https://github.com/BakersChan/wc
二、PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 30 | 40 |
· Estimate | · 估计这个任务需要多少时间 | 30 | 40 |
Development | 开发 | 720 | 1375 |
· Analysis | · 需求分析 | 30 | 45 |
· Design Spec | · 生成设计文档 | 30 | 50 |
· Design Review | · 设计复审 | 30 | 20 |
· Coding Standard | · 代码规范 | 20 | 10 |
· Design | · 具体设计 | 90 | 60 |
· Coding | · 具体编码 | 980 | 1100 |
· Code Review | · 代码复审 | 30 | 30 |
· Test | · 测试(自我测试,修改代码,提交修改) | 60 |
60
|
Reporting | 报告 | 90 | 110 |
· Test Report | · 测试报告 | 50 | 60 |
· Size Measurement | · 计算工作量 | 15 | 20 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 25 | 30 |
合计 | 1172 | 1485 |
三、解题思路
1.命令行参数处理
在主函数中通过获取sys.argv中传入的参数并传入数组,判断数组中是否存在-s指令,若有则将传入的路径作为目录,递归获取路径及子路径下所有文件的带路径名并存入数组。如果无-s指令则传入的路径写入数组。
2.文件统计设计
2.1先将如-s -a这样的指令存入数组,若有-s则在递归获取文件名后删去-s,在main函数中对指令数组和文件名数组进行双重循环,每重循环使用一个指令及一个文件名,随后在choose_option()方法中依据传入的指令选择使用的方法,比如-c指令则会将文件名传入cal_strs()方法中,随后打开文件,依行取出并读取行数。另两个基础功能同理,最后在控制台打印输出结果。
2.2对于扩展功能的流程与2.1相同,区别在于在依行取出内容后使用正则表达式判断该行代码是代码行或是注释行等等。
2.3对于递归的处理,将传入的文件路径作为第一个参数,在方法中判断传入的路径若为路径则将子路径取出并作为参数递归,若为文件则将带路径的文件名返回并添加到数组。这样可以获取路径及子路径下的所有文件的带路径文件名,以供2.1中双重循环使用。
四、设计实现过程
五、测试运行
测试文件:一个空文件、一个只有一个字符的文件、一个只有一个单词的文件、一个标准的python源文件、一个标准的java源文件、一个标准的C源文件。
代码覆盖率
六、项目总结
在这次项目的设计与开发中,我感受到了“程序预则立”的力量,因为先设计好了流程图所以没有像过往一样出现中途卡壳推倒重来的悲剧,这点就很欣慰。。。。另一方面是自己预估的psp时间与实际所用出入还是较大,这部分原因主要在于编码的能力与效率比较低下,花在查找资料并尝试使用的时间上比较多。这次的项目开发中我做测试的部分并没有达到比较高程度的自动化,这一点还是需要在接下来的项目中有所改进,手动测试就还是比较累。。。