一、GitHub地址
https://github.com/amazingyp/LineCount
二、PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 30 | 24 |
· Estimate | · 估计这个任务需要多少时间 | 30 | 24 |
Development | 开发 | 1210 | 1272 |
· Analysis | · 需求分析 | 15 | 13 |
· Design Spec | · 生成设计文档 | 40 | 40 |
· Design Review | · 设计复审 | 35 | 51 |
· Coding Standard | · 代码规范 | 20 | 20 |
· Design | · 具体设计 | 100 | 108 |
· Coding | · 具体编码 | 850 | 901 |
· Code Review | · 代码复审 | 30 | 28 |
· Test | · 测试(自我测试,修改代码,提交修改) | 120 | 111 |
Reporting | 报告 | 120 | 110 |
· Test Report | · 测试报告 | 60 | 50 |
· Size Measurement | · 计算工作量 | 20 | 30 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 40 | 40 |
合计 | 1360 | 1406 |
三、解题思路
1.使用何种语言
题目中说过本次项目可使用任何语言,而且此题目并不会因为语言的选择而对解题难度有所影响,所以选择了不太熟悉的python,作为练手项目。
2.需求分析
本题需求为给定一功能参数和文件路径,去统计制定的行数,另外还要有递归文件夹,实现通配符,可视化界面的要求。面对这样逻辑清晰、且功能相对独立的需求,我的办法是"自底向上"设计(有没有这个名词啊0.0),具体做法是,先不考虑各个功能如何如何交互调用,先问自己,你会统计文件中的字符数吗?你会统计文件中的词数吗?每问自己一次,就实现一部分的功能,将这些功能实现好之后,在考虑封装调用的问题。封装成类?封装成函数?本题结构较为清晰简单,便只是封装成了函数,实现相应功能时调用即可。
3.功能实现
比较难的功能应该是统计词数,和其他同学一样,readline后用正则处理字符串,然后统计,其他的功能也大同小异。
4.图形界面
这不是python的强项,也不是我的强项,我用python默认的gui库Tkinter进行可视化界面的开发。第一次接触这个东西,所以效果并不美观。
四、设计实现过程
程序的功能逻辑比较简单,此处不画流程图了0.0
程序分为三个模块
--wc.py 用于处理各种命令行参数
--function.py 存放统计不同类型行数的函数
--window.py gui程序
工作流程为:用户给wc.py输入参数,wc.py根据用户输入的参数调用function.py的不同函数,将返回的结果打印在命令行中。
在上交这份作业之前,我观摩了不少的同学的作业,发现用Java编写的程序流程图组织非常精良,各种抽象类各种继承,比我这个玩具程序要严谨的多。这充分体现了Java和python两种语言的特色,Java组织严密,适合大型项目开发;python短平快,适合小型工具的开发。
五、功能测试
1.统计字符数
2.统计词的数目
3.统计行数
4.统计复杂数据
5.递归
6.图形界面
六、总结反思
通过完成这个项目,我了解到了python的一些基本语法,同时也是第一次使用PSP表格,希望能在以后的项目开发中学到更多东西。