什么是正交阵列测试?(示例)

⚡ 智能摘要

正交阵列测试是一种黑盒技术,它使用统计阵列构建紧凑的测试集,用远少于穷举组合测试所需的测试用例来覆盖每一对输入值。

  • 🎯 核心承诺: 在生成的运行结果中,任意两个因素之间的每对水平至少出现一次。
  • 🔢 符号: 数组记为 L运行(级别)因素因此,L9(3⁴)表示四个三级因子的九次运行。
  • 📉 节省规模: 四个因素,每个因素有三个水平,从 81 种穷举组合简化为 9 种正交运行。
  • 🧮 平衡规则: 必须按照正交性原则填充各列,使任意两个因素不能同时移动,否则表格将不具有正交性。
  • 🛠️ 工具: GeneratorPICT 和 ACTS 等软件会自动构建阵列,从而消除了人为错误的主要来源。
  • ⚠️ 已知极限: 成对覆盖率无法检测到需要三个或更多特定值才能检测到的缺陷。

正交阵列测试将输入组合减少到一组平衡的小型测试用例。

正交阵列测试

正交阵列测试 (OAT) 正交阵列测试是一种使用正交数组创建测试用例的软件测试技术。它是一种统计测试方法,尤其适用于被测系统接收大量数据输入的情况。正交数组测试通过配对和组合输入数据来最大化测试覆盖率,因此只需相对较少的测试用例和更短的执行时间即可完成系统测试。

例如,验证火车票时,需要检查乘客人数、票号、座位号和车次等因素。逐一检查每个因素非常繁琐。如果质量保证工程师将多个输入组合起来,一次性进行测试,效率会更高。在这种情况下,我们可以使用正交阵列测试方法。

这种将输入数据配对或组合以节省时间的方法称为成对测试,而 OATS 技术是生成成对测试集的一种方法。由于该技术完全基于输入值和预期结果,无需查看内部代码,因此它属于…… 黑盒测试 家庭。

为什么要进行OAT(正交阵列测试)?

在目前的情况下,由于代码的复杂性,向客户交付高质量的软件产品变得越来越具有挑战性。

传统方法中,测试套件包含针对每种输入值和前提条件组合生成的测试用例。因此,需要覆盖 n 个测试用例。

但在实际情况下,测试人员没有时间执行所有测试用例来发现缺陷,因为还有其他活动,例如文档编写、客户建议和反馈等,都必须在测试阶段完成。

因此,测试经理希望优化测试用例的数量和质量,以确保最大程度 测试覆盖率 以最小的努力。这种努力被称为测试用例优化。

  • 检验成对交互作用的系统统计方法。
  • 交互和集成点是缺陷的主要来源。
  • 执行一套定义明确、简洁明了的测试用例,这些用例可能会发现大部分(但不是全部)错误。
  • 正交方法保证了所有变量之间的两两覆盖。

因此,该技术可以与团队已经使用的其他减少投入的方法并列使用。 等价类划分和边界值分析 确定哪些值值得对单个字段进行测试;正交数组决定哪些值应该一起测试。

正交阵列测试的表示方法

正交阵列可以用一个简短的公式来描述,而不是用它的内容来描述。下图展示了该公式中的三个量与阵列形状之间的关系。

正交阵列表示法,展示了 L(Runs) 公式中的游程、因子和水平。

  • 跑动次数(N) – 数组中的行数,即将生成的测试用例数。
  • 因子(K) – 数组中的列数,即可以处理的最大变量数。
  • 级别(V) – 单个因素可取的最大值数。

单个因子通常有2到3个输入参数需要测试。输入参数的最大数量决定了水平数。

从左到右读取数组名。 L9(34) 其中,9 是运行次数,3 是每个因子可以取的水平数,上标 4 是因子数。同一篇文章使用了 L4(23)这是针对三个因素(每个因素有两个水平)进行的四次运行。

两个性质决定了数组的正交性,这两个性质都必须成立,运行计数才能可信:

  • 平衡: 因子的每个级别在其各自的列中出现的次数相同。
  • 成对完备性: 对于任意两列,每一列中任意一层的任意组合出现的次数都相同。

如果第二个性质不成立,则该表只是一个缩短的测试集,而不是一个正交数组,证明归约合理的成对保证不再适用。

如何进行正交阵列测试:示例

  1. 确定场景的独立变量。
  2. 找到具有运行次数的最小数组。
  3. 将因子映射到数组。
  4. 选择任何“剩余”级别的值。
  5. 将 Runs 转录成 测试用例并添加任何未生成的、特别可疑的组合。

下面的两个示例应用了这五个步骤,首先应用于一个小的两级问题,然后应用于一个更大的三级问题。

例子1

网页有三个不同的部分(顶部、中间、底部),可以单独向用户显示或隐藏。

  • 因素数量 = 3 (顶部、中间、底部)
  • 级别数(可见性)= 2(隐藏或显示)
  • 数组类型 = L4(23)

