📜  变异测试

📅  最后修改于: 2021-01-11 01:42:54             🧑  作者: Mango

变异测试

什么是突变测试?

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

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

当我们检测到错误数量时,这表明程序正确无误或测试用例无法识别故障。

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

什么是突变?

变异是程序中的一个小修改;这些较小的修改计划用于编码过程中发生的典型的低级错误。

通常,我们以规则的形式来讨论突变运算符,这些规则与数据相匹配,并且还生成一些有效的环境来产生突变体。

变异测试的类型

变异测试可分为以下三个部分:

  • 决策突变
  • 价值突变
  • 陈述突变

让我们一一理解它们:

决策突变

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

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

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

就像我们在逻辑运算符以下更改一样

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

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

价值突变

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

  • 小价值à高价值
  • 更高的价值à小价值。

例如:

陈述突变

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

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

如何进行突变测试

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

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

变异测试的优缺点

优点

突变测试的好处如下:

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

缺点

突变测试的缺点如下:

  • 由于我们需要创建许多变体程序,因此该测试会花费一些时间并且花费较高的过程。
  • 变异测试不适用于黑盒测试,因为它包括源代码中的修改。
  • 每个突变都将具有与实际程序相同数量的测试用例。因此,可能需要在真实测试套件旁边测试大量的突变程序。
  • 由于这是一个繁琐的过程,所以我们可以说此测试需要自动化工具来测试应用程序。