[关闭]
@rg070836rg 2015-09-10T16:04:53.000000Z 字数 979 阅读 2700

第一次作业

软件分析与测试


第一章 软件测试概述

1、 怎么看待如下看似矛盾的测试观点:

Q:程序中遗留的缺陷数量和检测出的缺陷数量成正比,请用自己的语言解释为什么在程序测试中会产生这种现象。

A:每个程序员有自己编写代码产生缺陷的概率,而检测缺陷同样也是有概率发现的,一般来说,由于两方面都有缺陷,所以检测出来的缺陷越多,说明原来缺陷越多。 比如改完一个函数,与这个函数调用相关的缺陷,会受到影响。

2、PIE Model 请构造一个简单的包含一行故障代码小程序,分别给出三个测试输入:

1. 能够执行到故障代码E,但没有产生错误的中间状态I;

2. 能够执行到故障代码E,并且产生了错误的中间状态I,但错误的中间状态没有传播出去P;

能够满足PIE三个条件。

  1. 程序很简单,要求输入一个数字,得到屏幕显示“no error
  2. 程序错误点在数组越界,内存占用,导致程序析构时候失败。
  3. 当输入在0~50 跳过不执行错误代码。
  4. 当输入在51~200,这边定义char数组,越界但是不导致奔溃
  5. 当输入在201~400 定义int数组,越界,析构时候奔溃。
  6. 其他时候,直接输出no error

代码样例如下:

  1. #include <iostream>
  2. using namespace std;
  3. #define N 10
  4. void test1()
  5. {
  6. char a[N];
  7. for (char i=0;i<N+1 ;i++)
  8. {
  9. a[i]=97;
  10. }
  11. cout<<"no error!"<<endl;
  12. }
  13. void test2()
  14. {
  15. int a[N];
  16. for (int i=0;i<N+1 ;i++)
  17. {
  18. a[i]=97;
  19. }
  20. cout<<"no error!"<<endl;
  21. }
  22. void test0(int flag)
  23. {
  24. if (flag<50 && flag >0)
  25. {
  26. int a[N];
  27. for (int i=0;i<N+1 ;i++)
  28. {
  29. a[i]=97;
  30. }
  31. }
  32. cout<<"no error!"<<endl;
  33. }
  34. void main()
  35. {
  36. int flag;
  37. cin>>flag;
  38. if (flag>=0&&flag<=50)
  39. {
  40. test0(100);//选择性执行
  41. }
  42. else if(flag>=51 && flag<=200)
  43. {
  44. test1();//有错,执行,不崩溃。//第二种
  45. }
  46. else if(flag>=201 && flag<=400)
  47. {
  48. test2();//有错,执行,崩溃。//第三种
  49. }
  50. else
  51. cout<<"no error"<<endl;
  52. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注