软件质量与测试 第4周个人作业

Posted Heartbreaker

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了软件质量与测试 第4周个人作业相关的知识,希望对你有一定的参考价值。

 

一、项目地址

  https://github.com/changjiang666/WcPro

 

二、PSP

三、设计思路

  我负责main函数的编写和print输出模块的编写。

  1.main函数

int
main(/*int argc, char **argv*/)
{
    char *textBuf = readfile("test.txt"); // 读取输入文件
    WcPro wcpro(textBuf);// 将输入文件放入缓冲区
    wcpro.processText();// 分析文本,各种统计功能的实现
    wcpro.print();// 打印输出统计结果
    return 0;
}

 

  main函数由于是高度封装的函数的集合,因此特别简短,逻辑十分清晰。readfile函数由杨松(17166)同学编写,WcPro类以及wcpro函数,还有processText函数都由组长刘长江(17167)编写和实现,我(17171)负责了print函数的实现,将这些排列起来就构成了完整的main函数,整个程序的功能就在这些函数中实现。

  

  2.print函数

 

void WcPro::print()
{
    freopen("result.txt", "w", stdout);// 输出重定向到result.txt文件
    for(int i = 0; i != this->word_count_vec.size() && i < OUTPUT_SIZE; ++i)
        cout << word_count_vec[i].first << " " << word_count_vec[i].second << endl;
}

 

 

 

  print函数遍历分析的结果数据,再逐一打印输出,将输出流重定向到result.txt。

四、测试设计过程

  由于main函数已被高度封装,因此程序主要是对自定义函数模块的测试。对于print函数,它所完成任务的关键步骤是实现输出的重定向——即将本应打印在控制台的输出流打印到result.txt文件中。因此测试这一函数的思路应该是比较正常的cmd窗口输出和重定向后result.txt文件内容是否一致。

  为了还原成原先的cmd控制台输出,修改print函数,注释其重定向语句:

void WcPro::print()
{
    //freopen("result.txt", "w", stdout);
    for(int i = 0; i != this->word_count_vec.size() && i < OUTPUT_SIZE; ++i)
        cout << word_count_vec[i].first << " " << word_count_vec[i].second << endl;
}

 

  再次编译产生用于比较的WcProCMD.exe。

   除了要比较窗口输出和文件输出是否一致外,还要比较对于各种字符,包括各种不常见字符,函数是否能正确输出。因此测试用例主要针对输入文本,改变其中会被统计的单词,要能覆盖所有需求中提到的字符。

   测试用例举例: 1.文本中全部是常见字符;

          2.文本中全部是常见字符和非常见字符;

          3.文本中是常见字符和少量英文字母;

             4.文本中全部是数字;

          5.文本中是数字和少量英文字母;

                   6.文本中包含Let\'s和Let\'\'s;

         ······

 

 

五、测试运行和评价

  对比CMD输出和result.txt输出,完全一致:

 

  并且向已有的result.txt写入新结果时,之前的旧数据会被覆盖,符合使用场景。

    总结如下:

  

  评价:采用黑盒测试的方法,但由于print函数没有判定节点和分支,所以也能达到白盒测试的要求。

 

 

五、扩展任务

  通过阅读《C++ Primer》,并且和组内同学交流,了解了一些代码规范,大有收获:

 

     * 缩进:4空格

 

     * 行宽:100字符

 

     * 括号:表明逻辑优先级

 

     * 断行与空白{}行:程序模块{}分割,{}各占单行

 

     * 分行:一句一行,变量定义各自成行

 

      * 命名:“匈牙利命名法”,从命名中可以直接理解该命名的含义

 

        * 下划线:作用域_名称

 

        * 书写:所有的类型/类/函数名都用Pascal形式,所有的变量都用Camel形式。

 

        *类/类型/变量:名词或组合名词,如Member、ProductInfo等。

 

        *函数则用动词或动宾组合词来表示,如get/set; RenderPage()。

 

         * 注释:注释代码都采用ASCII码,不要使用中文等,提高可移植性

 

        注明做什么,为什么,不需要解释怎么做

 

        程序开头注明变量含义

 

        设置字体风格

 

 

  采用了Visual Studio自带的cppcheck静态测试工具对词频计数模块进行了代码的静态测试:

 

问题1:(style) Class \'WcPro\' has a constructor with 1 argument that is not explicit.

风格警告 :风格有关问题的代码清理(未使用的函数、冗余代码、常量性等等)

该问题是说构造函数参数不明确。这是代码中构造函数没有设置默认输入所导致的,在参数列表加入默认值即可。

 

问题2:(information) Cppcheck cannot find all the include files (use --check-config for details)

信息消息 :配置问题,建议在配置期间仅启用这些。

    该问题表示没有找到所有的include文件。经小组讨论认为是cppcheck自己的配置问题。

 

  整体小组代码质量比较满意,虽然只有三人但我们明确分工,积极学习,最后也能完成其他四人组的工作。

 

 

六、高级任务

最后组长(17167)把3个人的代码做了集成,拿5M的英语名著做了性能测试,包括I/O时间,总共花了不到3s。 周末全组做了评审,组长讲了代码的主干,我们对一些可能出错的部分提出了质疑, 组长针对我们的疑问做了解释。组长对代码的规范性提前做了要求,比如变量的命名,函数书写的格式,函数名的规范, 最后大家的代码格式基本一致,就像是一个人写的,说明了磨刀不误砍柴工。

这次小组作业让我觉得团队合作的重要性,学会怎么凝聚大家的力量。还有代码开发与软件测试并行,确保每一个模块没有错误的时候再往下面进行。在写代码的时候,一定要多注释,这样不管自己维护还是别人阅读,都会减少不少麻烦。

 

根据组内协商,我个人的小组贡献为30%。

 

以上是关于软件质量与测试 第4周个人作业的主要内容,如果未能解决你的问题,请参考以下文章

软件质量与测试第4周小组作业:WordCountPro

软件质量与测试第4周小组作业:WordCount优化

软件质量保证与测试第五周作业

软件质量与测试第二周作业 WordCount

软件测试第二周个人作业--wordcount

软件测试第二周个人作业WordCount程序实现