#第一章 软件测试概述
##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;
		
}