(4 是创建 OAT 数组后得到的运行次数)

如果我们采用传统的逐节修改方法,我们需要 2 × 3 = 6 个测试用例。

测试用例 方案 要测试的值
测试#1 HIDDEN 首页
测试#2 显示 首页
测试#3 HIDDEN 半身裙/裤
测试#4 显示 半身裙/裤
测试#5 HIDDEN 中间
测试#6 显示 中间

这六次运行每次只改变一个部分,并且永远不会将两个部分同时置于选定的状态。如果改为测试所有组合,则需要 23 = 8 次跑动。

如果我们进行 OAT 测试,我们需要 4 个测试用例,如下所示:

测试用例 首页 中间 半身裙/裤
测试#1 老旧房屋 老旧房屋 老旧房屋
测试#2 老旧房屋 可见 可见
测试#3 可见 老旧房屋 可见
测试#4 可见 可见 老旧房屋

检查该表中的任意两列,所有四个隐藏/可见对都恰好出现一次,这是正交性性质的最小形式。

例子2

必须测试微处理器的功能:

  • 温度:100C、150C和200C。
  • 压力:2 psi、5 psi 和 8 psi
  • Doping 金额:4%、6% 和 8%
  • 沉积速率:0.1 mg/s、0.2 mg/s 和 0.3 mg/s

使用传统方法我们需要3个4 = 需要 81 个测试用例才能覆盖所有输入。让我们改用 OATS 方法:

影响因素数量 = 4(温度、压力、ping 数量和沉积速率)

每个因素有 3 个水平(温度有 3 个水平——100℃、150℃ 和 200℃——其他因素也同样各有 3 个水平)。

创建一个数组如下:

1. 因子数列

测试用例 # 温度 压力 Doping 量 沉积率

2. 输入与每个因子水平数相同的行数。例如,温度有 3 个水平。因此,为温度的每个水平插入 3 行。

测试用例 # 温度 压力 Doping 量 沉积率
1 100C
2 100C
3 100C
4 150C
5 150C
6 150C
7 200C
8 200C
9 200C

3. 现在分散压力,做ping 柱中的含量和沉积速率。

例如:在 100°C、150°C 和 200°C 的温度下输入 2 psi,同样地输入 doping 100C、150C、200C 等的金额均为 4%。

测试用例 # 温度 压力 Doping 量 沉积率
1 100C 2psi 4% 0.1毫克/秒
2 100C 5psi 6% 0.2毫克/秒
3 100C 8psi 8% 0.3毫克/秒
4 150C 2psi 4% 0.1毫克/秒
5 150C 5psi 6% 0.2毫克/秒
6 150C 8psi 8% 0.3毫克/秒
7 200C 2psi 4% 0.1毫克/秒
8 200C 5psi 6% 0.2毫克/秒
9 200C 8psi 8% 0.3毫克/秒

因此,在 OA 中,我们需要 9 个测试用例来覆盖。

准确性说明: 按照步骤 3 的方法,向下填充剩余的三列,重复相同的压力。ping 每个温度块内沉积三重。压力和ping 因此,数值会一起移动,像 2 psi 和 6% 这样的组合永远不会出现,所以上面的九行是一个缩减的测试集,而不是一个真正的正交数组。平衡的 L9(3)4下面的数组保持相同的九个运行,同时涵盖每两个因子之间的所有九个水平对。

测试用例 # 温度 压力 Doping 量 沉积率
1 100C 2psi 4% 0.1毫克/秒
2 100C 5psi 6% 0.2毫克/秒
3 100C 8psi 8% 0.3毫克/秒
4 150C 2psi 6% 0.3毫克/秒
5 150C 5psi 8% 0.1毫克/秒
6 150C 8psi 4% 0.2毫克/秒
7 200C 2psi 8% 0.2毫克/秒
8 200C 5psi 4% 0.3毫克/秒
9 200C 8psi 6% 0.1毫克/秒

正交阵列检验与成对(所有配对)检验

这两个术语在许多团队中经常互换使用,但它们并不完全相同。两者都旨在涵盖数值对,但区别在于最终表格的约束程度。

方面 正交阵列测试 成对(所有配对)检验
底层结构 正交阵列,借鉴自实验设计 由搜索算法生成的覆盖数组
承保规则 每对元素出现的次数相等。 每对元素至少出现一次
水平不等的因素 需要一个混合级数组,但所需形状的混合级数组可能不存在。 由生成器直接处理
典型运行次数 由于平衡要求,实际值等于或略高。 相同输入值下,等于或低于等于。
值之间的约束 难以在数组内表达 大多数现代发电机都支持

在实践中,平衡正交阵列是更清晰的教学模型,也是因子水平数相同的更安全的选择;而覆盖阵列则是大多数工具在处理输入参数复杂且不相等的实际项目时生成的。两者互为补充。 决策表测试状态转换测试它们针对的是业务规则和顺序,而不是值的组合。

正交阵列测试工具

