Individual project -WC

1, GitHub Address: https://github.com/huanf921/WC

2, PSP form

PSP2.1

Personal Software Process Stages

Estimated time consuming (minutes)

The actual time-consuming (minutes)

Planning

plan

30

35

· Estimate

• Estimate how much time this task requires

30

35

Development

Develop

1530 1475

· Analysis

· demand analysis

120

100

· Design Spec

Generate design documents

30

30

· Design Review

· Design Review

40

60

· Coding Standard

· Code Specification

20

40

· Design

· Specific design

60

80

· Coding

· Specific coding

1200 1000

· Code Review

· Code Review

30

40

· Test

· Test (self-test, modify the code, submit modifications)

30 35

Reporting

report

80 90

· Test Report

· testing report

30 50

· Size Measurement

· Computing workload

20 20

· Postmortem & Process Improvement Plan

· Hindsight, and propose process improvement plan

30 20

total

 

1640  1600

3, problem-solving ideas

  In doing this project, I first analysis of the project in understanding the needs of the time, spent a lot more time, because if the wrong understand the demand side, it will cause a lot of adverse effects on subsequent development.

  Subject description has been pointed out that this is an imitation of existing wc.exe function of the command-line program, and all parameters are acquired from the command line. So my idea is directly subject to the required functions are encapsulated, and then through a main class WordCount which blend together several functions. That is, by obtaining the main class command line parameters associated with each function provided by up function based on the inputted user command corresponding processing in the main category, and function parameter file path according to the obtained parameters and then of functional class corresponding to call the appropriate methods are required to implement each command.

  基本功能类BasicFnc中封装了“-c”、“-w”、“-l”这几个功能的实现方法,扩展功能类ExtendFnc中封装了“-s”、“-a”的实现方法,而高级功能类SeniorFnc中封装的则是图形交互界面。在这次的设计中,我原本是按照这个计划去实现每一个小功能,不过实际执行起来才发现,有些功能之间需要相互关联才能实现题目所要求的效果。就像是递归功能,我原本的思路是直接在ExtendFnc中直接在传入“-s”参数时实现递归统计,但再重新仔细地阅读题目需求后才发现应该在主类中设计“-s”与其他功能符的组合,而在ExtendFnc中对“-s”的设计则是只做递归保存文件的处理。

  再有则是以下我在考虑几个具体功能的实现时的思路:

  基本的字符数,行数,词数的统计较为简单,而递归统计的功能我则是考虑通过List来保存当前文件目录下的所有文件,之后再根据第二功能参数的情况来选择具体统计哪一项源程序特征。

  通配符方面,我是将它与递归一并处理,在判断第二功能参数之前先判断当前路径是否包含通配符,如若包含则直接用正则表达式匹配事先在List中存好的递归文件列表,筛选出符合条件的文件(相当于文件过滤作用)进行进一步的特征统计。

  特殊行数的统计则是分别对题目要求的情况和正常的情况综合考虑,才能去写相应的正则表达式匹配和判断。至于最后一个图形界面的编写,在以上功能都近乎完善之后,基本上算是最简单的一环,对选中的相应文件进行信息统计时,只要添加合适的界面构件及其监听器即可,而监听方法可直接联系其他功能类中的方法直接调用。

4、设计实现过程

 

 

 整个设计构成其实较为简单,以基本功能、扩展功能、高级功能来封装类,而我在实现的时候,通过在WordCount主类中定义的几部分类变量(文件特征的整数变量,图形界面的checkBox是否被选取的布尔变量以及递归统计时保存所有递归所得文件的List<File>类对象),使主类与这几个功能类之间得以相互联系,算是起到桥梁作用。后期实现图形界面功能时,也是通过这道桥梁向基本功能类和扩展功能类获取所需的统计信息,才能在文本域显示。而Help类主要是用来向用户提供程序的使用说明,直接在主类中调用即可。

5、测试运行

本次项目设计过程中,进行了多次手动的单元测试,以确保每一个小功能在初步设计后的错误率尽可能降低,同时也降低后期代码复审的工作量,提高了整体的开发效率。

这是在基本功能中的单元测试,测试结果:

 

 

 

 这是在扩展功能中的单元测试,测试结果:

 

 

 以上单元测试都符合预期结果。

在完成整个程序后,则是建立一系列测试文件:

 空文件 :D:\WC_Test\2\21\212

 

只有一个字符的文件:D:\WC_Test\1\11\e.c

 

 

只有一个词的文件:D:\WC_Test\1\11\f.java

 

 

只有一行的文件:D:\WC_Test\1\11\g.txt

 

 

一个典型的源文件:‪D:\WC_Test\1\12\121\a.java

 

 

 测试结果均与预期结果一致。

 

测试递归与通配符功能

 

 递归统计了该目录下的所有文件对应特征的信息,符合预期结果

递归统计了符合通配条件的文件特征信息,符合预期结果

 

测试图形界面功能

 

 

在首界面选择想要统计的文件特征项后,选择特定文件进行统计并在文本域内返回各项特征信息,符合预期结果。

 

 

 6、项目总结

代码覆盖率:

 本次项目整体来说实现过程还算比较顺利,尽管中间有些过程稍微困难了一点,但是却让我很深刻地体会到了“做项目”的感觉,不仅仅是说自己尽可能独立做一个项目,更为关键是让我清晰地经历了一个完整的项目开发流程。跟课设不同,这次个人项目实践要求更加全面,项目的具体编码设计只是占据了其中一个主要方面而已,还有单元测试、回归测试以及代码覆盖率等多项工作和指标需要自己去完成,这确实让我感受到很多。个人觉得这次项目还有很多不足,整体代码显得有些冗余,在封装方面也做的不够好,希望自身能在后续的项目实践中发现更多问题并逐步解决。

 

Guess you like

Origin www.cnblogs.com/futurelv99/p/11588651.html