黑盒用例设计方法

一、黑盒测试的基本概念
     黑盒测试又称 数据驱动测试,完全不考虑程序内部结构和内部特性,注重于测试软件的功能需求。
    由于黑盒测试不需要了解程序内部结构,所以许多 高层测试,如确认测试、系统测试、验收测试都采用黑盒测试。
黑盒测试能发现以下几类错误:
  • 功能不对或功能遺漏。
  • 界面错误。
  • 数据结构或数据库访问错误。
  • 性能问题。
  • 初始化和终止错误。
 
二、黑盒测试的优缺点
黑盒测试的优点
  • 有针对性地找问题,并且定位问题更准确;
  • 黑盒测试可以证明产品是否达到用户要求的功能,是否符合用户的工作要求;
  • 能重复执行相同的操作,测试中最枯燥的部分可由自动化完成;
黑盒测试的缺点
  • 需要充分了解产品用到的技术,测试人员需要具有较多的经验;
  • 在测试过程中很多是手工操作;
  • 测试人员需要负责大量的文档;
 
三、黑盒用例设计方法
 
1.等价类划分
 
例:计算两个1~100之间整数的和
      如果要进行完全测试,一共要设计多少个测试用例呢?加数1有1~100共计100个取值,加数2也有1~ 100共计100个取值,所以他们之间的组合就有100*100=10000种组合可能,但这只是测试了正常范围内的取值。如果用户输入的数据不在1~ 100之间呢,穷举测试肯定不可能的。
      由此引入了等价类划分思想。
                        等价类:是指某个输入域的子集合。
      等价类划分为:
有效等价类:指符合《需求规格说明书》,输入合理的数据集合。
无效等价类:指不符合《需求规格说明书》,输入不合理的数据集合。
针对从上面的例子进行等价类划分
        ———————(<1)—————————|———————(1~100)—————————|——————(>100)—————
                              无效等价类                                                   有效等价类                                                无效等价类             
    
        我们将输入域分成了一个有效等价类(1~100) 和两个无效等价类(<1,>100) ,并为每一个等价类进行编号,然后我们就可以从每一个等价类中选取一个代表性的数据来测试,设计如下表所示的测试用例:
 
编号
所属等价类
加数1
加数2
1
2(有效等价类)
3
40
43
2
1(无效等价类)
0
-1
提示“请输入1~100之间的整数”
3
3(无效等价类)
110
101
提示“请输入1~100之间的整数”
        到这里我们的工作似乎结束了,还需要设计其他测试用例吗?
        刚刚输入的数据都是整数,如果输入小数,甚至字母怎么办?
        这说明刚才的等价类还不完善,我们只考虑了输入数据的范围,没有考虑输入数据的类型(我们认为只输入数据,可是最终用户输入什么都有可能)。综合考虑输入数据的类型和范围划分等价类,如下图所示:
 
等价类划分的测试用例(扩展)
编号
所属等价类
加数1
加数2
1
2(有效等价类)
3
40
43
2
1(无效等价类)
0
-1
提示“请输入1~100之间的整数”
3
3(无效等价类)
110
101
提示“请输入1~100之间的整数”
4
4(无效等价类)
1.2
1.2
提示“请输入1~100之间的整数”
5
5(无效等价类)
A
B
提示“请输入1~100之间的整数”
6
6(无效等价类)
@
%
提示“请输入1~100之间的整数”
7
7(无效等价类)
空格
空格
提示“请输入1~100之间的整数”
8
8(无效等价类)
 
 
提示“请输入1~100之间的整数”
等价类划分的步骤:
①先考虑输入数据的数据类型( 合法和非法的)
②再考虑数据范围(合法类型中的合法区间和非法区间)
③画出示意图,区分等价类
④为每一个等价类编号
 
例:有一个档案管理系统,要求用户输入以年月表示的日期。
        条件:日期限定在1990年1月~2049年12月,并规定日期由6位数字字符组成,前4位表示年,后2位表示月。
测试用例:
    1)划分等价类并编号,下表为等价类划分的结果
 
输入等价类
有效等价类
无效等价类
 
日期的类型及长度
 
①6位数字字符
②有非数字字符
③少于6位数字字符
④多于6位数字字符
年份范围
⑤在1990~2049之间
⑥小于1990
⑦大于2049
月份范围
⑧少于6位数字字符
⑨等于00
⑩大于12
    2)设计测试用例,以便覆盖所有的有效等价类在表中列出了3个有效等价类,编号分别为①、⑤、⑧,设计的测试用例如下:
 
