• 第4周小组作业:WordCount优化


    1 GitHub项目地址

    https://github.com/JarrySmith/WordCountPro

    2 基本任务:代码编写+单元测试

    2.1 PSP表格

    PSP2.1 PSP 阶段 预估耗时****(分钟) 实际耗时****(分钟)
    Planning 计划 10 15
    · Estimate · 估计这个任务需要多少时间 10 15
    Development 开发 205 315
    · Analysis · 需求分析 (包括学习新技术) 15 20
    · Design Spec · 生成设计文档 10 30
    · Design Review · 设计复审 (和同事审核设计文档) 15 30
    · Coding Standard · 代码规范 (为目前的开发制定合适的规范) 15 30
    · Design · 具体设计 15 10
    · Coding · 具体编码 60 60
    · Code Review · 代码复审 15 15
    · Test · 测试(自我测试,修改代码,提交修改) 60 120
    Reporting 报告 65 80
    · Test Report · 测试报告 45 60
    · Size Measurement · 计算工作量 10 10
    · Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 10 10
    合计 280 410

    2.2 接口的实现

    在包project中创建输入类InputProcess,其包含方法processInput(),该方法会抛出异常IOException和IllegalArgumentException,该方法输入参数为一个String[]类型字符串数组,返回值为一个String类型字符串。

    根据接口定义搭建框架如下:

    package project;
    public class InputProcess{
        public String processInput (String[] args) throws IOException,IllegalArgumentException{
            String filePath=null;
            //一系列判断args是否符合规范的条件判断语句
            ......;
            return filePath;
        }
    }
    

    processInput方法仅判断输入参数是否合法,判断传入的文件是否包含非法字符。

    通过if语句判断字符串数组args的个数是否为一,args[0]内是否存放合法的文件名,而后按字符读取文件内容,通过对每个字符的ASCII码进行处理来判断文件内的字符是否都是合法字符。

    若args不符合规定,或文件内包含非法字符,则抛出异常:

    ......
    throw new IllegalArguementException("参数个数只能为1");
    ......
    throw new IllegalArgumentException("待处理文件不是txt类型");
    ......
    throw new IllegalArgumentException("待处理文件内包含非法字符");
    ......
    

    2.3 测试用例设计

    本项目使用集成开发环境IntelliJ IDEA进行开发,使用junit4测试框架进行测试

    根据白盒测试的思想,尽量实现条件覆盖和语句覆盖,设计了编号为1、4、13、15的测试用例,根据黑盒测试的思想设计了其余的测试用例。

    因为被测试的模块较为简单,在对测试效率上可以不做特别要求。
    测试用例详见GitHub内的测试脚本和测试用例EXCEL表格。

    2.4 测试结果

    运行测试用例的结果如图所示:

    被测模块的质量较高,由测试结果可知测试效率较高,但没有检测所有非法字符输入情况,因此测试质量一般。

    3 扩展任务

    3.1 开发规范说明

    项目开发语言是Java,选定《阿里巴巴Java开发手册》作为开发规范。

    3.2 交叉代码评审

    评审同组成员徐江南的代码,除了发现一处变量命名不符合lowerCamelCase命名风格外,没有发现其它不符合规范的地方。

    3.3 静态代码扫描

    使用的扫描工具是“Alibaba Java Coding Guidelines”。
    该工具是一个idea插件,其GitHub项目地址:https://github.com/alibaba/p3c/tree/master/idea-plugin
    工具的下载地址:https://plugins.jetbrains.com/plugin/10046-alibaba-java-coding-guidelines

    使用扫描工具扫描个人全部代码后运行结果如图所示:

    依据扫描结果改进代码后再次运行单元测试,发现结果没有明显区别,可能是模块简单所致,但修改后的代码的可读性的确大为提高。

    3.4 组内代码分析

    使用扫描工具进行代码检测后发现小组代码存在多处不规范。这些不规范的地方虽然暂时不妨碍项目的正确运行,但它阻碍了其他开发人员阅读代码,让项目的维护变难了。修改过后的代码更符合规范,也更容易找出代码中隐藏的bug。

    4 高级任务:性能测试和优化

    4.1 测试数据集

    考虑到"WcPro.exe"的功能是统计词频,因此用一个12MB的txt文本作为输入,进行测试。

    4.2 同行评审过程

    由全体组员参与,组员徐江南主持,所有人一同评审小组的全部代码,经过讨论,一致认定在循环内定义变量会增加额外开销。另外,在读取txt内容时只会读取合法字符,对非法字符判断反而会影响效率。

    4.3 性能分析与优化

    将代码循环内定义的变量外提,删去对非法字符判断等工作后,程序效率大约提升了20%,与同行评审的结论一致。

    4.4 作业小结

    在软件开发之中,只有自始至终贯彻软件测试,才有可能在项目临近结尾时得到一个过得去的项目成果。

    5 小组贡献

    经讨论,小组贡献分为0.22

  • 相关阅读:
    DBCP连接池
    获取自动生成的主键
    将图片存储到数据库中
    java.nio.file.AccessDeniedException
    mysql8 :客户端连接caching-sha2-password问题
    理解 Android Build 系统(转载)
    C build error fix
    linux硬链接和软链接的区别
    du -sh
    linux proc maps文件分析
  • 原文地址:https://www.cnblogs.com/zhiwei97/p/8733872.html
Copyright © 2020-2023  润新知