代码改变世界

WC个人项目(JAVA实现)

2019-09-25 20:50  dzg01  阅读(130)  评论(0编辑  收藏  举报

一、Github地址https://github.com/dzg01/WC

 


 

二、PSP表格

       PSP2.1          

Personal Software         Process Stages  预估耗时(分钟)  实际耗时(分钟)
Planning 计划 30 45
Estimate  估计这个任务需要多少时间 30 25
Development 开发 800 720
Analysis  需求分析 60 50
Design Spec 生成设计文档 30 40
 Design Review 设计复审 30 20
Coding Standard 代码规范 30 25
Design 具体设计 100 70
Coding  具体编码 800 660
 Code Review 代码复审 40 30
Test 测试(自我测试,修改代码,提交修改) 120 270
Reporting 报告 100 120
Test Report 测试报告 60 90
 Size Measurement 计算工作量 30 45
Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划 30 40
合计   2260 2250

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


三、解题思路

  1.基本功能。在对需求分析完毕后,我了解到该项目就是传递参数对选定的文件进行统计功能。由于基本的统计字符数,行数,单词数功能在以前做JAVA课设时有涉及到,这一部分功能的实现很快就能想好。通过循环读取文件的每一行内容进行统计,字符数为每一行的长度相加,每一次循环行数加一,直至文件读完。

  2.扩展功能。扩展功能是对行数,注释行,代码行进行统计,比较难的是判断注释行的逻辑。注释行分为单行注释//和多行注释/* */,通过一个flag标记就可以判断当前是否注释行。空白行在源文件中除了空字符还有单个字符“{、}、;”,还需要判断是否在注释行里面,其余的情况则都是代码行。

  3.递归处理。通过递归处理目录下符合条件的文件,在编码过程中,为了方便我将后缀为.cpp的源代码设为符合条件的文件。这个功能的实现主要是先要获取目录的文件,将符合条件的文件加入到arrayList数组中,然后再遍历所有的文件,判断是否为文件夹,如果是则进行递归,若不是则调用写好的各个功能模块。

  4.高级功能。高级功能比较简单,通过图形界面选取文件并显示出文件的统计信息。使用window builder很快就可以做好界面,这里我只实现了选取单个符合条件的文件并显示,界面做得相对简陋。

  5.程序在命令行中运行,应该打印出相关使用信息,让用户输入正确的格式,程序要对一些不合理的输入进行提示,捕获异常。

 


 四、设计实现过程

  代码分为五个模块:基本统计功能countWC类、扩展功能extendWC类、递归处理processWC类、图形界面showWC类、功能调用workWC类

 

 

  1.workWC类:主类,程序的入口,获取用户在命令行输入的参数,根据用户输入的内容,调用各个模块。

  2.countWC类:基本统计类,参数传给BasicCount函数实现基本统计功能。

  3.extendWC类:拓展类,参数传给ExtendCount函数实现拓展功能。

  4.processWC类:递归处理符合条件的文件和文件夹,用户输入数组作为参数传给AllCount函数实现递归。

  5.showWC类:图形界面类,显示出所选取的文件的各种信息。

 


五、测试结果

  测试文件:空文件、只有一个字符的文件、只有一个单词的文件、只有一行的文件、一个典型的源文件、源文件夹

  以下采用手工测试:

1.测试空文件

2.测试一个字符文件,单行文件

 

 

 3.测试一个单词文件

 4.测试代码文件

贴出部分文件内容

 

 

 5.测试递归处理

 贴出文件部分内容(选取本地的代码文件)

 部分测试结果

 6.测试图形界面

 

 

 

 

                                                                                      验证后得出处理结果与实际相符!

 

 


 代码覆盖率

使用eclipse中的EclEmma插件得出覆盖率,还有改善空间。

 

 

六、个人总结

  完成这次的个人项目,收获还是相当大,又有一次实践的机会来提升自己的编程能力,还能在做项目的过程学习软件工程的知识。其实还有相当多的改善空间,比如测试 ,这次用的是手工测试,改进的话可以用JUnit来编写测试程序。还有缺少用户帮助信息,没有给用户提供一个用户手册,因为是手工测试,在进行测试时输入的都是正确的格式,但考虑到实际应用中难免有各种输入,改进的话可以处理这些错误的输入,提示用户该怎样输入。这次编码过程比预计的要快,但其实很多逻辑一开始测试的时候都有各种各样的bug,处理这些也是费了不少功夫。总的来说,受益匪浅。