测试数据
期望结果
覆盖的 有效等价类
200211
输入有效
①⑤⑧
    3)为每一个无效等价类设计一个测试用例,设计结果如下:
测试数据
期望结果
覆盖的 有效等价类
95June
无效输入
20036
无效输入
2001006
无效输入
198912
无效输入
205001
无效输入
200100
无效输入
200113
无效输入
 
 
2.边界值划分
 
    程序的很多错误发生在输入或输出范围的边界上,因此针对各种边界情况设置测试用例,可以发现不少程序缺陷。
    设计方法:
  • 确定边界情况(输入或输出等价类的边界)
  • 选取正好等于、刚刚大于或刚刚小于边界值作为测试数据
例:计算两个1~100之间整数的和
    我们在设计测试用例的时。要重点考虑这两个边界问题。
根据边界值方法,测试用例修改如下:
编号
所属等价类
加数1
加数2
1
 
2(有效等价类)
 
1
1
2
2
100
100
200
3
1(无效等价类)
0
-1
提示“请输入1~100之间的整数”
4
3(无效等价类)
110
101
提示“请输入1~100之间的整数”
5
4(无效等价类)
1.2
1.2
提示“请输入1~100之间的整数”
6
5(无效等价类)
A
B
提示“请输入1~100之间的整数”
7
6(无效等价类)
@
%
提示“请输入1~100之间的整数”
8
7(无效等价类)
空格
空格
提示“请输入1~100之间的整数”
9
8(无效等价类)
 
 
提示“请输入1~100之间的整数”
 
边界值与等价划分的区别:
  • 边界值分析不是从某等价类中随便挑一个作为代表,而是这个等价类的每个边界都要作为测试条件。
  • 边界值分析不仅考虑输入条件,还要考虑输出空间产生的测试情况。
常见的边界值:
  • 文本框接受字符个数,比如用户名长度,密码长度等。
  • 报表的第一行和最后一行。
  • 数组元素的第一个和最后一个,
  • 循环的第1次、第2次和倒数第2次、最后一次。
 
 
等价类和边界值的综合示例
举例:某保险公司保费计算方式为投保额*保险率,保险率又依点数不同而有差别,10点以上费率为0.6%,10点以下费率为0.1%。保险率和以下参数有关:
  • 年龄:数字0-150
  • 性别:字符组合,区分大小写
  • 婚姻:字符组合
  • 抚养人:数字1-9人
注:其中前三个为必填项,最后一个为选填项
 
选项
参数
点数
 
 
年龄
20~39岁
6点
40~59岁
4点
60岁以上,20岁以下
2点
 
性别
MALE
5点
FEMALE
3点
 
婚姻
已婚
3点
未婚
5点
抚养人数
一人扣0.5点最多扣3点(四舍五入取整数)
考虑等价类
  • 确定输入
输入:年龄、性别、婚姻、抚养人数
  • 确定每个输入的输入条件
年龄:非负整数、0-150、 必填
        性别:字符组合、区分大小写、MALE或者FEMALE、 必填
        婚姻:字符组合、已婚或者未婚、 必填
        抚养人数:正整数、1-9、 选填
  • 对每个输入的输入条件进行等价划分
 
输入
输入条件 有效等价类
无效等价类
 
 
 
 
 
年龄
非负整数
非负整数                (1)
负整数              (7)
小数                  (8)
字母                  (9)
特殊字符           (10)
0~150
00~19                 (2)
20~39                 (3)
40~59                 (4)
60~150               (5)
 
<0                    (11)
>150                (12)
必填
填                        (6)
不填                  (13)
 
 
性别
 
字符组合
字符组合              (1)
非字符组合        (6)
区分大小写
大写                     (2)
大写                  (7)
大小写混合        (8)
MALE或FEMALE
MALE                  (3)
 FEMALE             (4)
非MALE、FEMALE(9)
必填
填                        (5)
不填                   (10)
 
 
婚姻
字符组合
字符组合              (1)
非字符组合         (5)
已婚或未婚
已婚                    (2)
未婚                    (3)
非已婚、未婚      (6)
必填
填                       (4)
不填                    (7)
 
 
抚养人数
正整数
 
 
正整数                (1)
非正整数             (6)
小数                    (7)
字母                    (8)
特殊字符             (9)
1~9
1~6                    (2)
7~9                    (3)
<1                     (10)
>9                     (11)
选填
填                      (4)
不填                   (5)
 
