个人项目-WC(java实现)
一、Github地址:https://github.com/silakami/wc.exe
二、PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
Planning | 计划 | 30 | 30 |
Estimate | 估计这个任务需要多少时间 | 30 | 30 |
Development | 开发 | 880 | 960 |
Analysis | 需求分析 | 50 | 40 |
Design Spec | 生成设计文档 | 40 | 40 |
Design Review | 设计复审 | 40 | 50 |
Coding Standard | 代码规范 | 30 | 30 |
Design | 具体设计 | 30 | 40 |
Coding | 具体编码 | 600 | 650 |
Code Review | 代码复审 | 40 | 40 |
Test | 测试(自我测试,修改代码,提交修改) | 50 | 70 |
Reporting | 报告 | 120 | 140 |
Test Report | 测试报告 | 60 | 70 |
Size Measurement | 计算工作量 | 20 | 30 |
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 40 | 40 |
Total | 合计 | 1030 | 1130 |
三、解题思路
1、分析题目,并进行需求分析:这个软件可以分成三个模块,第一个模块是各种非递归的功能,第二个模块是文件的通配符和递归查找,第三个模块是可视化界面,并且包含着各种功能,除此之外,这个程序还要求和用户进行交互,即需要从命令行读入用户输入的指令(参数和文件路径)。分析完各个模块,就可以进行分析得到各个模块和模块内不同功能的联系。
2、各种非递归功能(即文本统计功能):实现字符,单词,行数,空行,注释行,代码行的统计功能,使用字符流进行IO操作,每次读入一行,并对读入的行数进行相应的统计,直到读入的返回值为null,而且对IO错误进行捕捉,并提示用户相关信息,让用户修改输入。
3、文件的递归查找和通配符:支持通配符,获得用户输入信息,如果输入是一个文件夹,则获取该文件夹下的所有文件路径列表,进行递归查找,为了避免得到一些无法读取的文件(如.exe文件),对部分文件进行了过滤,如果输入是查询某类型的或者是某名称的文件,则先拆分输入的文件路径,得到文件所在目录和文件名,然后把文件名中的通配符替换成正则表达式,并作为匹配条件,使用正则表达式来对目录下的文件进行匹配,同样是使用递归查找的方法,最终得到一个文件名集合,同时,为了防止递归过深导致程序卡死,这里还对递归深度进行了限制,提供更好的用户交互体验。
4、可视化界面:该功能是让用户通过图形界面进行交互,让用户手动选择文件,返回所有统计信息,这里采用JFrame容器。
5、命令行交互:该功能通过Scanner来实现,然后通过正则表达式和文件判断类来对输入进行检测,查看是否有非法输入。
6、模块的整合:编写main函数,理清各个模块内和模块间的调用关系,同时要考虑如何应对各种非法输入,增强程序的健壮性。
四、设计过程
代码主要分成主类,文本统计模块,文件处理模块,界面模块四个部分,下面是简要的关系:
五、测试运行
1、空文件
2、只有一个字符的文件
3、只有一个单词的文件
4、标准的java源文件
5、多目录嵌套文件
6、通配符测试
7、可视化界面
8、各种输入错误的处理(并非全部)
有上图可见,该程序基本实现了项目的需求,并且具有一定的健壮性,抵御众多不正确的输入。
六、项目小结
本次项目使用了java进行开发,第一次遵循一定的代码开发规范来做项目,比起以往自己做的课设之类的练习,所花的时间比以前更长,但是考虑到的东西确实比以往更多,各个模块的联系变得更加清晰,做好需求分析确实能让项目的目标更加明确,而不是写着写着代码才突然想到要加多几个功能进去,哪个地方有问题导致整个类甚至程序要重写。通过这次练习,我体验到了软件的需求分析,设计,开发,测试的过程,总体来说,我确实收获了很多东西,以后还需要样成这种规范化编程的习惯。