突变测试
突变测试
什么是突变测试?
突变测试是软件测试中的一种白盒方法,我们故意在其中插入错误一个程序(在测试中)来验证现有的测试用例是否可以检测到错误。在这个测试中,程序的突变体是通过对原始程序进行一些修改来创建的。
突变体测试的主要目的是检查每个突变体是否创建了一个输出,这意味着它不同于原始程序的输出。我们将对变异程序稍作修改,因为如果我们大规模更改它,会影响整体计划。
当我们检测到错误数量时,这意味着程序是正确的或测试用例识别错误的效率低下。
变异测试的目的是评估应该能够使变异代码失败的用例的质量,因此这种方法也被称为基于故障的测试用于在程序中产生错误,这就是为什么我们可以说执行变异测试是为了检查测试用例的效率。
什么是变异?
变异是程序中的一个小修改;这些小的修改是针对在编码过程中发生的典型低级错误进行的。
通常,我们以规则的形式考虑变异算子,以匹配数据并生成一些有效的环境
突变测试的类型
突变测试可以分为三个部分,如下所示:
决策突变
值突变
语句变化
让我们一一了解:
决策突变
在这种类型的突变测试中,我们将检查设计错误。在这里,我们将对算术和逻辑运算符进行修改以检测程序中的错误。
就像我们对算术运算符进行以下更改:
加(+)→减(-)
星号(*)→双星号(**)
plus(+)→增量运算符(i++)
就像我们在逻辑运算符上做如下改动
交换 P > → P,或 P >=
现在,让我们看一个例子以便我们更好地理解:
值突变
在这里,将修改值以识别程序中的错误,通常我们会更改以下内容:
小价值 à 大价值
较高的价值 à 较小的价值。
例如:
Statement Mutations
Statement mutations 意味着我们可以通过删除或替换以下示例中的行来对语句进行修改:
在上面的例子中,我们将语句 r=15 替换为 s=15,将 r=25 替换为 s=25、
如何进行变异测试
为了进行变异测试,我们将按照以下流程进行:
在这里,首先,我们将通过生成各种版本(已知的突变体)将错误添加到程序的源代码中。这里每个突变体都有一个错误,导致突变体类型不成功,也验证了测试用例的效率。
之后,我们将借助变异程序中的测试用例,实际应用程序会发现代码中的错误。
一旦我们确定了错误,我们就会匹配实际代码和变异代码的输出。
在比较实际程序和变异程序的输出后,如果结果不匹配,则测试用例执行变异程序。因此,测试用例必须足以识别实际程序和变异程序之间的修改。
如果实际程序和突变程序产生了准确的结果,那么突变体就被保存了。这些案例是更活跃的测试案例,因为它可以帮助我们执行所有突变体。
突变测试的优缺点
优势
突变测试的好处如下:
对于应用程序员来说,这是一种正确的错误检测方法
变异测试是实现源程序广泛覆盖的绝佳方法。
突变测试帮助我们为客户提供最成熟、最可靠的结构。
这种技术可以识别程序中的所有错误,也可以帮助我们发现代码中的疑点。
缺点
突变测试的缺点如下:
此测试需要一些时间和成本,因为我们需要创建许多突变程序。
突变测试不适用于黑盒测试,因为它包括对源代码的修改。
与实际程序相比,每个突变都将具有相同数量的测试用例。因此,除了真正的测试套件外,可能还需要测试大量的变异程序。
因为这是一个乏味的过程,所以我们可以说这个测试需要自动化工具来测试应用程序。