个人第三次软件工程作业-功能测试

第一部分

—具体要求:要求包括: (1)bug标题,(2)bug内容,含测试环境和准备工作、测试的步骤、运行结果、期待的结果、运行结果与期待结果间的差异, (3)佐证材料,至少包括运行截图、引用作业要求 (wf spec)中的条款。

被测试作者:高远博同学

git地址:https://coding.net/u/Rainbows/p/wc/git

标题:没有区分大小写

环境:win10,控制台输入命令

重现步骤:

  1.exe程序根目录中shift右键空白处启动控制台

  2.输入   wf -s test.txt  

  3.运行结果:没有统一小写

  截图如下:

   预期结果:

  

标题:输出格式不正确

环境:win10,控制台输入命令,codeblocks

重现步骤:

  1.exe程序根目录中shift右键空白处启动控制台

  2.输入   wf -s war_and_peace.txt  

  3.运行结果:输出格式不对

  截图如下:

  预期结果:

 

  总结:两次输出格式都不符合要求,不过这个问题是小问题,易于修改,程序的主要功能函数还是符合预期的。

第二部分

—具体要求: 记录所有为你的代码找到的bug,合并相同的bug,亲自重现bug现象,发布bug报告。

1.被测试作者:自己

标题:输入不符合标准

环境:win10,控制台输入命令

重现步骤:

  1.exe程序根目录中shift右键空白处启动控制台

  2.输入   wf gone_with_the_wand

  3.运行结果:无法正常打开

 2.被测试作者:自己

标题:输出不符合标准

环境:win10,控制台输入命令

重现步骤:

  1.exe程序根目录中shift右键空白处启动控制台

  2.输入   wf Gone_with_the_wind

  3.运行结果:输出结果明显单词的个数不正确

  截图如下:

3.被测试作者:自己

标题:输出不符合标准

环境:win10,控制台输入命令

重现步骤:

  1.exe程序根目录中shift右键空白处启动控制台

  2.输入   wf Gone_with_the_wind

  3.运行结果:输出结果有个别单词划分错误

  截图如下:

4.被测试作者:自己

标题:输出不符合标准

环境:win10,控制台输入命令

重现步骤:

  1.exe程序根目录中shift右键空白处启动控制台

  2.输入   wf -s < war_and_peace.txt

  3.运行结果:输出结果为全部单词而不是要求的前十

  截图如下:

5.被测试作者:自己

标题:编译错误

环境:win10,vs2013

重现步骤:

  在vs2013调试代码出现bug

  截图如下

 

第三部分

—具体要求: 修改bug。根据自己和其他同学提交的bug报告,修改自己代码的bug,或clone其他任意同学的代码,另建git,在此git中修改这位同学的bug。

对应第二部分的五个bug:

 

1.按照要求输入无法正常读取

  这个原因是我在这周优化代码时发现到的问题。在我最开始的代码中,为了图方便把读取文件的目录放在了“G://”下。这样设置很容易出现错误,因为考虑到不是每个人的盘符都能到G盘。而且我看到很多同学的程序把路径都设置成程序的根目录下,所以我也把我的程序改成这样。

  改动的部分代码如下:

  

1             char const *a = argv[i];
2             char const *b = ".txt";
3             std::string const& cc = std::string(a) + std::string(b);
4             char const *c = cc.c_str();
5             fin.open(c);
部分代码,合并字符串,不再是g://下

2.输出结果单词的个数不正确

  这个bug也是在这周才发现,因为在上周测试的时候,因为单篇文章的单词书很多,所以很难判断是否出错。这周在优化的过程中发现了这个bug。是由于循环写错了,已经进行修改。

  部分代码:

1     while(fin >> strWord)
2     {
3         StringToLower(strWord);
4         erasePunct(strWord);//调用标点判断函数
5         wmap[strWord]++;
6     }
View Code

  修改后截图:

  

3.输出结果有个别单词划分错误

  这个问题在第一周进行测试的时候就已经发现,当时没有好的解决方法。在这周进行优化的时候,读了《C++ prime》这本书。知道可以利用string类提供的可向前和向后遍历的迭代器iterator。同时可以利用内置的ispunct()函数直接判断参数是否为标点符号或特殊符号,则返回TRUE,否则返回NULL(0)。这样大大提高了识别率。修改后的部分代码:

 1 void erasePunct(string &s)//利用字符串判断和iterator迭代器的特性直接判断标点符号
 2 {
 3     string::iterator it = s.begin();
 4     while(it != s.end())
 5     {
 6         if(ispunct(*it))//ispunct()可以直接判断参数是否为标点符号或特殊符号。
 7             it = s.erase(it);
 8         else
 9             ++it;
10     }
11 }
View Code

  修改后截图:

4.输出结果为全部单词而不是要求的前十

  这个问题在我第一周设计程序的时候就没太明白。因为不知道到底哪部分要全输出,哪部分要只输出前十。在我的理解下单文件读取的应该都是全部输出。多个文件读入的时候应该只输出前十的单词。但是这周在优化程序的时候看到大部分同学都是在war_and_peace这个文件中只输出前十,所以我也该为这样。

  修改后截图:

5.编译错误

  这个bug很奇怪。因为这周的任务是优化性能,所以我把原本程序中运行速度最慢的部分做了优化。在CodeBlocks中调试并且编译成功。而且在最后测试中也完全符合预期。但我在vs2013中调试就会跳出错误。我bing google了很多网页,怀疑是野指针的问题。便开始修改,修改了好几个版本的确可以正常运行,但是又会出现各种奇奇怪怪的bug。所以这个bug暂时还是没办法修复。

原文地址:https://www.cnblogs.com/vrocker/p/7597926.html