针对每个输入设计数据覆盖等价类
 
输入
有效值
无效值
年龄
 
 
15               (覆盖1、2、6)
25               (覆盖1、3、6)
50               (覆盖1、4、6)
80               (覆盖1、5、6)
边界值: 0、19. 20、39、40、59、60、150
-20           (覆盖7)
15.5          (覆盖8)
a               (覆盖9)
&                (覆盖10)
-999.5         (覆盖11)
180             (覆盖12)
不填             (覆盖13)
边界值:-1、151
性别
        
MALE       (覆盖1、2、3、5)
FEMALE      (覆盖1、2、4)
 
6553          (覆盖6)
male           (覆盖7)
fEMALE       (覆盖8)
男                (覆盖9)
不填               (覆盖10)
婚姻
已婚           (覆盖1、2、4)
未婚           (覆盖1、3、4)
 
1234            (覆盖5)
离婚             (覆盖6)
不填             (覆盖7)
 
 
 
抚养人数
 
5              (覆盖1、2、4)
8               (覆盖1、3、4)
不填     (覆盖3)
边界值:1、6、7、9
-6                 (覆盖6)
5.1                (覆盖7)
A                  (覆盖8)
&                  (覆盖9)
-100               (覆盖10)
100                (覆盖11)
边界值:0、10
测试用例:
 
用例编号
年龄
性别
婚姻
抚养人数
点数
1
15
MALE
未婚
不填
12
2
25
FEMALE
已婚
8
9
3
50
MALE
未婚
5
11
4
80
FEMALE
已婚
1
7
5
0
MALE
未婚
不填
12
6
19
FEMALE
未婚
不填
10
7
20
MALE
未婚
不填
16
8
39
FEMALE
已婚
6
9
9
40
MALE
已婚
7
9
10
59
FEMALE
已婚
9
7
11
60
MALE
未婚
不填
12
12
150
FEMALE
已婚
9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
13
-20
FEMALE
已婚
9
14
15.5
FEMALE
已婚
9
15
a
FEMALE
已婚
9
16
&
FEMALE
已婚
9
17
-999.5
FEMALE
已婚
9
18
180
FEMALE
已婚
9
19
不填
FEMALE
已婚
9
20
-1
FEMALE
已婚
9
21
151
FEMALE
已婚
9
22
39
6553
已婚
9
23
39
male
已婚
9
24
39
fEMALE
已婚
9
25
39
已婚
9
26
39
不填
已婚
9
27
39
MALE
1234
9
28
39
MALE
离婚
9
29
39
MALE
不填
9
30
39
FEMALE
已婚
-6
31
39
FEMALE
已婚
5.1
32
39
FEMALE
已婚
a
33
39
FEMALE
已婚
$
34
39
FEMALE
已婚
-100
35
39
FEMALE
已婚
100
36
39
FEMALE
已婚
0
37
 39
FEMALE
已婚
10
 
 
 
3.错误推测法
    基本思想:利用直觉和经验猜测出出错的可能类型,列举出程度中所有可能的错误和容易发生错误的情况,基本思想是列举出可能犯的错误或错误易发生的清单,然后根据清单编写测试用例;
        这种方法很大程度上是凭经验进行的,即凭人们对过去所作测试结果的分析,对所揭示缺陷的规律性作直觉的推测来发现缺陷。
 
 
 
4.因果图法
         因果图法比较适合输入条件比较多的情况,测试所有的输入条件的排列组合。所谓的原因就是输入,所谓的结果就是输出。
        
    利用因果图导出测试用例需要经过以下几个步骤:
