三种测试方式--边界值测试,等价类测试、决策表测试

一.方法简介

1. 定义:边界值分析法就是对输入或输出的边界值进行测试的一种黑盒测试方法。通常边界值分析法是作为对等价类划分法的补充,这种情况下,其测试用例来自等价类的边界。

2. 与等价划分的区别

1) 边界值分析不是从某等价类中随便挑一个作为代表,而是使这个等价类的每个边界都要作为测试条件。

2) 边界值分析不仅考虑输入条件,还要考虑输出空间产生的测试情况。

3. 边界值分析方法的考虑:

长期的测试工作经验告诉我们,大量的错误是发生在输入或输出范围的边界上,而不是发生在输入输出范围的内部。因此针对各种边界情况设计测试用例,可以查出更多的错误。

使用边界值分析方法设计测试用例,首先应确定边界情况。通常输入和输出等价类的边界,就是应着重测试的边界情况。应当选取正好等于,刚刚大于或刚刚小于边界的值作为测试数据,而不是选取等价类中的典型值或任意值作为测试数据。

4. 常见的边界值

1) 对16-bit 的整数而言 32767 和 -32768 是边界

2) 屏幕上光标在最左上、最右下位置

3) 报表的第一行和最后一行

4) 数组元素的第一个和最后一个

5) 循环的第 0 次、第 1 次和倒数第 2 次、最后一次

5. 边界值分析

1) 边界值分析使用与等价类划分法相同的划分,只是边界值分析假定错误更多地存在于划分的边界上,因此在等价类的边界上以及两侧的情况设计测试用例。

例:测试计算平方根的函数

--输入:实数

--输出:实数

--规格说明:当输入一个0或比0大的数的时候,返回其正平方根;当输入一个小于0的数时,显示错误信息"平方根非法-输入值小于0"并返回0;库函数Print-Line可以用来输出错误信息。

2) 等价类划分:

I.可以考虑作出如下划分:

a、输入 (i)<0 和 (ii)>=0

b、输出 (a)>=0 和 (b) Error

II.测试用例有两个:

a、输入4,输出2。对应于 (ii) 和 (a) 。

b、输入-10,输出0和错误提示。对应于 (i) 和 (b) 。

3) 边界值分析:

划分(ii)的边界为0和最大正实数;划分(i)的边界为最小负实数和0。由此得到以下测试用例:

a、输入 {最小负实数}

b、输入 {绝对值很小的负数}

c、输入 0

d、输入 {绝对值很小的正数}

e、输入 {最大正实数}

4) 通常情况下,软件测试所包含的边界检验有几种类型:数字、字符、位置、重量、大小、速度、方位、尺寸、空间等。

5) 相应地,以上类型的边界值应该在:最大/最小、首位/末位、上/下、最快/最慢、最高/最低、 最短/最长、 空/满等情况下。

6) 利用边界值作为测试数据

  边界值测试用例的设计思路
字符起始-1个字符/结束+1个字符假设一个文本输入区域允许输入1个到255个 字符,输入1个和255个字符作为有效等价类;输入0个和256个字符作为无效等价类,这几个数值都属于边界条件值。
数值最小值-1/最大值+1假设某软件的数据输入域要求输入5位的数据值,可以使用10000作为最小值、99999作为最大值;然后使用刚好小于5位和大于5位的 数值来作为边界条件。
空间小于空余空间一点/大于满空间一点例如在用U盘存储数据时,使用比剩余磁盘空间大一点(几KB)的文件作为边界条件。

7) 内部边界值分析:

在多数情况下,边界值条件是基于应用程序的功能设计而需要考虑的因素,可以从软件的规格说明或常识中得到,也是最终用户可以很容易发现问题的。然 而,在测试用例设计过程中,某些边界值条件是不需要呈现给用户的,或者说用户是很难注意到的,但同时确实属于检验范畴内的边界条件,称为内部边界值条件或 子边界值条件。

内部边界值条件主要有下面几种:

