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