WordCount优化

WordCount_Update

github项目地址

https://github.com/BillCYJ/WordCountPro

代码用的是姜骁腾的代码,测试用例是我自己写的,他的项目地址:https://github.com/skz12345/wcPro

PSP表格

PSP2.1 PSP阶段 预估耗时(小时) 实际耗时(小时)
 Planning 计划0.5 0.5 
 Estimate 估计任务需要多少时间00
 Development 开发
 Analysis 需求分析00
 Design Spec 生成设计文档00
 Design Review 设计复审00
 Coding Standard 代码规范 0 0
 Design 具体设计00
Coding 具体编码00
 Code Review 代码复审00
 Test 测试21
 Reporting 报告12
 Test Report 测试报告0.51
 Size Measurement 计算工作量0.50.5
 Postmortem 总结0.50.5
  合计55.5

一、基本任务

1.接口实现:

在该项目中,我负责输入控制模块,也就是先从参数中获取文件路径,再读取文件内容,并且需要对输入进行有效性检查。输入检查包括:判断输入文件是不是空文件、输入是不是符合输入要求、输入格式是否正确等多方面。

openFileAndPull 函数的功能是:处理输入。先判断输入文件是不是空文件,再判断文件格式是否正确,然后按行读取字符串,在每行字符串末尾加上一个换行符,全部存在result里面,每次都涉及到result这个字符串的拼接(字符串拼接有一个特别需要优化的地方,该文章在性能优化部分会详细说明,现在可以看我写的一篇博客,先了解一下:字符串拼接的性能分析),最后返回整个字符串result。

部分代码如下:(用的是姜骁腾的代码)

    public String openFileAndPull ()
      {
          if((this.filepath).length()==0)//判断输入是否为空,是则抛出异常
              throw new IllegalArgumentException("Please input the filename!");
          File file = new File(filepath);  
          if(!file.getName().endsWith(".txt"))//判断是否文件后缀为.txt,否则抛出异常
              throw new IllegalArgumentException("Error file format!");
          try{
              BufferedReader reader=null;
              StringBuilder strings=new StringBuilder();
              reader=new BufferedReader(new FileReader(file));
              String readline="";
            while((readline=reader.readLine())!=null)//按行读取文件内容
            {
                strings.append(readline+"\n");//每行末尾添加一个换行符
                readline=null;
            }
            this.result=strings.toString();//将结果存入result
            
            if(isContainChinese(result))//调用方法判断result中是否有中文字符
            {
                System.out.println("(文本中有中文字符)");
            }
            reader.close();
      }
        
          catch (Exception e) {
            
              System.out.println("Error path name!");
          }
          return result;
      }
2.测试用例设计:

总共设计了20个测试用例,白盒测试和黑盒测试这两种方法都用到了。

白盒测试:我使用了语句覆盖指标设计测试用例,还覆盖了if分支。

黑盒测试:对多种输入情况进行了测试,比如:判断输入文件是不是空文件、输入是不是符合输入要求、输入格式是否正确、输入有无中文文字等方面。

部分测试用例如下表:

 

Test Case ID 测试用例编号Test Item 测试项(即功能模块或函数)Test Case Title 测试用例标题

重要级别

预置条件

Input输入情况                   Procedure 操作步骤Output预期结果Output实际结果

Status是否通过计划

