突变测试


突变测试

什么是突变测试?

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

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

当我们检测到错误的数量时,这意味着要么程序正确,要么测试用例识别错误的效率低下。

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

什么是突变?

突变是程序中的一个小修改;这些小的修改是针对在编码过程中发生的典型低级错误而计划的。

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

突变测试的类型

突变测试可以分为三个部分,分别是:

  • 决策突变
  • 价值突变
  • 语句突变

让我们一一了解它们:

突变测试

决策突变

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

就像我们对算术运算符进行以下更改一样:

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

就像我们对逻辑运算符进行以下更改一样

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

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

突变测试

价值突变

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

  • 小价值 à 大价值
  • 较高的价值 à 较小的价值。

例如:

突变测试

语句突变

语句突变意味着我们可以通过删除或替换以下示例中的行来对语句进行修改:

突变测试

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

如何进行突变测试

为了进行突变测试,我们将遵循以下过程:

突变测试

  • 在这方面,首先,我们将通过生成各种版本(已知的突变体)将错误添加到程序的源代码中。这里每个突变体都有一个错误,导致突变体类型不成功,也验证了测试用例的效率。
  • 之后,我们将借助突变程序中的测试用例,实际应用程序会发现代码中的错误。
  • 一旦我们识别出错误,我们将匹配实际代码和变异代码的输出。
  • 在比较实际程序和变异程序的输出后,如果结果不匹配,则测试用例执行变异程序。因此,测试用例必须足以识别实际程序和变异程序之间的修改。
  • 如果实际程序和突变程序产生了准确的结果,那么突变体就被保存了。这些案例是更活跃的测试案例,因为它可以帮助我们执行所有突变体。

突变测试的优缺点

优点

突变测试的好处如下:

  • 对于应用程序员来说,这是一种正确的错误检测方法
  • 变异测试是实现源程序广泛覆盖的极好方法。
  • 突变测试帮助我们为客户提供最成熟、最可靠的结构。
  • 这种技术可以识别程序中的所有错误,也可以帮助我们发现代码中的疑点。

缺点

突变测试的缺点如下:

  • 这个测试需要一些时间和成本,因为我们有许多需要创建的突变程序。
  • 突变测试不适用于黑盒测试,因为它包括对源代码的修改。
  • 与实际程序相比,每个突变都将具有相同数量的测试用例。因此,除了真正的测试套件之外,可能还需要测试大量的突变程序。
  • 由于这是一个繁琐的过程,所以我们可以说这个测试需要自动化工具来测试应用程序。