突变测试

17 Mar 2025 | 4 分钟阅读

什么是变异测试?

变异测试是一种白盒测试方法,在软件测试中,我们有意在程序(被测程序)中插入错误,以验证现有的测试用例是否能够检测到错误。 在这种测试中,通过对原始程序进行一些修改来创建程序的变体(mutant)。

变异测试的主要目标是检查每个创建的变体是否产生输出,这意味着它与原始程序的输出不同。 我们将在变异程序中进行细微的修改,因为如果我们大规模地更改它,那么它将影响整体计划。

当我们检测到错误数量时,这意味着要么程序是正确的,要么测试用例无法有效地识别错误。

变异测试的目的是评估应该能够使变异代码失败的测试用例的质量,因此这种方法也被称为基于故障的测试,因为它用于在程序中产生错误,这就是为什么我们可以说变异测试是为了检查测试用例的效率而执行的。

什么是变异?

变异是对程序进行的小修改;这些小的修改旨在解决在编码过程中发生的典型的低级错误。

通常,我们以与数据匹配的形式考虑变异算子,并且还生成一些有效的环境来生成变体。

变异测试的类型

变异测试可以分为三个部分,如下所示

  • 决策变异
  • 值变异
  • 语句变异

让我们逐一了解它们

Mutation Testing

决策变异

在这种类型的变异测试中,我们将检查设计错误。 在这里,我们将在算术和逻辑运算符中进行修改,以检测程序中的错误。

例如,如果我们在算术运算符中进行以下更改

  • 加(+) → 减(-)
  • 星号(*) → 双星号(**)
  • 加(+) → 增量运算符(i++)

例如,如果我们在逻辑运算符中进行以下更改

  • 交换 P > → P<, 或 P>=

现在,让我们看一个例子,以便我们更好地理解

Mutation Testing

值变异

在这种情况下,将修改值以识别程序中的错误,并且通常我们将更改以下内容

  • 小值 → 较大值
  • 较大值 → 小值

例如

Mutation Testing

语句变异

语句变异意味着我们可以通过删除或替换行来修改语句,正如我们在下面的示例中看到的那样

Mutation Testing

在上述情况下,我们已将语句 r=15 替换为 s=15,并将 r=25 替换为 s=25。

如何执行变异测试

要执行变异测试,我们将遵循以下过程

Mutation Testing
  • 在此,首先,我们将通过生成各种版本来在程序的源代码中添加错误,这些版本被称为变体。 在这里,每个变体都有一个错误,这会导致变体不成功,并且还会验证测试用例的效率。
  • 之后,我们将借助变体程序中的测试用例和实际应用程序来查找代码中的错误。
  • 一旦我们识别出错误,我们将匹配实际代码和变异代码的输出。
  • 在比较实际程序和变异程序的输出后,如果结果不匹配,则测试用例将执行变体。 因此,测试用例必须足以识别实际程序和变异程序之间的修改。
  • 如果实际程序和变异程序产生完全相同的结果,则将保存该变体。 并且这些用例是更有效的测试用例,因为它有助于我们执行所有变体。

变异测试的优点和缺点

优点

变异测试的优点如下

  • 对于应用程序程序员来说,这是一种正确的错误检测方法
  • 变异测试是实现源代码程序广泛覆盖范围的绝佳方法。
  • 变异测试帮助我们为客户提供最可靠和最可靠的结构。
  • 该技术可以识别程序中的所有错误,并且还可以帮助我们发现代码中的疑问。

缺点

突变测试的缺点如下

  • 这种测试是一个耗时且成本较高的过程,因为我们需要创建许多变异程序。
  • 变异测试不适用于黑盒测试,因为它涉及对源代码的修改。
  • 每个变异将具有与实际程序相同的测试用例数量。 因此,除了实际测试套件之外,可能还需要测试大量变异程序。
  • 由于这是一个繁琐的过程,因此我们可以说这种测试需要自动化工具来测试应用程序。

下一主题安全测试