温故知识
6 条确定等价类的原则:
① 在输入条件规定了取值范围或值的个数的情况下,可以确立一个有效等价类个两个无效等价类。
② 在输入条件规定了输入值的集合或者规定“必须如何”的条件下,可以确立一个有效等价类和一个无效等价类。
③ 在输入条件是一个布尔量的情况下,可以确定一个有效等价类和一个无效等价类。
④ 在规定了输入数据的一组值(假定 n 个),并且程序要对每一个值分别处理的情况下,可确立 n 个有效等价类和一个无效等价类。
⑤ 在规定了输入数据必须遵守的规则的情况下,可确立一个有效等价类(符合规则)和若干个无效等价类(不同角度违反规则)。
⑥ 在确知已划分的等价类中,各元素在程序处理中的方式不同的情况下,则应再将该等价类进一步地划分为更小的等价类
对边界值设计测试用例,应遵循以下几条原则:
① 如果输入条件规定了值的范围,则应取刚达到这个范围的边界的值,以及刚刚超越这个范围边界的值作为测试输入数据。
② 如果输入条件规定了值的个数,则用最大个数、最小个数、比最小个数少 1 、比最大个数多 1 的数作为测试数据。
③ 根据规则说明的每个输出条件,使用前面的原则 ①。
④ 根据规则说明的每个输出条件,应用前面的原则 ②。
⑤ 如果程序的规格说明给出的输入域是有序集合,则应选取集合的第一个元素和最后一个元素作为测试用例。
⑥ 如果程序中使用了一个内部数据结构,则应当选择这个内部数据结构边界上的值作为测试用例。
⑦ 分析规格说明,找出其他可能的边界条件。
2014年下半年软件评测师试题:
某商店为购买不同数量商品的顾客报出不同的价格,其报价规则如表所示。
购买数量 | 单价(单位:元) |
头10件(第1件到第10件) | 30 |
第2个10件(第11件到第20件) | 27 |
第3个10件(第21件到第30件) | 25 |
超过30件 | 22 |
如买 11 件需要支付 10×30+1×27=327 元,买 35 件需要支付 10×30+10×27+10×25+5×22=930 元。
现为该商家开发一个软件,输入为商品数 C (1 ≤ C ≤ 100),输出为应付的价钱P。
【问题 1】
请采用等价类划分法为该软件设计测试用例(不考虑 C 为非整数的情况)。
【问题 2】
请采用边界值分析法为该软件设计测试用例(不考虑健壮性测试,即不考虑 C 不在 1 到 100直接或者是非整数的情况)。
试题分析
【问题 1】
根据等价类划分法的知识,若规定了输入数据的取值范围,则划分一个有效等价类和两个无效等价类。
在本题中,输入值 C 的取值范围为:1 ≤ C ≤ 100,则有效等价类为:{ C | 1 ≤ C ≤ 100 },而两个无效等价类分别为{ C | C < 1 }、{ C | C > 100 }。
再根据表中对 C 的不同取值有不同的处理,因此有效的等价类还可以细分为:{ C | 1 ≤ C ≤ 10 }、{ C | 11 ≤ C ≤ 20 }、{ C | 21 ≤ C ≤ 30 }、{ C | 31 ≤ C ≤ 100 }。
综上,可得4个有效等价类和2个无效的等价类。
有效 | 无效 | |
头10件 | { C | 1 ≤ C ≤ 10 } ③ | { C | C < 1 } ①、{ C | C > 100 } ② |
第2个10件 | { C | 11 ≤ C ≤ 20 } ④ | |
第3个10件 | { C | 21 ≤ C ≤ 30 } ⑤ | |
超过30件 | { C | 31 ≤ C ≤ 100 } ⑥ |
【问题 2】
边界值分析法作为等价类划分法的一种补充,是把等价类上的边界取值作为测试用例的一种测试方法。题目中要求不考虑健壮性测试,也就是说不用考虑无效等价类的边界取值,剩下 4 个等价类中有 1 、10 、11 、20 、21 、30 、31 、100 这 8 个边界值,然后每个等价类中再取 1 个任意值,一共得到 12 个边界值的测试用例。
参考答案
【问题 1】
序号 | 输入 C | 输出 P |
1 | 0 { C | C < 1 } | N/A |
2 | 101 { C | C > 100 } | N/A |
3 | 10 { C | 1 ≤ C ≤ 10 } | 300 |
4 | 15 { C | 11 ≤ C ≤ 20 } | 435 |
5 | 21 { C | 21 ≤ C ≤ 30 } | 595 |
6 | 40 { C | 31 ≤ C ≤ 100 } | 1040 |
【问题 2】
序号 | 输入 C | 输出 P |
1 | 1 | 30 |
2 | 5 | 150 |
3 | 10 | 300 |
4 | 11 | 327 |
5 | 15 | 435 |
6 | 20 | 570 |
7 | 21 | 595 |
8 | 25 | 695 |
9 | 30 | 820 |
10 | 31 | 842 |
11 | 35 | 930 |
12 | 100 | 2360 |
2015年下半年软件评测师试题:
某商店的货品价格(P)都不大于 20 元(且为整数),假设各科每次付款为20元且每次限购一件商品,现有一个人家能在每位顾客购物后给出找零钱的最佳组合(找给顾客货币张数最少)。
假定此商店的找零货币面值只包括:10 元(N10)、5 元(N5)、1 元(N1)3种。
【问题 1】
请采用等价类划分法为该软件设计测试用例(不考虑 P 为非整数的情况)并填入到下表中。(<<N1,2>>表示 2 张 1 元,若无输出或输入非法,则填 N/A)
序号 | 输入(商品价格 P) | 输出(找零钱的组合) |
1 | 20(P=20) | N/A |
2 | 18(任意 15 < P < 20) | <<N1,2>> |
3 | ||
4 | ||
5 | ||
6 | ||
7 | ||
8 | ||
9 | ||
10 |
【问题 2】
请采用边界值分析法为该软件设计测试用例。
试题分析
【问题 1】
根据等价类划分法的知识,若规定了输入数据的取值范围,则划分一个有效等价类和两个无效等价类。
在本题中,输入值 P 的取值范围为:1 ≤ P ≤ 20,则有效等价类为:{ P | 1 ≤ P ≤ 20 },而两个无效等价类分别为{ P | P > 20 }、{ P | P < 1 }。分析题目后,可将上述有效等价类{ P | 1 ≤ P ≤ 20 }细分为8个有效的等价类,分别是:{ P | P = 20 }、{ P | 15 < P < 20 }、{ P | P = 15 }、{ P | 10 < P < 15 }、{ P | P = 10 }、{ P | 5 < P < 10 }、{ P | P = 5 }、{ P | 0 < P < 5 }。
【问题 2】
如果不考虑健壮性测试,也就是如果说不考虑无效等价类的边界取值,8 个有效等价类中有 20,19,16,15,14,11,10,9,6,5,4,1 这 12 个边界值,然后每个等价类中再取 1 个任意值,一共得到 16 个边界值的测试用例({P | P = 20}、{P| P = 15}、{P| P = 10}、{P| P = 5}这 4 个等价类的任意值是 20,15,10,5,与边界值有重复)。
参考答案
【问题 1】
序号 | 输入(商品价格 P) | 输出(找零钱的组合) |
1 | 20(P=20) | N/A |
2 | 18(任意 15 < P < 20) | <<N1,2>> |
3 | 15(P=15) | <<N5,1>> |
4 | 14(任意 10 < P < 15) | <<N5,1>>、<<N1,1>> |
5 | 10 | <<N10,1>> |
6 | 6 | <<N10,1>>、<<N1,4>> |
7 | 5 | <<N10,1>>、<<N5,1>> |
8 | 1 | <<N10,1>>、<<N5,1>>、<<N1,4>> |
9 | 30 | N/A |
10 | 0 | N/A |
【问题 2】
序号 | 输入(商品价格 P) | 输出(找零钱的组合) |
1 | 20 | N/A |
2 | 19 | <<N1,1>> |
3 | 18 | <<N1,2>> |
4 | 16 | <<N1,4>> |
5 | 15 | <<N5,1>> |
6 | 14 | <<N5,1>>、<<N1,1>> |
7 | 13 | <<N5,1>>、<<N1,2>> |
8 | 11 | <<N5,1>>、<<N1,4>> |
9 | 10 | <<N10,1>> |
10 | 9 | <<N10,1>>、<<N1,1>> |
11 | 8 | <<N10,1>>、<<N1,2>> |
12 | 6 | <<N10,1>>、<<N1,4>> |
13 | 5 | <<N10,1>>、<<N5,1>> |
14 | 4 | <<N10,1>>、<<N5,1>>、<<N1,1>> |
15 | 3 | <<N10,1>>、<<N5,1>>、<<N1,2>> |
16 | 1 | <<N10,1>>、<<N5,1>>、<<N1,4>> |
2016年下半年软件评测师试题:
某航空公司的会员卡分为普卡、银卡、金卡和白金卡 4 个级别,会员每次搭乘该航空公司航班均可能获得积分,积分规则如表 1 所示。此外,银卡及以上级别会员有额外积分奖励,奖励规则如表 2 所示。
舱 位 | 舱位代码 | 积分 |
头等舱 | F | 200% * K |
Z | 150% * K | |
A | 125% * K | |
公务舱 | C | 150% * K |
D/I | 125% * K | |
R | 100% * K | |
经济舱 | Y | 125% * K |
B/H/K/L/M/W | 100% * K | |
Q/X/U/E | 50% * K | |
P/S/G/O/J/V/N/T |
会员级别 | 普卡 | 银卡 | 金卡 | 白金卡 |
级别代码 | F | S | G | P |
额外积分奖励 | 0% | 10% | 25% | 50% |
公司开发了一个程序来计算会员每次搭乘航班所累积的积分,程序的输入包括会员级别 B 、舱位代码 C 和飞行公里数 K ,程序的输出为本次积分 S 。其中,B 和 C 为单个字母且大小写不敏感,K 为正整数,S 为整数(小数部分四舍五入)。
【问题 1】
采用等价类划分法对该程序进行测试,等价类表如表 3 所示,请补充空(1)~(7)。
输入条件 | 有效等价类 | 编号 | 无效等价类 | 编号 |
会员级别 B | F | 1 | 非字母 | 12 |
S | 2 | 非单个字母 | 13 | |
G | 3 | ____(5)____ | 14 | |
____(1)____ | 4 | |||
舱位代码 C | F | 5 | 非字母 | 15 |
____(2)____ | 6 | ____(6)____ | 16 | |
____(3)____ | 7 | |||
R/B/H/K/L/M/W | 8 | |||
Q/X/U/E | 9 | |||
P/S/G/O/J/V/N/T | 10 | |||
飞行公里数 K | ____(4)____ | 11 | 非整数 | 17 |
____(7)____ | 18 |
【问题 2】
根据以上等价类表设计的测试用例如表 4 所示,请补充空(1)~(13)。
编号 | 输入 | 覆盖等价类(编号) | 预期输出 | ||
B | C | K | |||
1 | F | F | 500 | 1,5,11 | __(1)__ |
2 | S | Z | __(2)__ | 2,6,11 | 825 |
3 | G | A | 500 | __(3)__ | 781 |
4 | P | __(4)__ | 500 | 4,8,11 | 750 |
5 | __(5)__ | Q | 500 | 1,9,11 | 250 |
6 | F | P | 500 | 1,10,11 | __(6)__ |
7 | __(7)__ | P | 500 | 12,10,11 | N/A |
8 | __(8)__ | F | 500 | 13,5,11 | N/A |
9 | A | Z | 500 | 14,6,11 | N/A |
10 | S | __(9)__ | 500 | 2,15,11 | N/A |
11 | S | __(10)__ | 500 | 2,16,11 | N/A |
12 | S | Q | __(11)__ | 2,9,17 | __(12)__ |
13 | S | P | __(13)__ | 2,10,18 | N/A |
试题分析
【问题 1】
本问题考查等价类划分法中等价类表的构造。
等价类划分法的等价类表是把程序的输入域按规则划分为若干子集。
本题中,B 和 C 由多个输入值构成。并且需要对每个(或者每组)输入值分别处理,按规则可以划分为 n 个有效等价类(每个或者每组值确定一个有效的等价类)和一个无效等价类(所有不允许输入值的集合)。
对 B 来说,分成 4 个有效等价类(B 分别取 F、S、G、P)和一个无效等价类(其他情况),而这个无效等价类又可以进一步细分为非字母、非单个字母以及除 F/S/G/P 之外的其他字母。
对 C 来说,根据额外积分 200%、150%、125%、100%、50%、0%可以分为 6 个有效等价类和 1 个无效等价类,而这个无效等价类可以进一步细分为非字母和非单个字母。(注意:这里 26 个字母已经全部使用,不存在其他字母这个无效等价类)
本题中对 K 是规定了输入值集合必须满足的条件(即正整数),根据规则可以划分为 1 个有效等价类(K 为正整数)和 1 个无效等价类(K 不是正整数)。
【问题 2】
考查等价类划分法中根据等价类表编写测试用例。
在编写等价类划分法的测试用例时,如果输入全部都来自有效等价类,则从每个有效等价类选取一个代表元素作为输入,如果要考虑无效等价类,则每次只选取一个无效等价类,其余输入都从有效等价类中选取。
试题二参考答案
【问题 1】
(1)P (2)Z/C (3)A/D/I/Y
(4)任意正整数(5)除 F/S/G/P 外的单个字母(6)非单个字母
(7)非正整数
【问题 2】
(1)1000 (2)500 (3)3,7,11
(4)R/B/H/K/L/M/W (5)F (6)0
(7)任意非字母,如 0 (8)任意非单个字母,如 FF(9)任意非字母,如 0
(10)任意非单个字母,如 FF(11)任意非整数,如 A (12)N/A
(13)任意非正整数,如 0