a) 数值的边界值检验:计算机是基于二进制进行工作的,因此,软件的任何数值运算都有一定的范围限制。

  范围或值
位(bit)0 或 1
字节(byte)0 ~ 255
字(word)0~65535(单字)或 0~4294967295(双字)
千(K)1024
兆(M)1048576
吉(G)1073741824

b) 字符的边界值检验:在计算机软件中,字符也是很重要的表示元素,其中ASCII和Unicode是常见的编码方式。下表中列出了一些常用字符对应的ASCII码值。

  字符ASCII码值字符ASCII码值
空 (null)0A65
空格 (space)32a97
斜杠 ( / )47Z90
048z122
冒号 ( : )58单引号 ( ‘ )96
@64  

c) 其它边界值检验

6. 基于边界值分析方法选择测试用例的原则

1) 如果输入条件规定了值的范围,则应取刚达到这个范围的边界的值,以及刚刚超越这个范围边界的值作为测试输入数据。

例如,如果程序的规格说明中规定:"重量在10公斤至50公斤范围内的邮件,其邮费计算公式为……"。作为测试用例,我们应取10及50,还应取10.01,49.99,9.99及50.01等。

2) 如果输入条件规定了值的个数,则用最大个数,最小个数,比最小个数少一,比最大个数多一的数作为测试数据。 比如,一个输入文件应包括1~255个记录,则测试用例可取1和255,还应取0及256等。

3) 将规则1)和2)应用于输出条件,即设计测试用例使输出值达到边界值及其左右的值。

例如,某程序的规格说明要求计算出"每月保险金扣除额为0至1165.25元",其测试用例可取0.00及1165.24、还可取一0.01及1165.26等。

再如一程序属于情报检索系统,要求每次"最少显示1条、最多显示4条情报摘要",这时我们应考虑的测试用例包括1和4,还应包括0和5等。

4) 如果程序的规格说明给出的输入域或输出域是有序集合,则应选取集合的第一个元素和最后一个元素作为测试用例。

5) 如果程序中使用了一个内部数据结构,则应当选择这个内部数据结构的边界上的值作为测试用例。

6) 分析规格说明,找出其它可能的边界条件。

二.实战演习

1.现有一个学生标准化考试批阅试卷,产生成绩报告的程序。其规格说明如下:程序的输入文件由一些有80个字符的记录组成,如右图所示,所有记录分为3组:

① 标题:这一组只有一个记录,其内容为输出成绩报告的名字。

② 试卷各题标准答案记录:每个记录均在第80个字符处标以数字"2"。该组的第一个记录的第1至第3个字符为题目编号(取值为1一999)。第10至第59 个字符给出第1至第50题的答案(每个合法字符表示一个答案)。该组的第2,第3……个记录相应为第51至第100,第101至第150,…题的答案。

③ 每个学生的答卷描述:该组中每个记录的第80个字符均为数字"3"。每个学生的答卷在若干个记录中给出。如甲的首记录第1至第9字符给出学生姓名及学号, 第10至第59字符列出的是甲所做的第1至第50题的答案。若试题数超过50,则第2,第3……纪录分别给出他的第51至第100,第101至第 150……题的解答。然后是学生乙的答卷记录。

④ 学生人数不超过200,试题数不超过999。

⑤ 程序的输出有4个报告:

a) 按学号排列的成绩单,列出每个学生的成绩、名次。

b) 按学生成绩排序的成绩单。

c) 平均分数及标准偏差的报告。

d) 试题分析报告。按试题号排序,列出各题学生答对的百分比。

解答:分别考虑输入条件和输出条件,以及边界条件。给出下表所示的输入条件及相应的测试用例。

输出条件及相应的测试用例表。

2.三角形问题的边界值分析测试用例

在三角形问题描述中,除了要求边长是整数外,没有给出其它的限制条件。在此,我们将三角形每边边长的取范围值设值为[1, 100] 。 

测试用例

a

b

c

预期输出