①分析程度规格说明的描述中,哪些是原因,哪些是结果原因;常常是输入条件或输入条件的等价类,而结果是输出条件。
②分析程度规格说明的描述中语义内容,并将其表示成连接各个原因与各个结果的“因果图”。
③标明约柬条件。由于语法或环境的限制,有些原因和结果的组合情况是不可能出现的。
④把因果图转换成判定表。
⑤为判定表中的每一列表示的情况设计测试用例。
 
       基本图形符号:
  • 恒等:若原因出现,则结果出现;若原因不出现,则结果不出现。
  • 非(~) :若原因出现,则结果不出现;若原因不出现,则结果出现。
  • 或(V) :若几个原因中有一个出现,则结果出现;若几个原因都不出现,则结果不出现。
  • 与(N) :若几个原因都出现,结果才出现;若其中有一个原因不出现,则结果不出现。

 
    约束符号:
  • E (互斥) :表示两个原因不会同时成立,两个中最多有一个可能成立
  • I (包含) :表示三个原因中至少有一个必须成立
  • 0 (惟一) :表示两个原因中必须有一个,且仅有一个成立
  • R (要求) :表示两个原因,a出现时,b也必须出现,a出现时,b不可能不出现
 

 
 
例:有一个处理单价为2.5元的盒装饮料的自动售货机软件。若投入2.5元硬币,按可乐”。“啤酒” 、或“奶茶”按钮。相应的饮料就送出来。若投入的是3元硬币。在送出饮料的同时退还5角硬币。
 
原因(输入):
①投入2.5元硬币;
②投入3元;
③按“可乐”按钮;
④按“啤酒”按钮;
⑤按“奶茶”按钮。
中间状态:
①已投币;
②已按钮
结果(输出):
①退还5角硬币;
②送出“可乐”饮料;
③送出“啤酒”饮料;
④送出“奶茶”饮料:

 
因果图转换成判定表

 
根据判定表设计测试用例

 
 
因果图法的问题
  • 作为输入条件的原因和输出结果之间的因果关系,有时候很难从软件规格说明中得到。
  • 因果图得到的测试用例数量将达到惊人的程度,这给软件测试工作带来了沉重负担。
 
 
5.正交试验设计法
    什么是正交试验设计法?
         正交试验设计法,是一-种成对测试交互的系统的统计方法。它提供了一种能对所有变量对的组合进行典型覆盖(均匀分布)的方法。可以从大量的试验点中挑出适量的、有代表性的点,利用“正交表” ,合理的安排试验的一种科学的试验设计方法。
 
正交表的构成
  • 行数:正交表中的行的个数,即试验的次数,也是我们通过正交实验法
  • 设计的测试用例的个数。
  • 因素数:正交表中列的个数,即要测试的功能点。
  • 水平数:任何单个因素能够取得的值的最大个数,即要测试功能点的取值个数。
  • 正交表的形式: L行数(水平数^因素数)如: L8(2^7)。
 

 
 
    用正交表设计测试用例的步骤
(1)有哪些因素(功能点)
(2)每个因素有哪几个水平(功能点的取值)
(3)选择一个合适的正交表
(4)把变量的值映射到表中
(5)把每一行的各因素水平的组合做为一个测试用例
(6)加上你认为可疑且没有在表中出现的组合
 
    如何选择正交表
  • 考虑因素(功能点)的个数
  • 考虑因素水平(功能点的取值)的个数
  • 考虑正交表的行数
  • 取行数最少的一个
 
    设计测试用例的三种情况
  • 因素数(变量)、水平数(变量值)相符:因素数与水平数刚好符合正交表。
  • 因素数不相同:如果因素数不同的话,可以采用包含的方法,在正交表公式中找到包含该情况的公式,如果有N个符合条件的公式,那么选取行数最少的公式。
  • 水平数不相同:采用包含和组合的方法选取合适的正交表公式。
 
例一:视图选项卡上的“显示隐藏”组中有3个可用选项:
 
    有3个因素:网格线、编辑栏、标题
    每个因素有2个水平:选与不选
 
    选择正交表的分析:
1、表中的因素数>=3;
2、表中至少有3个因素数的水平数>=2;
3、行数取最少的一个。
4、从正交表公式中开始查找,结果为: L4(2^3)。
 
    正交表变量的映射
网格线: 0→选,1→不选
编辑栏: 0→选,1→不选
    标题:0→选,1→不选
 
列号
1
2
3
 
 
行号
1
0
0
0
2
0
1
1
3
1
0
1
4
1
1
0
                                                    ||
                                                   \ /
 
列号
1
2
3
 
 
行号
1
2
不选
不选
3
不选
不选
4
不选
不选
 
    测试用例如下:
1.选中网格线、选中编辑栏、选中标题
2.选中网格线、不选编辑栏、不选标题
3.不选网格线、选中编辑栏、不选标题
4.不选网格线、不选编辑栏、选中标题
    增补测试用例
