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执行文件后出现的界面
    image
  • 测试一个正常的程序文件
    image
  • 测试非文本文件
  • 测试不存在的文件名
  • 测试空文件
  • 测试只有一行的文件
  • 测试-s进行通配符递归查询
  • 测试图形界面
  • 图形界面进行操作显示

用户说明

  • 打开exe执行后,界面会有输入格式的说明,用户先输入查询文件的文件夹路径,再输入指令和文件名
  • 用户输入查询文件后可以继续输入执行下一条指令,直到选择退出的指令
  • 文件可查询的文档类型有txt,doc,java,cpp,html文档,其他类型不可查询
  • 在进行-s查询时,需要匹配一个-c之类的作为限制条件进行查询
  • 在执行-x时,会有界面出现,点击浏览便可选择要查询的文件,点击查询就会显示所有统计信息

总结

  • 本次个人项目作业中,我意识到自己的编程能力较弱,对java的掌握也是不太熟练,进行项目过程中,常常查看jdk的API文档帮助查看一些方法类,不足的地方是在需求分析的时候,没有理解好题意,导致做项目开发的功能中,有部分偏差,后期发现再改动代码,就增加了很大的工作量,下次做类似作业时,一定要多花时间在需求分析上,才能少走弯路。在实现功能过程中,有些问题总是不能够考虑得全面,对于java也不是很会用,导致代码很冗杂,维护性不高,所有编程语言也应该充分熟悉;在测试的时候,由于不太会用插件测试,于是还是用了传统的测试方式进行
  • 可改进的地方:由于刚开始设定了默认的路径文件夹,其他代码都有用到,后来改动时时间不够,只能让用户先输入查询的文件夹路径,再输入指令进行查询,实现特殊行时,用着正则表达式也不是很全面,有些情况没有考虑到;测试方面,使用传统的方式测试结果可能不够准确,然后代码覆盖也比较低,下次可以试着用插件测试。