黑盒测试常用的方法:等价类、边界值、因果图、判定表、正交实验、场景法、状态转换,还有错误猜测法等。
①等价类
所谓等价类划分就是把程序的输入域划分成若干部分,然后从每部分选取少量的具有代表性的数据作为测试用例。通过划分等价类可以大幅度的减少测试工作量。
六条确定等价类的原则:
1. 在输入条件规定了输入值的范围或值的个数的情况下,可以确立一个有效等价类和两个无效等价类。
2. 在输入条件规定了输入值的集合或者规定了“必须如何”的条件的情况下,可以确立一个有效等价类和一个无效等价类。
3. 在输入条件是一个布尔量的时候,可确定一个有效等价类和一个无效等价类。
4. 在规定了输入数据的一组值(n个),并且程序要对每个输入值分别处理的情况下,可以确定n个有效等价类和一个无效等价类。
5. 在规定了输入数据必须遵守的规则的情况下,可以确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)。
6. 在确知已划分的等价类中,各元素在程序中的处理方式不同的情况下,则应再将该等价类划分为更小的等价类。
在确定测试用例时有个原则要注意:一条测试用例尽量覆盖所有的有效等价类,一个无效等价类对应一条测试用例。
我们假设三条边是:A、B、C。如果构成三角形应该满足下面的条件:
A>0,B>0,C>0 并且A+B>C,A+C>B,B+C>A
等腰的还要满足A=B或A=C或B+C
等边的要满足A=B且A=C且B=C
根据这些条件我们来列出等价类表
输入条件 |
有效等价类 |
无效等价类 |
是否构成三角形 |
A>0 (1) |
A<=0 (7) |
B>0 (2) |
B<=0 (8) |
|
C>0 (3) |
C<=0 (9) |
|
A+B>C (4) |
A+B<=C (10) |
|
A+C>B (5) |
A+C<=B (11) |
|
B+C>A (6) |
B+C<=A (12) |
|
是否等腰三角形 |
A=B (13) |
A!=B and A!=C and B!=C (16) |
A=C (14) |
||
B=C (15) |
||
是否等边三角形 |
A=B and A=C and B=c (17) |
A!=B (18) |
A!=C (19) |
||
B!=C (20) |
根据这个表我们就可以确定测试用例了
序号 |
(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 |
3 5 2 |
11 |
|
7 |
3 1 2 |
12 |
|
8 |
3 3 4 |
1,2,3,4,5,6,13 |
是等腰三角形 |
9 |
3 4 3 |
1,2,3,4,5,6,14 |
|
10 |
4 3 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,15,18 |
不是等边三角形 |
14 |
3 3 4 |
1,2,3,4,5,6,13,19 |
|
15 |
3 4 3 |
1,2,3,4,5,6,14,20 |
②边界值
边界值分析法选择测试用例的原则:
1.如果输入条件规定了值得范围,则应取上点、离点和内点作为输入数据(内点:区域内的点;上点:无论开区间还是闭区间,都是边界上的点;离点:开区间的离点就是区域内离上点最近的点,闭区间的离点就是区间外离上点最近的点)
2<=X<=6: 测试用例为1,2,4,6,7
2<X<6:测试用例为2,3,4,5,6(2、6是上点,3、5是离点,4是内点)
2.如果输入条件规定了值得个数,则用最大个数,最小个数,比最大格式多1和比最小个数少1作为测试用例
3.将1、2用于输入条件
4.若输出域或者输出域是有序集合,选择第一个元素和最后一个元素作为测试用例
5.若使用了内部数据结构,选择内部数据结构边界值作为测试用例
③因果图和判定表
判定表法可以略过因果图的绘制,直接列出所有组合进行筛选。
在实际测试中,许多操作时具有相互联系的,只有执行A动作才会产生B结果,像这种测试我们就需使用因果图。
现在地铁一卡通充值,窗口越来越少了,都推荐自动充值机充值了,我们把它简化一下,只能投入50和100的人民币,相应的也只能充值50和100元。
根据因果图填判定表:
④正交实验法
正交实验法主要适用于一些配置功能的界面和兼容性测试,其他需要组合的界面。正交实验法也是针对有效等价类的。
有一款打印软件,打印范围分为全部、当前幻灯片、给定范围,共三种情况;打印内容分为幻灯片、讲义、备注页、大纲视图,共四种方式;打印颜色/灰度分为颜色、灰度、黑白,共三种设置;打印效果分为幻灯片加框和幻灯片不加框两种方式。如果要将这些情况全部都覆盖测试,应该是3*4*3*2=72种情况。这些用例太多,全部测试任务量太多。
这种情况我们就可以使用正交试验法来减少测试用例数。首先看一下关于正交试验的一些基本概念和术语。因素:凡欲考察的变量称为因素,这里就是4个,打印范围、打印内容、打印颜色/灰度、打印效果。水平就是变量的取值,这里打印范围的水平是3(有3种情况),打印内容是4种,打印颜色/灰度是3种,打印效果是2种。接下来我们就需要找适合的正交表。这里最大的水平是4,因素是4,所以4的4次幂的正交表就符合我们的要求。
⑤场景法
场景法最主要的就是能够分析出基本流和备选流。场景法主要适用于安装程序、向导类功能和多界面切换完成的功能。
基本流就是按照正确的事件流来实现的流程。备选流就是出现故障或缺陷的过程。场景就是若干事件流首尾拼接构成一个测试场景。来看一个场景图:
每个场景对应一个测试用例,对每个用例进行评审,删掉重复的就可以了。
⑥状态迁移法
被测系统的功能依赖于数据的状态,像常见的工作流系统(OA),对于这类软件状态迁移法就在合适不过了。
案例研究1:某航空公司的订票系统 |
||||||||||||
客户提供机票信息,订票系统根据这些信息订票,将订单状态标记为Made |
||||||||||||
同时订票系统启动计时器,要求客户在指定时间内必须付费 |
||||||||||||
计时器超时前,客户付费,订单状态标记为Paid |
||||||||||||
客户可以打印处于Paid状态的订单机票,订单系统将为用户出票,订单状态标记为Ticketed |
||||||||||||
客户使用机票登机后,订单状态标记为Used(结束订单) |
||||||||||||
订票系统计时器超时后客户未付费,订票系统将取消本次机票预订,订单状态为CanceledNonPay |
||||||||||||
若在计时器超时之前,客户要求取消本次订票,订票系统将取消本次机票预订,订单状态为CanceledByCustomer |
||||||||||||
若客户在付费后取消订票,订单状态标记为CanceledByCustomer,但需要将相关的机票款项按规定退还给客户 |
||||||||||||
若客户在拿到机票后取消订票,订单状态标记为CanceledByCustomer,客户需要将机票退回航空公司,航空公司收到退票后将相关的机票款项按规定退还给客户 |
||||||||||||
电子机票的状态 |
事件 |
|||||||||||
Made初始创建 |
提交订单 |
|||||||||||
Paid已付费 |
客户付费 |
|||||||||||
Ticketed已出票 |
打印机票 |
|||||||||||
Used已使用 |
登机使用 |
|||||||||||
CanceledNonPay超时取消 |
计时器超时未付费 |
|||||||||||
CanceledByCustomer用户取消 |
客户取消 |
|||||||||||
客户已付费取消 |
||||||||||||
拿到机票后取消 |
将这些状态和事件状态图表示
在形成测试用例的时候有几个准则:
(1)至少覆盖所有状态一次啊
(2)至少覆盖所有事件一次
(3)至少覆盖所有转换一次
(4)至少覆盖所有路径一次