一:三角形问题(等价类划分法)
例:输入三个整数为三角形的三条边的长度值,程序打印输出这个三角形为不等边的,等腰的,或是等边三角形。
分析:
设三边分别为A,B,C,如能构成三角形的三边,须:
●A>O,B>0,C>0,且A+B>C,B+C>A,A+C>B;
●如是等腰三角形,则要判断A=B||A=C;
●如是等边三角形,须判断是否A=B,且B=C,且A=C;
由此可得三角形等价类设计表:
输入条件 | 有效等价类 | 无效等价类 |
是否为三角形的三边 | A>0 (1) B>0 (2) C>0 (3) A+B>C (4) B+C>A (5) A+C>B (6) | A<=0 (7) B<=0 (8) C<=0 (9) A+B<=C (10) B+C<=A (11) A+C<=B (12) |
是否为等腰三角形 | A=B (13) B=C (14) A=C (15) | A≠B且B≠C且C≠A(16) |
是否为等边三角形 | A=B且B=C且C=A (17) | A≠B (18) B≠C (19) C≠A (20) |
设计测试用例,输入顺序为A,B,C
序号 | “A ,B ,C” | 覆盖等价类 | 输出 |
1 | “3,4,5” | (1),(2),(3),(4),(5),(6) | 一般三角形 |
2 | “0,1,2” | (7) | 不能构成三角形 |
3 | “1,0,2” | (8) | |
4 | “1,2,0” | (9) | |
5 | “1,2,3” | (10) | |
6 | “1,3,2” | (12) | |
7 | “3,1,2” | (11) | |
8 | “3,3,4” | (1),(2),(3),(4),(5),(6),(13) | 等腰三角形 |
9 | “3,4,4” | (1),(2),(3),(4),(5),(6),(14) | |
10 | “3,4,3” | (1),(2),(3),(4),(5),(6),(15) | |
11 | “3,4,5” | (1),(2),(3),(4),(5),(6),(16) | 非等腰三角形 |
12 | “3,3,3” | (1),(2),(3),(4),(5),(6),(17) | 等边三角形 |
13 | “3,4,4” | (1),(2),(3),(4),(5),(6),(18) | 非等边三角形 |
14 | “3,4,3” | (1),(2),(3),(4),(5),(6),(19) | |
15 | “3,3,4” | (1),(2),(3),(4),(5),(6),(20) |
二:找零钱最佳组合(边界值分析法)
例:假设商店货品价格(R)皆不大于100元(且为整数),若顾客付款在100元内(P),求找给顾客最少货币个(张)数?(货币面值50元(N50),10元(N10),5元(N5),1元(N1)四种);
1:分析输入的情形
R:商店货品价格(R=<100且R为整数) P:顾客付款金额(0<P<100)
●R > 100 (无效输出)(1)
●R <= 0 (无效输出)(2)
(1)(2)为R的无效输入
●P > 100(多付) (无效输出)(3)
●0 < R < = 100
P < R (少给) (无效输出)(4)
(3)(4)为P的无效输入
●R<= P <= 100 (5)
●0 < R < = 100 (6)
(5)(6)同时满足,交易才能进行
2:分 析 输 出 情 形
设PR=P-R(即PR为找给顾客的余额)
●N50 N50 = 1 (PR>=50) (7)
N50 = 0 (PR<50) (8)
●N10 4>=N10>=1 (40>=PR>=10) (9)
N10 = 0 (PR<10) (10)
●N5 N5=1 (11)
N5 = 0 (PR减去个位上钱数能被10整除)(如14-4=10) (12)
●N1 4>=N1>=1 (13)
N1 = 0 (PR为5的倍数) (14)
3:由上述输入/输出条件组合出可能的情形 。
●R > 100 (1)
●R <= 0 (2)
●0 < R <= 100, P > 100 (3)
●0 < R <= 100, P < R (4)
●0 < R <= 100, R <= P <= 100, RR = 50 (5)(6)(7)
●0 < R <= 100, R <= P <= 100, RR = 49 (5)(6)(8)(9)(11)
●0 < R <= 100, R <= P <= 100, RR = 10 (5)(6)(9)
●0 < R <= 100, R <= P <= 100, RR = 9 (5)(6)(10)(11)(13)
●0 < R <= 100, R <= P <= 100, RR = 5 (5)(6)(11)
●0 < R <= 100, R <= P <= 100, RR = 4 (5)(6)(13)
●0 < R <= 100, R <= P <= 100, RR = 1 (5)(6)(13)
●0 < R <= 100, R <= P <= 100, RR = 0 (5)(6)(14)
4、 为 满 足 以 上 之 各 种 情 形 , 测 试 资 料 设 计 如 下 :
1). 货品价格 = 101
2). 货品价格 = 0
3). 货品价格 = -1
4). 货品价格 = 100, 付款金额 = 101
5). 货品价格 = 100, 付款金额 = 99
6). 货品价格 = 50, 付款金额 = 100
7). 货品价格 = 51, 付款金额 = 100
8). 货品价格 = 90, 付款金额 = 100
9). 货品价格 = 91, 付款金额 = 100
10). 货品价格 = 95, 付款金额 = 100
11). 货品价格 = 96, 付款金额 = 100
12). 货品价格 = 99, 付款金额 = 100
13). 货品价格 = 100, 付款金额 = 100
三:NextDate问题设计(决策表法实例分析)
例:NextDate (int month, int day, int year)函数规定:输入三个整数:month、day和year,函数的输出为输入日期后一天的日期。例如,输入为2006年3月7日,则函数的输出为2006年3月8日,year满足1920≤year≤2050。
步骤如下:
1)构造决策表
●M1={月份:30天/月},
M2={月份: 31天/月,12月除外},
M3={月份: 12月},M4={月份: 2月}
●D1={日期:1<=日<=27},
D2={日期:日=28},
D3={日期:日=29} ,
D4={日期:日=30},
D5={日期:日=31}
●Y1={年:闰年},Y2={年:平年}
注:二月:平年28天,闰年29天
条件桩:
●C1:月份在{M1,M2,M3,M4}中之一
●C2:日期在{D1,D2,D3,D4 ,D5}中之一
●C3:年在{Y1,Y2}中之一
动作桩:
●A1:不可能
●A2:日期增1
●A3:日期复位(置1)
●A4:月份增1
●A5:月份复位(置1)
●A6:年增1
C1:月 | C2:日 | C3:年 | A1:不可能 | A2:日期+1 | A3:日期复位 (置1) | A4:月份+1 | A5:月份复位 (置1 ) | A6:年+1 | |
1 | M1 | D1 | √ | ||||||
2 | M1 | D2 | √ | ||||||
3 | M1 | D3 | √ | ||||||
4 | M1 | D4 | √ | √ | |||||
5 | M1 | D5 | √ | ||||||
6 | M2 | D1 | √ | ||||||
7 | M2 | D2 | √ | ||||||
8 | M2 | D3 | √ | ||||||
9 | M2 | D4 | √ | ||||||
10 | M2 | D5 | √ | √ | |||||
11 | M3 | D1 | √ | ||||||
12 | M3 | D2 | √ | ||||||
13 | M3 | D3 | √ | ||||||
14 | M3 | D4 | √ | ||||||
15 | M3 | D5 | √ | √ | √ | ||||
16 | M4 | D1 | √ | ||||||
17 | M4 | D2 | Y1 | √ | |||||
18 | M4 | D2 | Y2 | √ | √ | ||||
19 | M4 | D3 | Y1 | √ | √ | ||||
20 | M4 | D3 | Y2 | √ | |||||
21 | M4 | D4 | √ | ||||||
21 | M4 | D5 | √ |
2)由决策表设计测试用例,得测试用例表
用例编号 | 月 | 日 | 年 | 预期输出 |
1--3 | 4 | 12/28/29 | 2001 | 2001年4月13/29/30日 |
4 | 4 | 30 | 2001 | 2001年5月1日 |
5 | 4 | 31 | 2001 | 不可能 |
6--9 | 1 | 15/28/29/30 | 2001 | 2001年1月16/29/30/31日 |
10 | 1 | 31 | 2001 | 2001年2月1日 |
11-14 | 12 | 15/28/29/30 | 2001 | 2001年12月16/29/30/31日 |
15 | 12 | 31 | 2001 | 2002年1月1日 |
16 | 2 | 15 | 2001 | 2001年2月16日 |
17 | 2 | 28 | 2004 | 2004年2月29日 |
18 | 2 | 28 | 2001 | 2001年3月1日 |
19 | 2 | 29 | 2005 | 2005年3月1日 |
20 | 2 | 29 | 2001 | 不可能 |
21,22 | 2 | 30/31 | 2001 | 不可能 |
四:工资发放问题(因果图)
例:某厂工资发放,分析测试需求,列出输入和输出条件,情况描述如下:
●工资分年薪制a1,月薪制a2;
●错误程度分普通a3,严重a4;
●工资为a1的员工范普通错误时扣工资1%(b1),犯严重错误时扣工资2%(b2);
●工资为a2的员工范普通错误时扣工资2%(b3),犯严重错误时扣工资4%(b4);
其中a1与a2互斥,b1,b2与b3,b4互斥;a3和a4可同时兼备。
分析:(因果图)-转化成->(判定表)-转换成->(测试用例表)
判定表:
输入 | | | | | | | | |
a1 | T | T | T | T | F | F | F | F |
a2 | F | F | F | F | T | T | T | T |
a3 | T | F | T | F | T | F | T | F |
a4 | F | T | T | F | F | T | T | F |
输出 | ||||||||
b1 | × | × | ||||||
b2 | × | × | ||||||
b3 | × | × | ||||||
b4 | × | × |
可得测试用例表如下:
测试用例编号 | 输入数值 | 预期输出 |
1 | 工资为a1的员工,犯普通错误 | b1 |
2 | 工资为a1的员工,犯严重错误 | b2 |
3 | 工资为a1的员工,同时犯严重错误和普通错误 | b1+b2 |
4 | 工资为a1的员工,没犯错误 | 0 |
5 | 工资为a2的员工,犯普通错误 | b3 |
6 | 工资为a2的员工,犯严重错误 | b4 |
7 | 工资为a2的员工,同时犯严重错误和普通错误 | b3+b4 |
8 | 工资为a2的员工,没犯错误 | 0 |