Test1

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.NextDate函数的边界值分析测试用例

NextDate是一个有三个变量(月份、日期、和年)的函数,函数返回输入日期后面的那个日期。变量都具有整数值,且满足以下条件:

C1 1<=月份<=12
C2 1<=日期<=31
C3 1912<=年<=2050

在NextDate函数中,隐含规定了变量mouth和变量day的取值范围为1≤mouth≤12和1≤day≤31,并设定变量year的取值范围为1912≤year≤2050 。  

测试用例

mouth

day

year

预期输出

Test1

Test2

Test3

Test4

Test5

Test6

Test7

6

6

6

6

6

6

6

15

15

15

15

15

15

15

1911

1912

1913

1975

2049

2050

2051

year超出[1912,2050]

1912.6.16

1913.6.16

1975.6.16

2049.6.16

2050.6.16

year超出[1912,2050]

Test8

Test9

Test10

Test11

Test12

Test13

6

6

6

6

6

6

-1

1

2

30

31

32

2001

2001

2001

2001

2001

2001

day超出[1…31]

2001.6.2

2001.6.3

2001.7.1

输入日期超界

day超出[1…31]

Test14

Test15

Test16

Test17

Test18

Test19

-1

1

2

11

12

13

15

15

15

15

15

15

2001

2001

2001

2001

2001

2001

Mouth超出[1…12]

2001.1.16

2001.2.16

2001.11.16

2001.12.16

Mouth超出[1…12]

通过分析前两个测试用例表,就会发现这些测试用例是不充分的,而且存在冗余。
三角形问题上没有考虑两边之和大于第三边。
在NextDate函数中没有考虑2月和闰年的问题。

如果被测程序是多个独立变量的函数,则很适合采用边界值分析。

等价类测试

动机   :希望进行完备的测试 希望避免冗余
等价类的划分:

根据等价关系对输入或输出数据的集合进行划分
将集合划分为互不相交的子集(无冗余性)
这些子集的并是整个集合(完备性)
等价类的划分的几个依据:
1. 按照区间划分
2. 按照数值划分
3. 按照数值集合划分
4. 按照限制条件或规格划分
弱一般等价类测试
强一般等价类测试
弱健壮等价类测试
强健壮等价类测试

“弱” 是指遵循单缺陷原则
“强” 是指遵循多缺陷原则
“健壮” 是指考虑无效值
弱一般等价类 考虑单缺陷假设
测试用例使用每个等价类中的一个值
设两变量x1和x2函数有以下边界和等价区间:
a<=x1<=d,区间为:[a,b),[b,c),[c,d]
e<=x2<=g,区间为:[e,f),[f,g)
强一般等价类测试   考虑多缺陷假设
测试用例集合为等价类笛卡儿积
设两变量x1和x2函数有以下边界和等价区间:
a<=x1<=d,区间为:[a,b),[b,c),[c,d]
e<=x2<=g,区间为:[e,f),[f,g)
弱健壮等价类测试 考虑单缺陷假设、无效值
用例标识
对于有效输入,使用每个有效类的一个值
对于无效输入,使用一个无效值,并保持其余的值都有效的
强健壮等价类测试   考虑多缺陷假设、无效值
用例标识
从所有等价类(包括若干无效等价类)笛卡儿乘积中选取
案例分析-三角形问题的等价类测试用例
使用输出确定等价类
R1={等边三角形}
R2={等腰三角形}
R3={不等边三角形}
R4={不构成三角形}
弱一般等价类测试用例(强一般等价类)
测试用例 a b c 预期输出
WN1 5 5 5 等边三角形
WN2 2 2 3 等腰三角形
WN3 3 4 5 不等边三角形
WN4 4 1 2 不构成三角形
弱健壮等价类测试用例(考虑a,b,c的无效值)

