GitHub地址:https://github.com/caiyouling/WC
PSP表格
PSP | Personal Software Process Stages | 预计耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 40 | 30 |
.Estimate | .估计这个任务需要多少时间 | 40 | 30 |
Development | 开发 | 1320 | 1330 |
.Analysis | .需求分析 | 100 | 120 |
.Design Spec | .生成设计文档 | 40 | 30 |
.Design Review | .设计复审 | 15 | 20 |
.Coding Standard | .代码规范 | 15 | 20 |
.Design | .具体设计 | 90 | 100 |
.Coding | .具体编码 | 850 | 950 |
.Code Review | .代码复审 | 90 | 90 |
.Test | .测试(自我测试,修改代码,提交修改) | 120 | 130 |
Reporting | 报告 | 180 | 160 |
.Test Report | .测试报告 | 90 | 80 |
.Size Measurement | .计算工作量 | 30 | 40 |
.Postmortem&Process Improvement Plan | .事后总结,并提出过程改进计划 | 60 | 40 |
合计 | 1540 | 1520 |
解题思路
- 拿到题目后,我先大概浏览了整个需求文档,大概知道是统计文件的一些字符数据,但是要在命令行实现,以前命令行实现是用C语言,但是很久没有使用已经有些生疏了,根据上学期的计网课设,我用过java程序转为exe文件,那就意味着java也是可以实现的,于是我便较早地确定了用java作为编程语言。
- 由于java学的不是很好,有些知识已经模糊,比如I/O,但是文件读取又必须要用到,于是我便重新再复习了文件的读写实现,如果用InputStreamReader字节流读取,对文字可能会有些误差,所有我选择了Reader字符流进行读取操作
- 在实现基本功能时,我觉得还是比较简单的,因为字符,行数那些读取都可以直接操作,全部封装在一个工具类中,通过用户输入的指令对应计算
- 在实现扩展功能时,觉得好难好难呀,刚开始理解错了-s,以为是递归查询所有文件(说明需求分析没做好),后来在实现-a的时候多看几次文档就发现了问题,使用通配符进行模糊查询,本来想着用文件过滤器FilenameFilter实现,但是重写方法的时候发现不可行,就建了两个文件数组进行筛选,这个花的时间较长。
- 实现特殊行查询:这个我认为是最难的部分,虽然实现了程序,但是有些方面还是没有考虑到,我用正则表达式进行判断匹配,主要是代码行和注释行,注释行有很多隔行注释方面的很难匹配操作,于是我在代码行上做了正则,然后不属于空行和代码行中,存在注释行的标识即为注释行
- 实现高级功能:这个我觉得也比较简单,主要就是使用JFrame画一些组件(虽然画的很丑),再调用相应的函数即可,我是已经设好了一个默认路径,用户可以浏览选择文件,点击查询即可在展示板上显示各个数据。
设计思路
- Main类:程序的入口,主要是命令行的界面以及和接收用户指令进行调用程序
- Count类:用于基本功能和扩展功能中统计的各个函数,其中基本功能设有三个函数,特殊行在一个specialLine函数中
- dirList类:用于递归查找符合条件的文件,并输出用户指定查询的指令
- wcGUI类:用于高级功能-x,当用户输入-x命令后,便会出现用户界面框,当用户选择文件后进行查询,便可得到该文件的全部数据信息显示在文本框中。
测试分析
- 打开exe执行文件后出现的界面
- 测试一个正常的程序文件
- 测试非文本文件
- 测试不存在的文件名
- 测试空文件
- 测试只有一行的文件
- 测试-s进行通配符递归查询
- 测试图形界面
- 图形界面进行操作显示
用户说明
- 打开exe执行后,界面会有输入格式的说明,用户先输入查询文件的文件夹路径,再输入指令和文件名
- 用户输入查询文件后可以继续输入执行下一条指令,直到选择退出的指令
- 文件可查询的文档类型有txt,doc,java,cpp,html文档,其他类型不可查询
- 在进行-s查询时,需要匹配一个-c之类的作为限制条件进行查询
- 在执行-x时,会有界面出现,点击浏览便可选择要查询的文件,点击查询就会显示所有统计信息
总结
- 本次个人项目作业中,我意识到自己的编程能力较弱,对java的掌握也是不太熟练,进行项目过程中,常常查看jdk的API文档帮助查看一些方法类,不足的地方是在需求分析的时候,没有理解好题意,导致做项目开发的功能中,有部分偏差,后期发现再改动代码,就增加了很大的工作量,下次做类似作业时,一定要多花时间在需求分析上,才能少走弯路。在实现功能过程中,有些问题总是不能够考虑得全面,对于java也不是很会用,导致代码很冗杂,维护性不高,所有编程语言也应该充分熟悉;在测试的时候,由于不太会用插件测试,于是还是用了传统的测试方式进行
- 可改进的地方:由于刚开始设定了默认的路径文件夹,其他代码都有用到,后来改动时时间不够,只能让用户先输入查询的文件夹路径,再输入指令进行查询,实现特殊行时,用着正则表达式也不是很全面,有些情况没有考虑到;测试方面,使用传统的方式测试结果可能不够准确,然后代码覆盖也比较低,下次可以试着用插件测试。