软测第4周小组做业:WordCount Pro

小组github项目地址:https://github.com/SSS-SY/wordcount-proc++

基础功能:

一. PSP表格

PSP2.1git

PSP阶段github

预估耗时正则表达式

(分钟)多线程

实际耗时架构

(分钟)框架

Planningide

计划函数

 20工具

 15

· Estimate

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

 30

 15

Development

开发

 360

 605

· Analysis

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

60

80

· Design Spec

· 生成设计文档

 0

5

· Design Review

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

 0

 0

· Coding Standard

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

 10

 10

· Design

· 具体设计

 20

 30

· Coding

· 具体编码

 180

 360

· Code Review

· 代码复审

 40

 60

· Test

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

 60

 100

Reporting

报告

 60

 85

· Test Report

· 测试报告

 40

 60

· Size Measurement

· 计算工做量

 10

 5

· Postmortem & Process Improvement Plan

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

 10

 20

 

合计

 440

 705

二.代码实现

在讨论事后,咱们将任务划分为四个模块,具体模块和分工以下:

1. 词频统计

功能描述:统计各个单词的出现次数

接口描述:输入一个字符串,输出一个map结构

负责该模块的小组成员:庹舒月

2. 词频排序

功能描述:将统计结果进行排序

接口描述:输入一个map结构,输出一个vector结构

负责该模块的小组成员:俞亮

3. 输出模块、构造和析构函数、文件长度函数

功能描述:

(1). 输出模块:输出结果到result.txt文件

(2). 构造和析构函数:类的构造和析构函数

(3). 文件长度函数:获取输入文件长度

接口描述:

(1). 输出模块:输入一个vector结构,输出一个result.txt文件

(2). 构造和析构函数: 无

(3). 文件长度函数:输出文件长度

负责该模块的小组成员:辜之皓

4. 输入模块、主函数和架构设计

功能描述:

(1). 输入模块:读取文本为一个字符串对象

(2). 主函数:调用其余小组成员的接口,是主要逻辑

接口描述:

(1). 输入模块:输出一个字符串对象

(2). 主函数: 无

负责该模块的小组成员:唐明华

实现描述 

我负责词频统计的模块

在通过考虑以后,为了提升开发的效率和结果的准确性,我最终决定使用正则表达式来进行单词的分割处理

在查阅了C++的正则表达式使用方法以后,我试了不少个正则表达式,最终选定了最为正确的一个

具体实现的代码以下:

WC::WordMap word_count(string buff) {
  WC::WordMap smap;
  regex rgx("[A-Za-z]+([A-Za-z-]?[A-Za-z]+)*");
  sregex_token_iterator iter(buff.begin(), buff.end(), rgx);
  sregex_token_iterator end;
  for (; iter != end; ++iter) smap[*iter]++;

  return smap;
}

三.测试用例

咱们决定使用google test框架进行测试

我设计了20个测试用例,对词频统计的准确性进行了全方位的测试

首先测试了统计多个、重复单词的基本功能

再测试了分割数字、特殊字符的功能

最后重点测试了处理'-'字符的部分,对"a-", "-a", "a-b"等等状况进行了测试,保证可以正确的处理'-'字符的影响

测试用例清单以下:

单元测试运行截图:

测试质量和评价:

测试用例把可能的状况都基本覆盖了

在通过屡次修改以后,经过了全部的测试用例

四. 小组贡献

通过讨论,各个小组成员根据本身的参与状况、代码质量和代码量得出了以下评分:

庹舒月:   0.28   

辜之皓:   0.26

唐明华:   0.23

俞亮:   0.23

扩展任务

一.代码规范

由于咱们选择了C++语言进行开发,因此参考了google style guide

我仔细地阅读了google style guide,在include头文件顺序方面,我以前一直都没有一个很好的指导规范,在阅读了这个文档以后,了解到应以本文件对应头文件、C系统文件、C++系统文件、其余库的.h文件、本项目内的.h文件的顺序来include

而关于类的继承方面这一块我以前都不怎么熟悉,在阅读以后了解到使用组合经常比使用继承更合理. 若是使用继承的话, 定义为 public 继承的准则

这些东西对我往后编写C++代码很是有指导意义

二.选择静态测试工具

使用了google官方提供的cpplint工具进行测试

下载连接:https://github.com/cpplint/cpplint

三.同行评审

通过必定的讨论,咱们决定唐明华和庹舒月之间进行代码互评,辜之皓和俞亮之间进行代码互评

仔细审阅了唐明华的代码以后,由于小组成员都统一配置了代码自动格式化工具,因此在代码风格方面没有什么问题

在设计思路方面,都严格按照了规范来处理

使用工具对代码进行扫描,输出的结果以下:

从新运行单元测试,结果如图:

 

四.问题总结和反思

使用工具大大提升了咱们在开发中在代码规范方面的效率,不须要特别地去注意像大括号换不换行这种问题

测试框架极大地简化了单元测试的工做

阅读像google style guide这样的规范文档对代码的编写有极大的提高

 

 
 

 

高级任务

一.测试数据

咱们找了莎士比亚全集的英文版txt文档,有5Mb大小

使用这个数据,咱们测试后发现大体须要3秒的时间才能处理完整个文件,运行截图以下:

二.组内评审

针对可能影响程序性能(制约因素),咱们小组进行了组内评审,讨论。

主持:

庹舒月

评审:

唐明华、辜之皓、俞亮

评审主题:

1.影响程序性能的主要因素

2.有何建议

讨论结果:

咱们讨论以后认为,主要的性能瓶颈在于须要读取整个文件以后再开始统计,由于磁盘读写的速度很是慢,致使了整个程序运行效率低

解决方案:

使用多线程,一边读取数据,一边开始统计读取部分的数据,以后再将各个部分的统计结果合并,能够大大提升性能

三.修改以后的结果

修改以后程序性能有了成倍的提升,运行时间大概在0.7秒左右,提升了大约4倍的性能

运行截图以下:

四.心得体会

本次做业让我大大认识到了软件测试和实际开发的密不可分的关系

参考连接:

1. c++参考手册:

http://zh.cppreference.com/

2. goole style guide:

https://github.com/google/styleguide/

  1. di2/(优先位置, 详情以下)
  2. C 系统文件
  3. C++ 系统文件
  4. 其余库的 .h 文件
  5. 本项目内 .h 文件
相关文章
相关标签/搜索