第4周小组作业:WordCount优化

  • 1.基本任务  


  • 项目地址

  https://github.com/JarrySmith/WordCountPro

  • PSP表格

  • PSP2.1表格

    PSP2.1

    PSP阶段

    预估耗时

    (分钟)

    实际耗时

    (分钟)

    Planning

    计划

     30

    35 

    · Estimate

    · 估计这个任务需要多少时间

     30

    35 

    Development

    开发

     265

     340

    · Analysis

    · 需求分析 (包括学习新技术)

     40

    60 

    · Design Spec

    · 生成设计文档

     25

    40 

    · Design Review

    · 设计复审 (和同事审核设计文档)

     15

    25 

    · Coding Standard

    · 代码规范 (为目前的开发制定合适的规范)

     15

    25 

    · Design

    · 具体设计

     20

    25 

    · Coding

    · 具体编码

     90

    80 

    · Code Review

    · 代码复审

     20

    25 

    · Test

    · 测试(自我测试,修改代码,提交修改)

    40 

    60 

    Reporting

    报告

     45

    80 

    · Test Report

    · 测试报告

     15

    30 

    · Size Measurement

    · 计算工作量

     10

    20 

    · Postmortem & Process Improvement Plan

    · 事后总结, 并提出过程改进计划

     20

    30 

    合计

     340

     435

  • 接口实现

  我做的工作是:

  1.整理任务需求,然后按照需求划分所需要的模块

  2.并规定要模块与模块之间的接口,提供各个模块实现的大致思路,所需用到的变量类型,方法等等

  具体可以参见 项目框架与分工文件 该文件是由我独立完成的

       我们这次总共划分了三个模块:

  1.输入处理模块 主要负责对输入进行有效性校验,识别和处理无效输入,并从中提取所需数据

  2.核心处理模块 对输入进行处理,如单词词频统计,排序等,完成对应业务需求。

  3.输出处理模块 对结果以合理方式输出,将单词词频排序的结果输出到文件。

  4.主调用模块 接受命令行数据,调用各个模块,完成业务功能

  • 测试用例设计

  输入:考虑到输入的参数有多种情况:1.没有参数 2.有一个参数但是文本类型不是txt 3.有一个参数且是.txt文本 4.有多个参数输入

  字符统计和处理:根据老师所罗列的规则设计各种包含- ,'+字母等类型的文本进行测试,看程序能否正常运行

  输出 :看输出的词频能否先按照词频顺序再按照字母表顺序排序,设计有不同词频的单词和有相同词频但是首字母不同的文本

  • 单元测试运行截图

  • 出现感叹号是因为第一个是正确输入,所以没有异常抛出,后面三个都有异常
  • 2.扩展任务


  • 编程规范 

  《阿里巴巴Java开发手册》中指出:为了达到代码自解释的目标,任何自定义编程元素在命名时,使用尽量完整的单词组合来表达其意
  说明:如果元素命名不清晰,我们需要花额外的时间去理解函数的功能以及整体的框架逻辑

  根据我的实践体会举例如下:在Main函数中设计传递参数的变量如存储词频信息的变量时用wordsFrequency表示,而不是用简写的WF,容易让人不明白变量的作用.

  选取《阿里巴巴Java开发手册》第一章的命名风格规范作为评价规范

  分析了学号为17092的同学的代码,他的代码有以下几个方面的规范:

  1.变量和方法的命名都是采用lowerCamelCase 风格,大部分遵守驼峰规则

  2.类名使用 UpperCamelCase 风格 

  3.使用了尽量完整的单词组合来表达其意 

  当然在某些方面也有不足,如常量没有用大写来表示等

  • 静态代码检查工具

  名称:Alibaba Java Coding Guidelines

  下载地址:https://github.com/alibaba/p3c/tree/master/idea-plugin

  • 扫描结果

  代码存在的问题:

  1.变量名没有符合lowerCamelCase命名风格

  2.包名没有用小写

  3.没有添加作者信息

  4.类名没有使用 UpperCamelCase风格

  改进方法:

  1.使用lowerCamelCase命名风格重新命名变量  2.包名使用小写形式 3. 添加作者信息 4.类名改为UpperCamelCase风格的WcPro

  • 小组代码问题:

1.一行的if/else/forwhile等循环条件判断没有使用大括号

2.出现了未经定义的常量

3.使用了行尾注释

4.在条件判断中执行了复杂的语句

5.集合初始化时没有指定大小

针对以上问题,分别将项目中的不符合规范的地方进行了修改

  • 3.高级任务


     

 

  • 测试集设计思路

  • 程序最耗时的地方在于对文本进行判断处理,因此如果需要加大程序的压力,需要让程序尽量覆盖每一个判断节点.根据此思路,测试数据集应该多包含覆盖判断节点的字符.同时文本的数据量也要比较大,我们的测试集大小为12.54M
  • 程序性能指标:在程序读取txt文件时开始计时,一直到程序将所有结果输出到结果文件时结束的时间

  • 同行评审的过程

   参加的人:小组成员

   主持人:徐江南

   评审人:封俊羽,李民聪,周志为

   提出意见:1.程序在循环中存在重复的变量定义和空间开辟,建议将变量提出循环,提高速度  2.判断处理可以进行优化

  • 实际测试结论

  • 优化前:
  • 优化后:
  • 优化设计思路

  • 通过将循环中重复定义的变量外提,优化判断处理,就能够提高程序将近20%的性能
  • 从开发->测试->提高质量

  • 在任何时候,我们在最初所定的开发计划,以及程序设计都不可能是一个比较好的状态,需要通过单元测试,黑盒白盒测试,集成测试,压力测试等等不同的测试方法去对程序进行测试以发现最开始程序设计时的不足与漏洞,及时更新迭代.通过不断地测试,我们程序的质量也在不断提高,效率越来越高.测试的过程其实也是一个提高自己的过程,通过测试你能够发现自己最初设计的不足,汲取经验,在下次进行开发时能够设计和写出更高效的代码和程序

小组贡献分 0.33

原文地址:https://www.cnblogs.com/Jarry-smith/p/8679652.html