测试用例 a b c 预期输出
WR1 -1 5 5 a值不在范围内
WR2 5 -1 5 b值不在范围内
WR3 5 5 -1 c值不在范围内
WR4 201 5 5 a值不在范围内
WR5 5 201 5 b值不在范围内
WR6 5 5 201 c值不在范围内

强健壮等价类测试的用例
测试用例 a b c 预期输出
SR1 -1 5 5 a值不在范围内
SR2 5 -1 5 b值不在范围内
SR3 5 5 -1 c值不在范围内
SR4 -1 -1 5 a,b值不在范围内
SR5 5 -1 -1 b,c值不在范围内
SR6 -1 5 -1 a,c值不在范围内
SR7 -1 -1 -1 a,b,c值不在范围内
SR8 201 5 5 a值不在范围内
SR9 5 201 5 b值不在范围内
SR10 5 5 201 c值不在范围内
SR11 201 201 5 a,b值不在范围内
SR12 5 201 201 b,c值不在范围内
SR13 201 5 201 a,c值不在范围内
SR14 201 201 201 a,b,c值不在范围内

案例分析-NextDate函数的等价类测试用例
确定等价类
M1={月份:每月有30天}
M2={月份:每月有31天}
M3={月份:此月是2月}
D1={日期:1<=日期<=28}
D2={日期:日期=29}
D3={日期:日期=30}
D4={日期:日期=31}
Y1={年:年是闰年}
Y2={年:年是平年}
弱一般等价类测试用例应该有多少?
强一般等价类测试用例应该有?
强健壮等价类测试用例?
等价类测试用例
弱一般等价类测试用例应该有4个
强一般等价类测试用例应该有
   3个(月份类)x 4个(日期类)x 2(年类)= 24个
强健壮等价类测试用例
对每个变量加上2个无效类
测试用例数为:5 x 6 x 4 = 120个
弱一般等价类:遵循单缺陷原则,要求用例覆盖每一个变量的一种取值即可,取值为有效值。     强一般等价类:遵循多缺陷原则,要求用例覆盖每个变量的每种取值之间的迪卡尔乘积,即所有变量所有取值的所有组合,取值为有效值。     弱健壮等价类:在弱一般等价类的基础上,增加取值为无效值的情况。     强健壮等价类:在强一般等价类的基础上,增加取值为无效值的情况。

基于决策表的测试
也称判定表,是分析和表达多逻辑条件下执行不同操作的情况的工具
条件桩   条件项
动作桩 动作项
条件桩:列出了问题的所有条件。通常认为列出的条件的次序无关紧要。
动作桩:列出了问题规定可能采取的操作。这些操作的排列顺序没有约束。
条件项:列出针对它左列条件的取值。在所有可能情况下的真假值。
动作项:列出在条件项的各种取值情况下应该采取的动作。
规则:任何一个条件组合的特定取值及其相应要执行的操作称为规则。
将具有相同动作,并且其条件项之间存在着极为相似关系的两条或多条规则合并为一条规则
1 列出条件桩C1:a<b+c?C2:b<a+c?C3:C<a+b?C4:a=b?C5:a=c?C6:b=c?
2 列出动作桩 非三角形 不等边三角形 等腰三角形 等边三角形 不可能
C1:a<b+c? F T T T T T T T T T T
C2:b<a+c? - F T T T T T T T T T
C3:C<a+b? - - F T T T T T T T T
C4:a=b? - - - T T T T F F F F
C5:a=c? - - - T T F F T T F F
C6:b=c? - - - T F T F T F T F
A1:非三角形 √ √ √        
A2:不等边三角形            √
A3:等腰三角形        √   √ √
A4:等边三角形     √       
A5:不可能      √ √   √   
用例ID a b c 预期输出
DT1 4 1 2 非三角形
DT2 1 4 2 非三角形
DT3 1 2 4 非三角形
DT4 5 5 5 等边三角形
DT5 ? ? ? 不可能
DT6 ? ? ? 不可能
DT7 2 2 3 等腰三角形
DT8 ? ? ? 不可能
DT9 2 3 2 等腰三角形
DT10 3 2 2 等腰三角形
DT11 3 4 5 不等边三角形

