一、名词解释:
1) 等价类
某个输入域的子集合
在该子集合中,各个输入数据对于揭露程序中的错误都是等效的,它们具有等价特性,即每一类的代表性数据在测试中的作用都等价于这一类中的其它数据。这样,对于表征该类的数据输入将能代表整个子集合的输入。
2) 等价类划分法(把所有可能的输入数据,即程序的输入域划分为若干部分(子集),然后从每一个子集中选取少数具有代表性的数据作为测试用例。
3) 有效等价类(对软件规格说明而言,是有意义的、合理的输入数据所组成的集合。
4) 无效等价类(对软件规格说明而言,是无意义的、不合理的输入数据所构成的集合。
5) 标准等价类测试(不考虑无效数据值,测试用例使用 每个等价类中的一个值。
6) 健壮等价类测试(主要的出发点是考虑了无效等价类。对有效输入,测试用例从每个有效等价类中取一个值; 对无效输入,一个测试用例有一个无效值,其他值均取 有效值。
7) 边界值分析法(对输入或输出的边界值进行测试的一种黑盒测试方法。通常边界值分析法是作为对等价类划分法的补充,这种情况下,其测试用例来自等价类的边界。
二、简答题:
1) 如何划分等价类?
先从程序的规格说明书中找出各个输入条件,
再为每个输入条件划分两个或多个等价类,
形成若干的互不相交的子集。
进行等价类划分的依据
按照区间划分 在输入条件规定了取值范围或值的个数的情况下,可以确定一个有效等价类和两个无效等价类
按照数值划分 在规定了一组输入数据(假设包括 n个 输入值),并且程序要对每一个输入值分别进行处理的情况下,可确定 n 个有效等价类(每个值确定一个有效等价类)和一个无效等价类(所有不允许的输入值的集合
按照数值集合划分 在输入条件规定了输入值的集合或规定了“必须如何”的条件下,可以确定一个有效等价类和一个无效等价类(该集合有效值之外)。
按照限制条件或规则划分 在规定了输入数据必须遵守的规则或限制条件的情况下,可确定一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)。
细分等价类 在确知已划分的等价类中各元素在程序中的处理方式不同的情况下,则应再将该等价类进一步划分为更小的等价类,并建立等价类表。
2) 如何使用等价类划分法设计测试用例?
(1)确定等价类,列出等价类表。
(2)确定测试用例。
3) 为什么使用边界值分析法?
无数的测试实践表明,大量的故障往往发生在输入定义域或输出值域的边界上,而不是在其内部。因此,针对各种边界情况设计测试用例,通常会取得很好的测试效果。
4) 怎样用边界值分析法设计测试用例?
(1)首先确定边界情况。通常输入或输出等价类的边界就是应该着重测试的边界情况。
(2)选取正好等于、刚刚大于或刚刚小于边界的值作为测试数据,而不是选取等价类中的典型值或任意值。
5) 如何理解边界值分析测试的基本思想?
n 采用边界值分析测试的基本思想是:故障往往出现在输入变量的边界值附近。
——因此,边界值分析法利用输入变量的最小值(min)、略大于最小值(min+)、输入值域内的任意值(nom)、略小于最大值(max-)和最大值(max)来设计测试用例。
6) 在边界值分析法中获取测试用例的常用方法是什么?(包括健壮性测试)
基于可靠性理论中称为“单故障”的假设,即有两个或两个以上故障同时出现而导致软件失效的情况很少,也就是说,软件失效基本上是由单故障引起的。
(1) 每次保留程序中一个变量,让其余的变量取正常值,被保留的变量依次取min、min+、nom、max-和max。
(2) 对程序中的每个变量重复 (1) 。
健壮性测试是作为边界值分析的一个简单的扩充,它除了对变量的5个边界值分析取值外,还需要增加一个略大于最大值(max+)以及略小于最小值(min-)的取值,检查超过极限值时系统的情况。因此,对于有n个变量的函数采用健壮性测试需要6n+1个测试用例。
三、测试实例:
1) 分别使用等价类划分法、边界值分析法对计算平方根的函程序进行测试
等价类划分法
由于开平方运算只对非负实数有效,这时需要将所有的实数(输入域x)进行划分,可以分成:正实数、
0
和 负实数。
假设我们选定+1.4444代表正实数,-2.345代表负实数,则为该程序设计的测试用例的输入为+1.4444、 0 和 -2.345。
• 输入 (i)<0 和 (ii)>=0
• 输出 (a)>=0 和 (b) Error
– 测试用例有两个:
• 输入4,输出2。对应于 (ii) 和 (a) 。
• 输入-10,输出0和错误提示。对应于 (i) 和 (b) 。
边界值分析
——输入:实数
——输出:实数
——规格说明:当输入一个0或比0大的数的时候,返回其正平方根;当输入一个小于0的数时,显示错误信息“平方根非法-输入值小于0”并返回0;库函数Print-Line可以用来输出错误信息。
– 划分(ii)的边界为0和最大正实数;划分(i)的边界为最小负实数和0。由此得到以下测试用例:
• 输入 {最小负实数}
• 输入 {绝对值很小的负数}
• 输入 0
• 输入 {绝对值很小的正数}
• 输入 {最大正实数}
2) 分别使用等价类划分法、边界值分析法对三角形问题进行测试
等价类划分法
测试用例 | a | b | c | 预期输出 |
Test1 | 10 | 10 | 10 | 等边三角形 |
Test2 | 10 | 10 | 5 | 等腰三角形 |
Test3 | 3 | 4 | 5 | 一般三角形 |
Test4 | 4 | 1 | 2 | 非三角形 |
边界值分析法测试
在三角形问题描述中,除了要求边长是整数外,没有给出其它的限制条件。在此,我们将三角形每边边长的取范围值设值为[1, 100] 。
说明:如果程序规格说明中没有显式地给出边界值,则可以在设计测试用例前先设定取值的下限值和上限值。
测试用例 | a | b | c | 预期输出 |
Test 1 Test2 Test3 Test4 Test5 | 60 60 60 50 50 | 60 60 60 50 50 | 1 2 60 99 100 | 等腰三角形 等腰三角形 等边三角形 等腰三角形 非三角形 |
Test6 Test7 Test8 Test9 | 60 60 50 50 | 1 2 99 100 | 60 60 50 50 | 等腰三角形 等腰三角形 等腰三角形 非三角形 |
Test10 Test11 Test12 Test13 | 1 2 99 100 | 60 60 50 50 | 60 60 50 50 | 等腰三角形 等腰三角形 等腰三角形 非三角形 |
3) 使用等价类划分法对保险公司计算保费费率的程序进行测试
1)分析程序规格说明中给出和隐含的对输入条件的要求,列出等价类表(包括有效等价类和无效等价类)。
n 年龄:一位或两位非零整数,值的有效范围为1~99
n 性别:一位英文字符,只能取值‘M’或’F’
n 婚姻:字符,只能取值‘已婚’或‘未婚’
n 抚养人数:空白或一位非零整数(1~9)
n 点数 :一位或两位非零整数,值的范围为1~99
(2)根据(1)中的等价类表,设计能覆盖所有等价类的 测试用例。
等价类表
输入条件 | 有效等价类 | 编号 | 无效等价类 | 编号 |
年龄 | 20~39岁 | 1 |
|
|
40~59岁 | 2 |
|
| |
1~19岁 60~99岁 | 3 | 小于1 | 12 | |
大于99 | 13 | |||
性别 | 单个英文字符 | 4 | 非英文字符 | 14 |
非单个英文字符 | 15 | |||
‘M’ | 5 | 除‘M’和‘F’之外的 其它单个字符 | 16 | |
‘F’ | 6 | |||
婚姻 | 已婚 | 7 | 除’已婚’和’未婚’之外的其它字符 | 17 |
未婚 | 8 | |||
抚养人数 | 空白 | 9 | 除空白和数字之外 的其它字符 | 18 |
1~6人 | 10 | 小于1 | 19 | |
6~9人 | 11 | 大于9 | 20 |
测试用例
测试用例 编号 | 输入数据 | 预期输出 | |||
年龄 | 性别 | 婚姻 | 抚养人数 | 保险费率 | |
1 | 27 | F | 未婚 | 空白 | 0.6% |
2 | 50 | M | 已婚 | 2 | 0.6% |
3 | 70 | F | 已婚 | 7 | 0.1% |
4 | 0 | M | 未婚 | 空白 | 无法推算 |
5 | 100 | F | 已婚 | 3 | 无法推算 |
6 | 99 | 男 | 已婚 | 4 | 无法推算 |
7 | 1 | Child | 未婚 | 空白 | 无法推算 |
8 | 45 | N | 已婚 | 5 | 无法推算 |
9 | 38 | F | 离婚 | 1 | 无法推算 |
10 | 62 | M | 已婚 | 没有 | 无法推算 |
11 | 18 | F | 未婚 | 0 | 无法推算 |
12 | 40 | M | 未婚 | 10 | 无法推算 |
4) 采用边界值分析法为以下程序设计测试用例:
a) 有程序F,其有两个输入变量x1(1≤x1≤28)和x2(1≤x2≤48)
{<1,24>,<2,24>,<27,24>,<28,24>,<17,24>,<17,1>,<17,2><17,47><17,48>}
b) 有程序f(x,y,x),其有三个输入变量x∈[1000,2200],y∈[1,14],z∈[1,72]
{ <2000,7,1>, <2000,7,2>, <2000,7,71>, <2000,7,72>, <2000,1,35>, <2000,2,35>, <2000,13,35>, <2000,14,35>, <1000,7,35>, <1001,7,35>, <2199,7,35>, <2200,7,35>, <2000,7,35> }