4.2 黑盒测试技术
以下各节中讨论的常用黑盒测试技术包括:
• 等价类划分
• 边界值分析
• 判定表测试
• 状态转移测试
4.2.1 等价类划分
等价类划分(EP)基于给定分区中的所有元素都会被测试对象以相同方式处理的预期将数据划分为多个分区(称为等价类)。此技术背后的原理是,如果测试用例测试了等价类中的一个值,并检测到缺陷,那么任何来自同一等价类的其他值的测试用例也应该能够检测到这个缺陷。因此,每个分区执行一个测试就足够了。
等价类划分可应用于与测试对象相关的任何数据元素,包括输入、输出、配置项、内部值、与时间相关的值和接口参数。等价类可以是连续的或离散的、有序的或无序的、有限的或无限的。等价类不能重叠,并且必须是非空集合。
包含有效值的分区称为有效等价类。包含无效值的分区称为无效等价类。有效值和无效值的定义可能因团队和组织而异。例如,有效值可能被解释为应该由测试对象处理的那些值,或者在规格说明中定义为其处理方式的值。无效值可能被解释为应该被测试对象忽略或拒绝的那些值,或者在测试对象规格说明中未定义其处理方式的值。
在等价类划分中,覆盖项是等价类划分。要使用这种技术实现 100%覆盖率,测试用例必须通过对所有已识别的等价类(包括无效等价类)至少覆盖每个分区一次。覆盖率是由被测试用例执行的等价类数量,除以已确定的等价类总数来度量的,并以百分比表示。
4.2.2 边界值分析
边界值分析(BVA)是基于执行等价类边界的技术。因此,边界值分析只能用于有序分区。分区的最小值和最大值是它的边界值。在边界值分析中,如果两个元素属于同一个分区,那么它们之间的所有元素也必须属于该分区。
边界值分析侧重于分区的边界值,因为开发人员更容易在这些边界值上出错。边界值分析发现的典型缺陷往往是位于实施边界上,这些边界在预期边界的上下相邻边界往往发生错位,或完全忽略了这些边界的处理。
在二值边界值分析中,每个边界值都有两个覆盖项:该边界值以及属于相邻分区的最近邻值。为了让二值边界值达到 100%的覆盖率,测试用例必须执行所有的覆盖项,即所有已识别的边界值。覆盖率是由已被执行的边界值的数量,除以已识别的边界值总数度量,并以百分比表示。
在三值边界值分析中,每个边界值都有三个覆盖项:该边界值以及两侧的相邻值。因此,在三值边界值分析中,某些覆盖项可能不是边界值。为了让三值边界值分析达到 100%的覆盖率,测试用例必须执行所有的覆盖项,即已识别的边界值及其相邻值。覆盖率是由已被执行的边界值及其相邻值的数量,除以已识别的边界值及其相邻值的总数度量,并以百分比表示。
三值边界值分析比二值边界值分析更严格,因为它可以检测出二值边界值分析所忽略的缺陷。例如,如果判定“if (x ≤ 10) …”错误地实现为“if(x=10)…”,则按照二值边界值生成的测试用例(x=10,x=11)无法检测出该缺陷。然而,由三值边界值生成的 x=9,可能会检测出该缺陷。
4.2.3 判定表测试
判定表用于测试系统需求的实现,这些需求指定了不同的条件组合产生不同的结果。判定表是记录复杂逻辑(如业务规则)的有效方法。
在创建判定表时,定义了系统的条件和导致的动作。这些组成了判定表的行。判定表的每一列对应了一个判定规则,该规则定义了各种条件的唯一组合以及相关的动作。在有限判定表中,所有条件和动作的值(除了不相关或不可行的条件外,参阅下文)表示为布尔值(“真”或“假”)。另外,在扩展判定表中,某些或者所有条件和动作也可以采用多个值(例如,数字范围、等价类、离散值)。
条件的符号如下:“T”(true)表示满足条件;“F”(false)表示不满足条件;“-”表示条件的取值与动作结果不相关;“N/A”表示该条件对于给定的规则是不可行的。动作中的“X”表示动作应该发生;空白表示动作不应该发生。也可以使用其他符号。
完全的判定表有足够多的列来覆盖条件的每种组合。通过删除包含不可行的条件组合的列,能简化判定表。通过合并列,也能最小化判定表。在某些条件不影响结果的情况下,可将表中的某些列合并为一列。判定表最小化算法不在本大纲的范围内。
在判定表测试中,覆盖项是包含可行条件组合的列。为了让这种技术达到 100%的覆盖率,测试用例必须执行所有这些列。覆盖率是由已被执行的列数量,除以可执行列的总数度量,并以百分比表示。
判定表测试的优点是提供了系统化的方法来识别所有的条件组合,否则其中的某些组合可能会被忽视。它也有助于发现需求中的任何漏洞或不一致。如果有很多条件,那么执行所有判定规则可能比较耗时,因为规则的数量会随着条件的数量呈指数增长。在这种情况下,为了减少需要执行的规则的数量,可以使用最小化判定表或基于风险的方法。
4.2.4 状态转移测试
状态转移图通过显示系统可能的状态和有效的状态转移来模拟系统的行为。转移由事件触发,该事件可能由守护条件进一步限定。假设转移是瞬时的,有时可能导致软件采取动作。常见的转移标签语法如下:“事件 [守护条件] / 动作”。如果守护条件和动作不存在或与测试人员无关,则可以被省略。
何时使用状态转换?
- 当测试人员正在测试应用程序的一组有限的输入值时,可以使用此方法。
- 当测试人员试图测试被测应用程序中发生的事件序列时。 即,这将允许测试人员针对一系列输入值测试应用程序行为。
- 当被测系统过去依赖于事件/值时。
什么时候不依赖状态转换?
- 未针对顺序输入组合进行测试时。
- 如果要针对不同的功能(例如探索性测试)进行测试
状态表是等价于状态转移图的一种模型。它的行表示状态,列表示事件(可能还包括守护条件)。状态表条目(单元格)表示转移,并包含目标状态以及结果动作(如果已定义)。与状态转移图相反,状态表通过空白单元格明确显示无效的转移。
基于状态转移图或状态表的测试用例通常表示为事件序列,这些事件会导致一系列的状态变化(和动作,如果需要)。一个测试用例可以并且通常会覆盖状态之间的若干次转移。
在全状态覆盖中,覆盖项是状态。为了达到 100%的全状态覆盖率,测试用例必须确保所有状态都被访问到。覆盖率是由已被访问的状态数量,除以状态总数度量,并以百分比表示。
在有效转移覆盖(也称为 0-switch 覆盖)中,覆盖项是单个有效转移。为了达到 100%的覆盖率,测试用例必须执行所有的有效转移。覆盖率是由已被执行的有效转移的数量,除以有效转移的总数度量,并以百分比表示。
在全转移覆盖中,覆盖项是状态表中显示的所有转移。为了达到 100%的全转移覆盖率,测试用例必须执行所有的有效转移,并尝试执行无效转移。在单个测试用例中仅测试一个无效转移有助于避免错误屏蔽,即一个缺陷阻止另一个缺陷被发现的情况。覆盖率是由已执行的测试用例所覆盖的执行有效转移和尝试无效转移的数量,除以有效和无效转移的总数度量,并以百分比表示。
全状态覆盖弱于有效转移覆盖,因为它通常可以在不执行所有转移的情况下达到。有效转移覆盖是最广泛使用的覆盖准则。达到完整的有效转移覆盖可保证完整的全状态覆盖。达到完整的全转移覆盖可同时保证完整的全状态覆盖和完整的有效转移覆盖,并且应该是关键任务和安全关键软件的最低要求。
原创文章,作者:iTestCat,保留所有权利,禁止转载,如若转载,请联系作者!