1、GitHub的网络地址:https://github.com/qiannai/WC.gitgit
2、PSP图表:github
PSP2.1正则表达式 |
Personal Software Process Stages网络 |
预估耗时(分钟)模块化 |
实际耗时(分钟)函数 |
·Planning学习 |
·计划测试 |
30优化 |
20编码 |
· Estimate |
· 估计这个任务须要多少时间 |
30 |
10 |
·Development |
·开发 |
1440 |
760 |
· Analysis |
· 需求分析 |
60 |
80 |
· Design Spec |
· 生成设计文档 |
30 |
20 |
· Design Review |
· 设计复审 |
20 |
20 |
· Coding Standard |
· 代码规范 |
70 |
110 |
· Design |
· 具体设计 |
40 |
20 |
· Coding |
· 具体编码 |
750 |
700 |
· Code Review |
· 代码复审 |
20 |
18 |
· Test |
· 测试(自我测试,修改代码,提交修改) |
200 |
300 |
·Reporting |
·报告 |
100 |
140 |
· Test Report |
· 测试报告 |
60 |
50 |
· Size Measurement |
· 计算工做量 |
20 |
18 |
· Postmortem & Process Improvement Plan |
· 过后总结, 并提出过程改进计划 |
40 |
50 |
合计 |
|
2910 |
2316 |
3、解题思路:
1.整体思路:对题目进行需求分析与方法设计,该题目主要是由5个功能组成的[-c|-l|-w|-a|-s|-x],我的想法是创建类在类中对每个功能进行实现。最后经过WC的主类对全部的功能进行集成。并且对于难度实现进行分块,因此一期实现[-c|-l|-w]三个功能,由于功能的操做具备必定的类似性;二期逐步实现[-a][-s]功能;其次实现[-w]功能。在功能实现的同时对该功能进行功能测试,保证功能的准确性,在后期调用的过程当中保证返回的数据是正确的。减小查找错误位置跟错误返工的时间。
2.对于-c,-l,-w三个功能,便是处理文档路径输入后,读取文件,对文件的字符数行数单词数计数。经过readLine()方法读取文件每一行计算行数。对整个文档去除掉空格跟换行符则能够读出文档字符数。对于单词,对于连续一段字母组成则判断为一个单词,对文档用非字母进行分割,利用正则表达式则能够判断是不是连续一段字母,能够判断是不是单词,并对其计数。
3.对于-a功能则是利用正则表达式对读取的一行作出判断,在判断/**/组成的注释块时添加标记flag,当读出是/*作出标记,遇到*/时标记结束,在这段标记过程当中,注释行加1。
4.对于-s功能,则是将判断是不是有输入-s分开,只实现对文档的递归。在这里又创建了一个类判断后缀名是否一致,一致则对文档输出不然不输出。文档的接口为 文件类型的递归文件夹、String类型的含通配符的绝对路径,还有对输入的[-c|-l|-w|-a]的Boolean值。对文件路径调用listFiles()方法遍历文件,若是路径存在且符合则运行不然判断是不是文件夹,对文件夹进行递归调用。运行结果为输出为该通配符下的符合文件的[-c|-l|-w|-a]选择的方法。
5.对于-x功能,则创建一个类用于可视化。主要是能够选择文件,也是扩展了一下,-x功能能够对文件的[-c|-l|-w|-a]进行选择,也不是所有输出。并且-x对-s有覆盖功能,只要出现-x则-s功能不可用。在可视化类Visual中,添加一个文本框用于输出结果,一个按钮调用JFileChooser调用GUI界面,并保存选择文件的路径,对路径下的文件输出选择的结果到文本框中。
6.对全部的功能集成到WC类中,须要有一个方法对用户输入进行判断用户的输入格式,经过正则表达式判断格式,并将输入切割出来,将功能选择的切割出来,经过构造isChoose()方法判断用户选择了什么功能,将路径切割出来用path保存。用if……else if语句对-x和-s方法分类。-x则调用Visual类,-s则判断是否路径输入是通配符格式仍是非通配符格式。其他的输入则分为一类判断并调用相对应的方法。
4、设计与实现:
主类先对[-x][-s]判断,[-s]对输入的路径的多重判断,再调用CharCounter和LineCounter类返回各个结果。
5、测试:
一、输入wc.exe输出功能介绍
二、创建测试文档
三、手工一个测试空文件、一个字符文件、一个单词文件、一行数据文件、一个任意源文件
四、使用-s对输入绝对路径处理,而且与通配符比较结果
四、通配符与对行数计数,对整个盘符递归查询
五、使用-x实现基本的Windows GUI 程序操做,支持经过图形界面选取文件,支持经过图形界面展示文件的信息
在是不是单一测试仍是递归测试下结果都是同样的。
6、总结:
一开始以为按照模块化的开发方式能够比较好,由于将每一个功能分开来,对每个功能均可以创建一个main函数对该功能进行测试,不过最后的时候,在将全部功能集成到主函数上的时候就出现了很是混乱的状况,主要是对于模块化对接口与返回没有作好规范,结果致使调用得多了出现了很混乱的状况。因此后面在作代码优化的时候也是耗费了不少时间,不过每一个功能一开始就作大量的测试,因此集成在一块儿的时候去考虑最后结果的正确性所花费的时间比较少,不用花费不少时间去判断结果的正确性。可是此次做业中由于代码比较不规范形成了不少的时间上的浪费,可见还要学习的东西还有不少。