WordCount优化

(1) Github地址: https://github.com/LongtermPartner/ExtendWordCount

(2) PSP表格:

 

PSP2.1

PSP阶段

预估耗时

(分钟)

实际耗时

(分钟)

Planning

计划

5  5

· Estimate

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

 5

Development

开发

330  370

· Analysis

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

 30  40

· Design Spec

· 生成设计文档

 10  10

· Design Review

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

 10  10

· Coding Standard

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

 30  30

· Design

· 具体设计

 20  30

· Coding

· 具体编码

 180  200

· Code Review

· 代码复审

 20  20

· Test

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

30   30

Reporting

报告

 50  30

· Test Report

· 测试报告

 20 20 

· Size Measurement

· 计算工作量

 10  0

· Postmortem & Process Improvement Plan

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

 20  10
 

合计

 385

 405

(3) 对接口的实现:

我们小组搭建的框架是:将整个程序分为四个模块:Input,Output,CountAndSort,Main,由相应组员完成对应负责的模块。考虑到模块间的耦合性,为了便于各个模块间的单元测试,主函数只有三行关键代码,即输入模块调用,返回值文件传给主模块计数并排序模块,主功能模块将处理好的单词排序封装成由Map<String,Integer>集合组成的Arraylist数组,并传给输出模块,由输出模块写入到输出文本。输出模块只输出前100个高频度单词,100以后不输出。

我负责的是输入模块。该模块对输入进行有效性校验,识别和处理无效输入,并针对有效输入,从中提取所需数据。我的思路是先对输入参数的个数进行判断,再判断文件的后缀名。花费时间较多的部分是根据文件内容对文件进行初步筛选。刚开始我的想法是把文件分成字符串读取,然后用正则表达式判断文件内容是否符合要求。后来发现没办法把符号加进去,就把文件分成字符读取,然后用if语句判断。但是这样if语句太长了,而且不知道效率如何。之后在网上发现了一种很好的办法,先定义一个字符串,内容就是所有符合要求的字符,然后对每个输入的字符,判断字符串是否包含它,如果不包含就抛出输入异常。虽然最后没有用到

具体函数如下:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FilenameFilter;
import java.io.IOException;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;

//输入功能    对文件名是否存在判断,并将文件传给计数排序模块函数
public class Input {

    //输入情况有一个参数或为0个和多个参数情况
    public  static File input(String[] args) {
            File inputFile=null;
        String filePath = null;
        String fileP = null;
        String fileName=null;
       //一个参数    -x和文件名filename两种情况
        if (args.length == 1) {
            if(args[0].equals("-x")){
                //图形界面选择文件
                JFileChooser jfc=new JFileChooser();
                jfc.setDialogTitle("请选择一个文件");
                jfc.showOpenDialog(null);
                jfc.setVisible(true);
                //得到用户选择的文件路径
                if(jfc.getSelectedFile()!=null){
                    fileName=jfc.getSelectedFile().getAbsolutePath();
                    inputFile=new File(fileName);
                    return inputFile;
                }
                else{
                    JOptionPane.showMessageDialog(null, "请选择文件"," ", JOptionPane.INFORMATION_MESSAGE); 
                    System.exit(0);
                }
            }
            else{
                filePath = args[0];
                File file = new File(filePath);
                fileName = file.getName();
                String suffix = fileName.substring(fileName.lastIndexOf(".") + 1);
                if (suffix.equals("txt")) {
                    fileP = filePath;
                } else {
                    JOptionPane.showMessageDialog(null, "文件名格式不对(仅支持txt格式)"," ", JOptionPane.INFORMATION_MESSAGE); 
                    System.exit(0);
                    throw new IllegalArgumentException();
                }
                inputFile = new File(fileName);
              }
        }
        //其他非一个参数情况    0个和多个参数非法输入    弹出输入格式错误对话框
        else{
              JOptionPane.showMessageDialog(null, "输入格式有误(仅支持一个输入参数)", " ", JOptionPane.INFORMATION_MESSAGE); 
             System.exit(0);
        }
        return inputFile;
    }
}

 

 (4)测试用例的设计:

测试主要从输入文件的类型、是否使用图形界面、不同功能的使用等角度进行。

 (5)单元测试的运行截图:

(6)小组贡献分:0.21

 

扩展部分:


 

(1)邹欣老师博客:现代软件工程讲义 代码规范与代码复审

  http://www.cnblogs.com/xinz/archive/2011/11/20/2255971.html

(2)使用该规范分析了学号后5位为17068的代码

问题:有的变量命名不够规范,注释太少

优点:代码简洁,结构清晰

(3)静态代码检查工具:

我们小组选择的静态代码检查工具为:PMD

工具下载地址:  http://pmd.sourceforge.net/eclipse/

(4)结果截图:

问题如下:

1.数据流异常分析

2.变量名字太短,如fW, bw。

3.可定义为final的变量没有定义为final

4.在if...else...语句中没有合理使用大括号。

5.在方法体内对方法参数重新赋值

6.无意义的引用。

改进如下:

1.将fW, bw定义为final类型

2.将变量名称具体化

3.在if...else...语句中合理使用大括号

4.避免在方法体内对方法参数重新赋值,可以将方法参数的值赋给另一个局部变量

5.去掉无意义的引用

(5)小组中代码存在的问题主要是变量命名、定义和对大括号的使用不够规范

 

高级部分:

 


 

 

(1)测试数据集的设计思路为选取文本内容较多的txt文件。本人具体选择的是某英文小说的三个章节,共4897个字。

 

(2)处理时长:

经过多次测试,处理此测试数据集的时间在65ms~75ms左右。

 

(3)每位小组成员都作为作者、讲解员、评审员、记录员等身份进行了评审。

经过评审,我们得出结论:影响程序性能的主要因素是计数和排序模块的算法,为计数时对单词的判定方法以及排序算法的快慢。

 

(4)通过测试,我们发现制约程序性能指标的主要因素是计数和排序两方面,和同行评审结果相似。

 

(5)在本次作业中,软件开发是第一阶段,二三阶段均是通过测试来优化程序,提升质量。软件测试可以发现程序中存在的问题和缺陷,需要贯穿整个过程。通过使用各种测试方法进行测试和优化可以有效完善程序,从而提高程序质量。

 

 

 

 

posted @ 2018-04-08 13:44  mengue  阅读(241)  评论(2编辑  收藏  举报