手动构建数组仅适用于上述小型示例。超过四五个因素后,团队会使用生成器,由工具自动计算运行次数。

  • PICT: 一个来自 Microsoft参数及其值写入纯文本模型文件中,该工具会打印出组合集。它支持约束和子模型,这在某些值对无效时尤为重要。请参阅 PICT存储库.
  • 使徒行传: NIST 的一款研究工具,可生成双向至六向覆盖的覆盖阵列,并发布了一个预计算阵列库。该工具可从以下网址获取: NIST组合测试项目.
  • 商业组合平台: 托管工具新增要求 trac可用性、预期结果和导出到测试管理系统,适合需要审计跟踪的大型团队。
  • 已发布的数组库: 标准数组(如 L4、L8、L9、L16 和 L18)以表格形式列出,当因子和级别计数匹配时,可以直接复制。

无论使用哪个工具生成表格,生成的行仍然需要转换为包含真实数据和预期结果的可运行用例,然后像其他任何测试套件一样进行调度。 软件测试技术 已在项目中使用。

正交阵列测试的优势

  • 保证对所有选定变量的成对组合进行测试。
  • 减少测试用例的数量。
  • 创建更少的测试用例,但仍能涵盖每对变量的交互作用。
  • 可以处理变量的复杂组合。
  • 与手动创建的测试集相比,生成更简单且更不容易出错。
  • 它对于 整合测试并且同样适用于 配置测试浏览器、操作系统和设备的组合数量迅速增加。
  • 由于缩短了测试周期和测试时间,它提高了生产率。

储蓄复合年 回归测试因为较小的平衡测试套件成本足够低,可以每个周期重新运行,而详尽的组合测试套件通常只运行一次,然后就悄悄地放弃了。

正交阵列测试的缺点

  • 随着数据输入的增加,测试用例设计的复杂性也随之增加。因此,人工投入和时间成本也随之增加,测试人员不得不采取以下措施: 自动化测试.
  • 成对覆盖率并不等同于完全覆盖率。只有当三个特定值同时出现时才会出现的缺陷,可能在数组中保持不变。
  • 具有不同级别数的因子无法干净地映射到标准数组上,因此需要混合级别数组或覆盖数组生成器。
  • 选择层级需要根据经验判断。如果输入模型中遗漏了某个重要值,任何数组都无法将其恢复。
  • 值之间的约束(例如仅在一个国家/地区有效的支付方式)难以表达,并且通常会产生无效行,必须手动删除。

这些限制条件并非否定该技术,而只是划定了其应用范围。正交阵列可以减少组合问题,同时风险分析和 领域测试 首先确定哪些因素应该被纳入模型。

执行 OAT 时的错误或失误

  • 将测试工作重点放在了应用程序的错误区域。
  • 选择错误的参数进行组合。
  • 使用正交阵列测试,其中输入集足够小,可以进行穷举测试。
  • 对一个大到需要生成器的模型手动应用正交阵列测试。
  • 对于需要更深入覆盖的高风险应用,仅依靠正交阵列测试是不够的。

最后一项在实践中造成的损害最大。对于安全关键或财务关键功能而言,成对集合是下限而非上限,通常需要辅以针对性的案例。 系统测试 与更广泛的计划保持一致,并符合其中描述的内容。 软件测试类型.

常见问题

这是一种黑盒技术。数组仅由输入参数及其允许的值构成,不涉及源代码、分支或内部状态,因此可以在实现完成之前进行设计。

测试人员构建输入模型,通常会由业务分析师确认哪些值是合法的。开发人员负责处理内部参数,例如缓存设置。模型的质量,而非数组本身,决定了测试套件的价值。

不,这取决于它们。分区和边界分析会将每个字段简化为几个代表性值,然后数组决定将哪些值组合在一起。如果直接对未经过滤的原始值运行数组,则会生成一个不必要的大型表。

例如,L18 就混合使用了两级和三级列,因此需要一个混合级数组。如果标准数组无法满足要求,覆盖数组生成器可以直接处理数组形状,并返回比强制每个因子使用相同级数更小的表格。

任何需要同时满足三个或更多特定值的故障都属于此类。故障数据的经验研究表明,大多数故障是由一到两个参数触发的,因此成对覆盖法是有效的,但对于关键特征,建议采用三向覆盖法。

主要应用于集成和系统层面,即多个组件或设置相互作用的层面。它也适用于环境矩阵,例如浏览器、操作系统和屏幕尺寸,以及任何可配置产品,只要其出厂组合数量超过可用测试窗口即可。

机器学习读取需求和生产日志,提出关键因素和级别,缺陷历史模型则对哪些组合值得三方覆盖进行排序。数组数学运算是确定性的——智能之处在于选择哪些数据进入模型。

它会为生成器、读取行的数据驱动循环以及相关的断言起草模型文件。由于语言模型可能会生成看似合理但并非正交的表格,因此请使用生成器本身验证覆盖率声明。

总结一下这篇文章: