第4周小组作业:WordCount优化

1 GitHub项目地址

https://github.com/JarrySmith/WordCountPro

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

2.1 PSP表格

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

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 测试结果

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

1341340-20180407171541083-587932153.png

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

3 扩展任务

3.1 开发规范说明

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

3.2 交叉代码评审

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

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

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

1341340-20180407171546111-1524921566.png

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

3.4 组内代码分析

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

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

4.1 测试数据集

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

4.2 同行评审过程

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

4.3 性能分析与优化

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

4.4 作业小结

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

5 小组贡献

经讨论,小组贡献分为0.22

转载于:https://www.cnblogs.com/zhiwei97/p/8733872.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值