黑盒测试

黑盒测试又称数据驱动的测试或者输入输出驱动的测试,不基于内部代码和设计的知识,而是基于需求和功能。

将程序视为一个黑盒子,测试目标和程序内部的机制和结构无关。如果想要发现程序的所有的错误,判定标准是穷举输入测试,不仅需要测试所有的有效输入还要测试所有的无效输入,但是一般穷举测试很难实现。因此常见的黑盒测试方法如下所示。

  • 等价类划分
  • 边界值分析
  • 因果图分析
  • 错误猜测

等价划分设计测试用例(关注输入)

将所有可能的输入数据划分成若干部分,然后从每一部分中选取少数有代表性的数据作为测试用例。

确定等价类

选取每一个输入条件,将其划分为两个或更多的组。
比如两类等价类:有效等价类代表程序的有效输入,利用有效等价类的测试用例检验程序是否实现了规格说明预先规定的功能和性能;无效等价类代表其他任何可能的输入条件,即不正确的输入值,利用这一类测试用例检验程序的冗错能力。
一些确定等价类的指导原则:

  • 输入条件规定了一个取值范围或取值的个数,即可确定一个有效等价类和两个无效等价类。如1-3,有效等价类为1-3,无效等价类是小于1和大于3
  • 输入条件规定了输入值的集合,在集合内的有效等价类和不在集合内的无效等价类
  • 输入条件规定了必须是的情况

生成测试用例

  • 为每个等价类设置一个不同的编号
  • 编写新的测试用例,尽可能多的覆盖那些尚未被涵盖的有效等价类,直到所有的有效等价类都被覆盖
  • 编写新的测试用例,覆盖一个且仅一个尚未被涵盖的无效等价类,直到所有的无效等价类都被测试用例覆盖

用单个测试用例覆盖无效等价类,是因为某些特定的输入错误检查可能会屏蔽或取代其他输入错误检查

但是等价类划分仍然忽略某些特定类型的高效测试用例

边界值分析

边界条件指的是输入和输出等价类中那些恰好处于边界、或超过边界、或在边界以下的状态,它和等价类划分有以下不同:

  • 与从等价类中挑选出任意一个元素作为代表不同,边界值分析需要选择一个或多个元素,以便等价类的每个边界都经过一次测试。(PS:边界值也可能包含在有效等价类中)
  • 与仅仅关注输入条件不同,还需要考虑从结果空间(输出等价类)

边界值分析考察的是正处于等价划分边界或边界附近的状态

设计测试用例通用指南

  • 输入条件规定一个输入值范围,应针对范围的边界设计测试用例,针对刚刚越界的情况设计无效测试用例,如-1到1,针对-1、1、-1.001和1.001
  • 输入条件规定输入值的数量,针对最小数量,最大数量,以及比最小数量少1个和比最大数量多1个的情况设计测试用例
  • 输出条件,输入条件的边界并不代表输出范围的边界,应对输出条件的范围进行测试
  • 如果输入输出是一个有序的序列,那么应特别注意该序列的第一个和最后一个元素

常见的边界值通常表现在界面屏幕、数组、报表和循环上,其表现方式如下:
1 屏幕上的光标在最左上、最右下位置
2 数组元素的第一个和最后一个
3 报表的第一行和最后一行
4 循环的第0次、第1次、倒数第2次和最后1次

等价类划分和边界值分析方法都未对输入条件的组合进行分析(输入之间存在联系)

因果图分析

根据条件组合而生成测试用例的系统性方法,过程如下:
1 将规格说明分解为可执行的片段,因果图不善于处理较大的规格说明
2 确定规格说明中的因果关系,因即是一个明确的输入条件或输入条件的等价类,果就是输出条件或系统转换(输入对程序或系统状态的延续影响),因果关系一旦确定,每个因和果都被赋予唯一的编号
3 分析规格说明的语义内容,并将其转换为连接因果关系的布尔图,即因果图
4 给图加上注解符号,说明由于语法或环境的限制而不能联系起来的因和果
5 通过仔细跟踪图中的状态变化情况,将因果图转换成一个有限项的判定表,表的每一列代表一个测试用例
6 将判定表转换为测试用例

基本符号

1 identity函数表示如果 a=1,则b=1(恒等)
2 NOT函数 表示如果 a=1,则b=0(非)
3 OR函数表示如果a或b或c等于1,则d=1(或)
4 AND函数如果a和b都等于1,则c=1(与)

约束符号

E(Exclusive)异或:表示至多一个为1
I(Inclusive)或:表示至少一个为1
O(One and Only)唯一:只有一个是1
R(Require)要求:表示a为1,b必须是1
M(Mask)强制:表示a是1,则b必须是0

因果图将规格说明转换成一个布尔逻辑网络图

错误猜测

利用直觉和经验,列举出可能犯的错误或错误易发情况的清单,然后依据清单来编写用例

组合测试策略
1 如果规格说明中包含输入条件组合的情况,优先使用因果图分析法
2 在任何情况下都应该使用边界值分析方法,是对输入和输出边界进行分析
3 应为输入和输出确定有效和无效等价类,在必要情况下对上面确定的用例进行补充
4 使用错误猜测方法增加更多的测试用例
5 针对上述测试用例集检查程序的逻辑结构,应使用判定覆盖、条件覆盖、判定/条件覆盖或多重条件覆盖

除此之外,黑盒测试还有判断表法、状态图法、随机数据法等等

休息一下,喝杯咖啡,继续创作