前言:为了在测试业务中能够更加熟练编写测试用例,现对黑盒测试作简要总结。
一、相关概念
根据测试方式来进行分类的话,软件测试可以分为黑盒测试、白盒测试和灰盒测试。
在黑盒测试中,我们进行一些输入,得到某些输出结果,只知道程序做了什么,无需了解程序的内部结构。黑盒测试又称为功能性测试或行为测试,它是一种数据驱动的测试,或者说输入/输出驱动的测试;目标在于找出程序不符合规格说明书的地方。
二、黑盒测试的测试用例设计方法
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. 因果图分析法
因果图是一种形式语言,用自然语言描述的规格说明可以转换为因果图。它弥补了等价类划分法和边界值分析法的一个缺点,即未对输入条件的组合进行分析。
因果图关系细分的话有4种,图例说明如下:
(a) 恒等:若c1=1,e1=1;若c1=0,e1=0;
(b) 非:若c1=1,e1=0;若c1=0,e1=1;
(c) 或:只有c1,c2,c3都为0时,e1=0;其余情况e1=1;
(d) 与:只有c1,c2,c3都为1时,e1=0;其余情况e1=0;
输入条件有多个的情况下,它们相互之间可能存在依赖关系,比如需要两个输入条件同时出现或者存在限制,两个输入条件不可能同时出现。这就是约束。同样的,输出结果也会有约束。约束符号说明如下:
输入条件的约束有4种:
E约束(异):a,b不能同时为1;
I约束(或):a,b,c不能同时为0;
O约束(唯一):a和b必须出现一个,且仅有一个是1;
R约束(要求):当a=1时,要求b=1;不可能说a=1而b=0;
输出结果的约束只有1种:
M约束(强制):如果a=1,则b会被强制为0。
使用因果图法设计测试用例过程如下:
(1).将规格说明分解为可执行的片段。
这是因为因果图不善于处理较大的规格说明。
(2).确定规格说明中的因果关系。
所谓“因”,是指一个明确的输入条件或输入条件的等价类。所谓“果”,是指一个输出条件或系统转换(输入对程序或系统状态的延续影响)。通过逐字逐句地阅读规格说明,同时标识出描述“因”和“果”的文字或句子,就可以将“因”和“果”确定出来。
(3).分析规格说明的语义内容,并将其转换为连接因果关系的布尔图,即因果图。
(4).给图加上注解符号,说明由于语法或环境的限制而不能联系起来的“因”和“果”。
(5).将因果图转换成一个有限项的判定表。
(6).将判定表中的列转换成测试用例。
ps:(5)和(6)在判定表法/决策表法中进行。
举个简单的例子:
某软件规格说明书包含这样的要求:第一列字符必须是A或B,第二列字符必须是一个数字,在此情况下进行文件的修改,但如果第一列字符不正确,则给出信息L;如果第二列字符不是数字,则给出信息M。
分析规格说明书,列出输入条件和输出结果:
输入条件(因):
1——第一列是A
2——第一列是B
3——第二列是一个数字
输出结果(果):
21——对文件进行修改
22——给出信息L
23——给出信息M
得到的因果图如下:
复杂点的实例可以参考:http://www.51testing.com/html/34/247534-153313.html
4. 判定表法/决策表法
判定表又称为决策表。在因果图比较复杂且绘制过程较为繁琐的情况下,我们可以根据因果图来制定判定表。
建立判定表的步骤有:
(1).选择一个“果”作为当前状态。
(2).对因果图进行回溯,查找导致该“果”为1的所有“因”的组合,要注意约束条件,有一些“因”的组合在有约束条件的情况下是不存在的。
(3).在判定表中为每个“因”的组合生成一列。
(4).对于每种“因”的组合,判断所有其他“果”的状态,并放置在一列中。
把因果图中的例子转化成判定表:
把判定表的每一列拿出来作为依据,设计测试用例。
注:黄色两列为不可能出现的情况,需要排除;绿色一行为中间结果。
5. 错误猜测法
错误猜测法依赖于直觉。其基本思想是列举出可能犯的错误或错误易发情况的清单,然后根据清单来编写测试用例。另一个思想是,在阅读规格说明时联系程序员可能做的假设来确定测试用例。
错误猜测法的要素共有三点,分别为:经验、知识、直觉。
优点:
1. 充分发挥人的直觉和经验
2. 集思广益
3. 方便使用
4. 快速容易切入
缺点:
1. 难以知道测试的覆盖率
2. 可能丢失大量未知的区域
3. 带有主观性且难以复制
一般情况下,我们使用错误猜测法来对测试用例进行补充。
6. 场景法
事件触发时的情景形成了场景,而同一事件不同的触发顺序和处理结果就形成了事件流。
在场景法中,测试流程是软件功能按照正确的事件流实现的一条正确流程,我们把这个称为该软件的基本流;而凡是出现故障或缺陷的过程,就用备选流加以标注。如下图所示:
从示意图中可以看到,直黑线表示基本流,是经过用例的最简单的路径;备选流则用不同的色彩表示。从开始用例到结束用例,有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(不适用)表明这个条件不适用于测试用例。
上表中,我们把每个场景成立的条件进行了分析,基本上已经确定了测试用例的数量,现在只要把真实数据填上,那么整个测试用例就完成了。
7. 功能图法
功能图由状态迁移图和布尔函数组成。状态迁移图用状态和迁移来描述。一个状态指出数据输入的位置(或时间),而迁移则指明状态的改变。同时要依靠因果图或判定表表示的逻辑功能。
若用节点代替状态,用弧线代替迁移,则状态迁移图就可转化成一个程序的控制流程图形式。问题就转化为程序的路径测试(如白盒测试)问题了。
仍然是举个例子:
根据流程图列表:
测试用例可以根据以上的表格来设计。设计的思路:每一条路径是一条测试用例。
8. 正交试验法
定义:从大量的(实验)数据(测试例)中挑选适量的,有代表性的点(例),从而合理地安排实验(测试)的一种科学实验设计方法。
正交试验法感觉自己理解得不是很透彻,不能讲得很好。之后理解了会再进行补充。参考讲的比较细的一篇:https://blog.csdn.net/wd168/article/details/51736105
三、测试策略
综合上述几种方法,组合出一个整体的策略:
1、如果需求文档中包含输入条件组合的情况,应首先使用因果图分析法。
2、在任何情况下都应使用边界值分析法。
3、为输入和输出确定有效和无效等价类。
4、使用错误猜测法完善测试用例。
5、根据具体项目合理使用场景法、功能图法、正交试验法。
参考文献:
《软件测试》第2版
《软件测试的艺术》第3版