黑盒测试:测试用例的设计方法
黑盒测试常用的方法:等价类、边界值、因果图、判定表、正交实验、场景法、状态转换,还有错误猜测法等。
①等价类
所谓等价类划分就是把程序的输入域划分成若干部分,然后从每部分选取少量的具有代表性的数据作为测试用例。通过划分等价类可以大幅度的减少测试工作量。
六条确定等价类的原则:
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)至少覆盖所有路径一次