第一次作业


#第一章 软件测试概述

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

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

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

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

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

###2. 能够执行到故障代码E,并且产生了错误的中间状态I,但错误的中间状态没有传播出去P;
能够满足PIE三个条件。

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

代码样例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include <iostream>
using namespace std;
#define N 10


void test1()
{
char a[N];
for (char i=0;i<N+1 ;i++)
{
a[i]=97;
}
cout<<"no error!"<<endl;
}

void test2()
{
int a[N];
for (int i=0;i<N+1 ;i++)
{
a[i]=97;
}
cout<<"no error!"<<endl;
}

void test0(int flag)
{
if (flag<50 && flag >0)
{
int a[N];
for (int i=0;i<N+1 ;i++)
{
a[i]=97;
}

}
cout<<"no error!"<<endl;
}

void main()
{
int flag;
cin>>flag;
if (flag>=0&&flag<=50)
{
test0(100);//选择性执行
}
else if(flag>=51 && flag<=200)
{
test1();//有错,执行,不崩溃。//第二种
}
else if(flag>=201 && flag<=400)
{
test2();//有错,执行,崩溃。//第三种
}
else
cout<<"no error"<<endl;

}