一、GitHub项目地址
二、PSP表格
PSP2.1Personal Software Process Stages预估耗时(分钟)实际耗时(分钟)
· Planning
· 计划
50
55
· Estimate
· 估计这个任务需要多少时间
30
30
· Development
· 开发
960
784
· Analysis
· 需求分析
50
60
· Design Spec
· 生成设计文档
30
43
· Design Review
· 设计复审
20
20
· Coding Standard
· 代码规范
20
20
· Design
· 具体设计
150
50
· Coding
· 具体编码
400
300
· Code Review
· 代码复审
60
50
· Test
· 测试(自我测试,修改代码,提交修改)
180
180
· Reporting
· 报告
120
120
· Test Report
· 测试报告
60
60
· Size Measurement
· 计算工作量
20
20
· Postmortem & Process Improvement Plan
· 事后总结, 并提出过程改进计划
30
40
合计
2010
2159
三、解题思路
理解基础功能,基础功能是计算文件的行数,字符数等,因此,这些基本功能应该是封装成工具类进行调用,然后外界只需要确定查询的文件,读入便可进行计算。
理解进阶功能,进阶功能无非就是修改了参数,因此,我们只需要在第一步的基础上,在判断的条件中增加两个参数,便可以做到递归查询文件还有代码计算的输出,此处递归查询文件,可以复用基础功能的逻辑,所以可以将基础功能抽成单独的方法进行调用。
理解高级功能,高级功能是进行界面展示,而之前的功能是进行命令行展示,于是我们可以理解成是一种问题的两种方案,所以,需要在中间加入一层逻辑判断,判断参数,构建出不同的解决方案,而外界只需要进行传入参数调用即可,不需要理会具体的实现,此处应该设计成,方案类继承统一的父类抽象类,在以后扩展解决方案的时候,只需修改中间逻辑层的少部分代码即可实现。
程序还应该对一些不合理的输入进行提示,输入有误。
四、设计实现过程
MAIN类:程序的入口处,只是简单的调用逻辑层的方法,传入参数即可,接下来的工具交给逻辑层进行处理。
service层:抽象出一个通用的方案抽象类,创建两个实例类继承它,一个是命令行操作,一个是界面操作。创建一个获取对应方案解决类的Manager管理类,MAIN类传入参数,其进行判断,使用什么方案,例如,命令行,那就返回命令行实例类,进行命令行调用解决。在对应的方案类中,判断不同参数,调用底层工具类的方法,获取对应的值
底层工具实现类:进行文件的读取,文件的行数,单词等的计算,这个工具跟项目业务无关,因此可以抽成util类。
如果是界面展示,则需要一个界面的类,此类由界面方案解决类进行创建,其调用工具类获取到信息之后,进行填充View类进行展示
五、程序结果
1. 基础功能
2. 进阶功能
支持文件通配符,进行文件夹的递归查询子文件
3. 高级功能
选择文件
4. 异常情况
5. 测试文件
六、总结
编写这个个人项目,经历了一个开发的流程,从设计,预算,开发,测试的过程中,学习到了很多关于软件工程的思想,其实实现功能并不难,而将该模块设计好,将所有情况考虑完善才是难的。在开发的过程中,要提到的是,在使用命令行的时候,因为是在编译器直接运行,所以就选择了编译器集成的命令行传参,没有用命令行进行操作,相信这个影响不大。尽管实现的是一个小功能,但还是想把所有方面都想清楚,从设计,搭建框架入手,将小功能实现,遵循开闭原则,做到易扩展,程序有更好的健壮性。