5.不选风格线、不选编辑栏、不选标题
测试用例的减少数: 8→5
 
 
例二:根据PowerPofnt的打印功能的描述设计测试用例,功能描述如下:
  • 打印范围分:全部、当前幻灯片、给定范围
  • 打印内容分:幻灯片、讲义。备注页、大纲视图
  • 打印颜色/灰度分8颜色。灰度、黑白
  • 打印效果分8幻灯片加框、幻灯片不加框
 
    案例分析:
根据以上提到的功能说明,构造因子状态表,得到因子状态
状态/因素
A打印范围
B打印内容
C打印颜色/灰度
D打印效果
0
全部
幻灯片
颜色
幻灯片加框
1
当前幻灯片
讲义
灰度
幻灯片不加框
2
给定范围
备注页
黑白
 
3
 
大纲视图
 
 
将中文字转换成字母的因子状态表
状态/因素
A
B
C
D
0
A1
B1
C1
D1
1
A2
B2
C2
D2
2
A3
B3
C3
 
3
 
B4
 
 
    选择正交表的分析:
1、表中的因素数>=4;
2、表中至少有4个因素数的水平数>=2;
3、行数取最少的一个。
4、从正交表公式中开始查找,结果为: L16(4^5)
注:此案例中有四个被测对象,每个被测对象的状态都不一样。
 
正交表:

因为分析第5列是没有意义的,所以第5列可以删掉,由于4个因素中那么有一些是小于3的,所以第13到第16我们都可以删除
得到如下测试用例:



 
6.场景图
         用例场景是用来描述流经用例路径的过程,这个过程从开始到结東遍历用例中所有基本流和备选流。
用例场景举例:
场景1:基本流
场景2:基本流备选流1
场景3:基本流备选流1备选流2
场景4:基本流备选流3
场景5:基本流备选流3备选流1
场景6:基本流备选流3备选流1备选流2
场景7:基本流备选流4
场景8:基本流备选流3备选流4
 
举例8 ATM机用例场景
基本流
1、准备提款:用户将银行卡插入ATM取款机
2、验证银行卡: ATM机从银行卡的磁条中读取帐户代码,检查它是否是可接收的银行卡
3、输入密码: ATM机要求用户输入密码
4、验证账户和密码:确定该帐户是否有效和所输入密码是否正确
5、ATM选项:显示本机的各种选项,如果选择“取款”
6、输入金额:要从ATM机取款金额
7、授权: ATM机通过帐户、密码、金额以及帐户信息作为一笔交易发给银行系统来启动验证过程。对此事件,银行系统处理连机状态,并对授权请求给予答复,批准完成取款过程,同时更新帐户余额
8、出钞:提供现金
9、返回银行卡:银行卡被返还
10、打印收据:打印收据并提供给用户,同时更新内部记录
备选流2
ATM机内没有现金
备选流3
ATM机内现金不足
备选流4
密码有误
备选流5
帐户不存在或帐户类型有误
备选流6
帐面金额不足
 
测试用例矩阵:

 
测试用例数据:

 
 
7.流程图法
        我们在编程时,一般都需要画程序的算法流程图,可以将这一思想应用到黑盒测试领域。算法流程图是针对程序内部结构的,而黑盒测试的流程图是针对整个系统业务功能流程的。
 
流程图法的步骤:
第一步:详细了解需求
第二步:根据需求说明或界面原型,找出业务流程的各个页面以及各页面之间的流转关系
第三步:画出业务流程
第四步:写用例,覆盖所有的路径分支
 
流程图用例:订票模块业务流程图
 
 
8.小结
在实际测试过程中,我们往往需要综合各种测试技术,现在我们来总结一下如何踪合运用的前面学的测试技术。

 
        测试用例的设计方法不是单独存在的,具体到每个测试项目里都会用到多种方法,每种类型的软件有各自的特点,每种测试用例设计的方法也有各自的特点,针对不同软件如何利用这些黑盒方法是非 常重要的,在实际测试中,往往是综合使用各种方法才能有效提高测试效率和测试覆盖度,这就需要认真掌握这些方法的原理,积累更多的测试经验,以有效提高测试水平。
 
 
发布了40 篇原创文章 · 获赞 2 · 访问量 5174

猜你喜欢

转载自blog.csdn.net/Dnesity/article/details/104665020
今日推荐