Remark 备注(在此描述使用的测试方法)
2_1输入控制模块空文件测试MNULL
ERROR
ERROR
白盒测试
2_2输入控制模块无后缀测试Mtest
ERROR
ERROR
白盒测试
2_3输入控制模块文件名有中文测试L我.txt
ERROR
ERROR
白盒测试
2_4输入控制模块输入文件名错误测试Htt.txt
白盒测试
2_5输入控制模块文件后缀名错误测试Htest.c
ERROR
ERROR
黑盒测试
2_6输入控制模块文件后缀名错误测试Htest.cpp
ERROR
ERROR
黑盒测试
2_7输入控制模块文件后缀名错误测试Htest.java 
ERROR
ERROR
黑盒测试
2_8输入控制模块文件后缀名错误测试Htest.html 
ERROR
ERROR
黑盒测试
2_9输入控制模块文件后缀名错误测试Htest.md 
ERROR
ERROR
黑盒测试
2_10输入控制模块文件后缀名错误测试Htest.js
ERROR
ERROR
黑盒测试
2_11输入控制模块输入过多测试Mtest1.txt test1.txt
ERROR
ERROR
黑盒测试
2_12输入控制模块正确输入测试Htest2.txt 无 
"Let's go"+"\n"
"Let's go"
黑盒测试
2_13输入控制模块正确输入测试无 test3.txt 无 
"Let's\ngo"+"\n"
"Let's go"+"\n"
黑盒测试
2_14输入控制模块正确输入测试无 test4.txt 无 

   "abc-cba\a-c"+"\n"

   "abc-cba\a-c"+"\n"黑盒测试
2_15输入控制模块正确输入测试无 test5.txt 无 

   "好不好"+"\n"

   "好不好"+"\n"黑盒测试
2_16输入控制模块正确输入测试无 test6.txt 无 

   "dasd你"+"\n"

   "dasd你"+"\n"黑盒测试
2_17输入控制模块文件中是否有汉字测试M无 test7.txt无  
True
True
是 黑盒测试 
2_18 输入控制模块文件中是否有汉字测试无  test8.txt 无  
Flase
Flase
是 黑盒测试 
2_19输入控制模块输入只有汉字测试M无 test9.txt无 
ERROR
ERROR
黑盒测试
2_20输入控制模块文件中有很多字符串M无 test10.txt无    正确输出   正确输出黑盒测试
3.单元测试运行结果:

设计的测试用例全部通过了测试,运行时间极短,符合要求。

测试用例基本覆盖了所有可能出现的情况,并覆盖了所有分支。

测试结果如图:

 

4.小组贡献率:

经小组成员讨论,我做的输入部分在本项目中的小组贡献率为0.26。

 

二、扩展任务

1.开发规范:

使用《阿里巴巴 Java 开发手册》作为代码规范。例如:如果该函数实现了非常复杂的功能导致函数过长,这样会使得代码难以理解阅读,不利于阅读以及修改。所以,尽量将函数体限制在一个屏幕的大小。在邹欣老师的“现代软件工程讲义3 代码规范与代码复审”中,知道了代码需要遵循一定的风格规范和设计规范,代码风格应该力求简明易读,在一些细节方面需要养成习惯。

2.静态代码检查:

选择的工具:Alibaba Java Coding Guidelines

下载地址:https://github.com/alibaba/p3c

3.组员代码评价:

我负责检查谭淼的代码,可以看出,他的编码习惯还是比较好的,存在的问题就是命名很乱,很难理解他定义的变量的意思;另外,注释较少,应在关键的地方增加注释!这也是我们小组存在的最大的问题。

三、高级任务

1.测试数据集

使用大文件的数据集来对本程序进行压力测试。我使用了一本英文的电子书作为测试集的来源,分别构造出了大小为100K,1M,4M,16M的数据集,并记录运行时间。

2.同行评审

本次评审的结论:

1.代码注释较少

2.代码冗余严重

3.用str1+=str2这种方法的字符串拼接会生成额外的对象,消耗大量性能和内存

3.性能优化

1.字符串拼接,别用str1+=str2

2.用冒泡排序、快速排序、堆排序,需要根据输入的数据量、内存的限制、速度的限制等多方面综合考虑

4.小组分工及所输出的贡献

陈云佳:输入模块   0.26

谭 淼:核心模块   0.26

黄成宇:核心模块   0.24

赖御纶:输出模块   0.24

参考

http://www.cnblogs.com/hayitutu/

https://blog.csdn.net/billcyj/article/details/79777701

转载于:https://www.cnblogs.com/billcyj/p/8747076.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值