前言:为了在测试业务中能够更加熟练编写测试用例,现对黑盒测试作简要总结。
一、相关概念
根据测试方式来进行分类的话,软件测试可以分为黑盒测试、白盒测试和灰盒测试。
在黑盒测试中,我们进行一些输入,得到某些输出结果,只知道程序做了什么,无需了解程序的内部结构。黑盒测试又称为功能性测试或行为测试,它是一种数据驱动的测试,或者说输入/输出驱动的测试;目标在于找出程序不符合规格说明书的地方。
二、黑盒测试的测试用例设计方法
1. 等价类划分法
等价类划分的目标是把可能的测试用例集缩减到可控制且仍然足以测试软件的小范围内。等价类包括了有效等价类和无效等价类。其中,有效等价类代表对程序的有效输入,而无效等价类代表其他任何可能的输入条件(即不正确的输入值)。
使用等价划分法设计测试用例主要有两个步骤:
1.确定等价类
2.生成测试用例,过程如下:
(1).为每个等价类设置一个不同的编号。
(2).对于有效等价类,每个测试用例都要尽可能多地覆盖那些还没有被涵盖的有效等价类,直到所有的有效等价类都被测试用例所覆盖。
(3).对于无效等价类,每个测试用例只能覆盖一个还没有被涵盖的无效等价类,直到所有的无效等价类都被测试用例所覆盖。
注:用单个测试用例覆盖无效等价类,是因为在一些输入错误检查中,可能会出现优先级高的输入错误检查屏蔽或者取代优先级低的输入错误检查的情况。
等价划分的技巧:
(1).一定要考虑建立处理默认值,空白,空值,零值或者无输入等条件的等价划分;
(2).无效等价类要注意非法,错误,不正确和垃圾数据。比如软件要求输入数字,就输入字母;只接受正数,就输入负数等等。
举个例子
注册网易163邮箱时,邮箱名要求6~18个字符,可使用字母、数字、下划线,需以字母开头。
等价类列举表如下:
注:非打印字符指在计算机中有一些字符是确确实实存在,但是它们不能够显示或者打印出来。以ASCII码表为例,ASCII码值在0-31的为控制字符,无法显示和打印。
根据等价类表编写测试用例:
ps:红框中的-4是WPS的bug,输入(4)或者(4)都自动变成-4,不是我写错了~~
2. 边界值分析法
如果在悬崖峭壁边可以自信而安全地行走而不掉下去,平地就几乎不在话下了。如果软件能在其边界运行,那么在正常情况下就应该不会有什么问题。
所谓边界条件,指的是输入和输出等价类中那些恰好处于边界,或超出边界,或在边界以下的状态。
边界值分析法实际上是对等价类划分法的补充,是对输入输出的边界值进行测试的一种黑盒测试方法。
边界值分析的技巧:
(1).提出边界条件时,一定要测试临近边界的有效数据,测试最后一个可能有效的数据,同时测试刚超过边界的无效数据。
(2).如果要选择在等价划分中包含哪些数据,就根据边界来选择。
相关扩展:
边界条件一般在产品说明书中有定义,或者在使用软件的过程中很容易找到。而次边界条件,又称为内部边界条件,位于软件内部,最终用户看不到。比如为了获得更高的精度,复杂的数值分析程序根据数字大小可能切换到不同的等式以解决问题。而这在黑盒测试中对于测试人员来说是不可见的。
由于所测试的软件可能有许多其他的次边界条件,软件测试员需要与开发人员交流,获得应该测试的次边界条件的建议。
使用边界值分析法来对等价类划分法中的例子进行补充优化:
邮箱名要求6~18个字符,那么应根据5,6,7,17,18,19个字符的情况来设计测试用例。
补充优化后的测试用例表如下:
3. 错误猜测法
错误猜测法依赖于直觉。其基本思想是列举出可能犯的错误或错误易发情况的清单,然后根据清单来编写测试用例。另一个思想是,在阅读规格说明时联系程序员可能做的假设来确定测试用例。
错误猜测法的要素共有三点,分别为:经验、知识、直觉。
优点:
1. 充分发挥人的直觉和经验
2. 集思广益
3. 方便使用
4. 快速容易切入
缺点:
1. 难以知道测试的覆盖率
2. 可能丢失大量未知的区域
3. 带有主观性且难以复制
一般情况下,我们使用错误猜测法来对测试用例进行补充。
4. 场景法
事件触发时的情景形成了场景,而同一事件不同的触发顺序和处理结果就形成了事件流。
在场景法中,测试流程是软件功能按照正确的事件流实现的一条正确流程,我们把这个称为该软件的基本流;而凡是出现故障或缺陷的过程,就用备选流加以标注。如下图所示:
从示意图中可以看到,直黑线表示基本流,是经过用例的最简单的路径;备选流则用不同的色彩表示。从开始用例到结束用例,有1个基本流和4个备选流,选取流经不同的路径,得到8种场景。分别是:
场景1:基本流
场景2:基本流 备选流1
场景3:基本流 备选流1 备选流2
场景4:基本流 备选流3
场景5:基本流 备选流3 备选流1
场景6:基本流 备选流3 备选流1 备选流2
场景7:基本流 备选流4
场景8:基本流 备选流3 备选流4
使用场景法设计测试用例的步骤是:
(1).根据说明,描述出程序的基本流及各项备选流;
(2).根据基本流和各项备选流生成不同的场景;
(3).对每一个场景生成相应的测试用例;
(4).对生成的所有测试用例重新复审,去掉多余的测试用例,测试用例确定后,对每一个测试用例确定测试数据值。
还是举个例子:
以在淘宝上买水杯为例,整个购买过程为:用户登录到网站后,进行水杯的选择,当选好自己心仪的水杯后,加入购物车,进行结帐的时候,生成订单并付款,整个购物过程结束。
首先我们需要根据描述确定基本流和备选流:
根据基本流和备选流来确定场景:
下图显示了一种通用格式,其中各行代表各个测试用例,而各列则代表测试用例的信息。V表明这个条件是 VALID(有效的), I表明这个条件是 INVALID(无效的),n/a(不适用)表明这个条件不适用于测试用例。
上表中,我们把每个场景成立的条件进行了分析,基本上已经确定了测试用例的数量,现在只要把真实数据填上,那么整个测试用例就完成了。
三、测试策略
综合上述几种方法,组合出一个整体的策略:
1、在任何情况下都应使用边界值分析法。
2、为输入和输出确定有效和无效等价类。
3、使用错误猜测法完善测试用例。