WC个人项目(JAVA)

时间:2019-09-25
本文章向大家介绍WC个人项目(JAVA),主要包括WC个人项目(JAVA)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

WC个人项目(JAVA)

一、github地址

https://github.com/Mexinz/WC/tree/master

二、PSP表格

PSP2.1Personal Software Process Stages预估耗时(分钟)实际耗时(分钟)
Planning 计划 30 46
· Estimate · 估计这个任务需要多少时间 30 46
Development 开发 1100 1177
· Analysis · 需求分析 30 30
· Design Spec · 生成设计文档 30 45
· Design Review · 设计复审 30 40
· Coding Standard · 代码规范 20 20
· Design · 具体设计 60 60
· Coding · 具体编码 720 752
· Code Review · 代码复审 30 30
· Test · 测试(自我测试,修改代码,提交修改) 180 200
Reporting 报告 90 85
· Test Report · 测试报告 30 35
· Size Measurement · 计算工作量 20 15
· Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 40 35
合计   1220 1308

三、解题思路

  1. 文件IO操作

    这是一个处理文本的程序,需要用到Java的IO流和正则表达式,IO流分为字节流和字符流,我用到了FileInputStream和BufferedReader两个输入流(该程序不涉及写操作不需要输出流),因为解析的是代码文件,其中都是字符,所以用BufferedReader字符流进行操作会更加简单便捷

  2. 设计模式

    输入不同的参数需要对文件进行不同的解析,而这些文件解析对象都是相似的,因此使用简单工厂模式,当以后有改变时,修改工厂类方法即可。并且文件解析对象没有实例变量,在全局中每种文件解析对象也只需要一个,因此也使用了单例模式,减少内存的占用。

  3. 结果的封装

    无论是处理成功的结果还是处理失败的结果,为了便于上层统一处理,成功和失败的结果对象实现了一个统一的接口。将具体实现和业务逻辑分离开,增加程序的可扩展性。

  4. 错误类型

    因为用户总会有奇怪的输入,因此会出现不同的错误,为了程序的可读性和可维护性,将错误定义成枚举类

  5. 通配符?和*

    在递归处理中,将通配符转换成相应的正则表达式进行匹配。将上层的目录部分截取出来获取该目录下的所有文件,再通过正则表达式进行匹配筛选出正确的文件。

  6. 图形界面

    使用idea中的GUI Former拉出一个简单的界面,添加listener到按钮上,再将处理后的结果呈现在textArea上。

  7. 测试

    以前对待测试没有特别认真,就是简单用Junit测一下,这次上网查了下如何检测测试分支覆盖率,发现idea自带的插件结合Junit就可以,十分方便快捷。

四、设计实现过程

代码组成:

运行流程:

五、测试运行

测试文件包括空文件、只有一个{的文件、只有一对{}的文件、单个字符、一个单词、一对{}括住一个单词、一行代码、正常的java源代码、正常的源代码txt文件

  1. 测试非递归功能

    /**
    * 非递归
    */
    @Test
    public void testSingle() {
       Counter counter;
       for (String url : Constants.testFiles1) {
           for (String param : Constants.testParams) {
               counter = CounterFactory.getCounter(param);
               if (counter == null) {
                   System.out.println(ErrorEnum.WRONG_PARAM);
              } else {
                   counter.analyseFile(url).showResult();
              }
          }
      }
    }

    空文件

    单个字符

    单个单词

    单独一行

    正常的源代码文件

    参数错误

    文件不存在

  2. 测试递归功能

    /**
    * 递归
    */
    @Test
    public void testRecursion() {
       RecursionCounter recursionCounter;
       List<Result> resultList;
       for (String url : Constants.testFiles2) {
           for (String param : Constants.testParams) {
               recursionCounter = new RecursionCounter(CounterFactory.getCounter(param));
               resultList = recursionCounter.getResultList(url);
               for (Result result : resultList) {
                   result.showResult();
              }
          }
      }
    }

    路径下有多个文件

    配合通配符(url为 testFiles/?ord*.java):

     图形化界面:

     经检查,运行结果均与预期结果一致

     测试分支覆盖率:

六、项目总结

本次WC项目使用Java编程,Maven作项目依赖管理,Junit框架作测试,idea自带插件作测试分支覆盖率检测插件。在项目的开发过程中,我意识到一个好的项目架构对于后期开发的重要性。前期的准备,需求分析,项目框架的搭建,都比真正写业务代码重要的多。在前期多运用面向对象的方法去写出可维护性和可拓展性高的代码,意义更为重大。

原文地址:https://www.cnblogs.com/mexinz/p/11587863.html