用例ID 月份 日期 年 预期输出
1--3 4 12 2001 2001年4月12日
4 4 30 2001 2001年5月1日
5 4 31 2001 不可能
6--9 1 15 2001 2001年1月16日
10 1 31 2001 2001年2月1日
11-14 12 15 2001 2001年12月16日
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 2004 2005年3月1日
20 2 29 2001 不可能
21,22 2 30 2001 不可能
边界值分析
基于定义域,不识别数据或逻辑关系
很容易自动化实现
设计工作量小
生成的测试用例数比较多
测试用例执行时间长
等价类技术
考虑数据依赖关系
标识等价类时需要更多的判断和技巧
等价类标识出以后的处理也是机械的
设计工作量和测试用例数属中等
决策表技术
又要考虑数据的逻辑依赖关系
所得测试用例可以是完备的
测试数量在一定意义上讲是最少的
需要通过多次迭代
设计工作量很大

综合案例
保险金计算程序
保险金=500 x 年龄系数 – 安全驾驶折扣
安全驾驶折扣是投保人驾驶执照上当前点数的函数
年龄系数是投保人年龄的函数
若点数低于等于与年龄有关的点数门限,则给予安全驾驶折扣
程序输入:年龄,点数
驾驶人年龄范围为16-100岁
点数范围为0-12
输出:保险金
年龄系数和安全驾驶折扣计算表
年龄范围 年龄系数 门限点数 安全驾驶折扣
16<=年龄<25 2.8 1 50
25 < =年龄< 35 1.8 3 50
35 < =年龄< 45 1.0 5 100
45 < =年龄< 60 0.8 7 150
60 < =年龄<= 100 1.5 5 200
变量 最小值 略大于最小值 正常值 略小于最大值 最大值
年龄 16 17 54 99 100
点数 0 1 6 11 12
变量 最小值 略大于最小值 正常值 略小于最大值 最大值
年龄 16 17 20 24 -
年龄 25 26 30 34 -
年龄 35 36 40 44 -
年龄 45 46 53 59 -
年龄 60 61 75 99 100
点数 0 - - - 1
点数 2 - - - 3
点数 4 - - - 5
点数 6 - - - 7
点数 8 9 10 11 12
点数边界值共有13个,年龄边界值共有21个
笛卡儿乘积(最坏情况边界值测试用例)共有273个元素,存在严重冗余
年龄等价类集合
A1={16<=年龄<25}
A2={25<=年龄<35}
A3={35<=年龄<45}
A4={45<=年龄<60}
A5={60<=年龄<=100}
点数等价类集合
P1={点数=0,1}
P2={点数=2,3}
P3={点数=4,5}
P4={点数=6,7}
P5={点数=8,9,10,11,12}
保险金程序的强等价类测试用例
用例ID 年龄 点数
1 18 0
2 18 2
3 18 4
4 18 6
5 18 10
6 30 0
7 30 2
8 30 4
9 30 6
10 30 10
11 40 0
12 40 2
13 40 4
14 40 6
15 40 10
16 50 0
17 50 2
18 50 4
19 50 6
20 50 10
21 80 0
22 80 2
23 80 4
24 80 6
25 80 10
决策表方法
年龄 16-25 16-25 25-35 25-35 35-45 35-45
点数 0-1 2-12 0-3 4-12 0-5 6-12
年龄系数 2.8 2.8 1.8 1.8 1 1
安全驾驶折扣 50 0 50 0 100 0
年龄 45-60 45-60 60-100 60-100
点数 0-7 8-12 0-5 6-12
年龄系数 0.8 0.8 1.5 1.5
安全驾驶折扣 150 0 200 0

保险金程序的决策表测试用例
用例ID 年龄 点数
1 18 0
2 18 2
3 30 0
4 30 4
5 40 5
6 40 6
7 50 7
8 50 8
9 80 5
10 80 6

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值