软件测试 - 变异测试



软件为了交付预期的性能,会经历各种测试阶段。变异测试是一种用来构建新的测试用例并分析已有的用于验证软件的测试用例质量的测试类型。

什么是软件变异测试?

软件变异测试也称为代码变异测试。它是白盒测试技术下的一个概念。在此期间,对代码进行小的更改以验证现有测试用例的有效性,或识别程序源代码中使用的测试数据中的弱点。

软件变异测试可用于验证设计模型、数据库、XML 等。它是一种结构化测试,其中代码的结构用于帮助测试过程。它基本上以微小的方式重写代码,以便可以避免或最大限度地减少代码冗余。在更新源代码后,预计现有测试用例会识别它们。代码的更改通常会导致引入错误。

变异测试主要用于评估软件测试工具的有效性,而不是软件本身。它主要在单元测试时使用。它捕获其他测试方法未检测到的缺陷。在执行变异测试时,可以删除或多次使用一行代码,可以修改真或假语句或变量等。一旦代码中的变异被合并,它们就会被验证并与实际代码进行比较。

如果在变异代码上运行的现有测试用例识别出的缺陷与在原始代码上运行时识别出的缺陷相同,那么代码要么未执行,要么现有测试用例无法识别变异。然后表明需要改进现有测试用例以提高其效率。成功的变异测试结果应该在对原始代码和变异代码执行相同的测试用例时产生不同的测试结果。当来自变异代码和原始代码的测试结果不同时,突变体将不再使用,这些被称为已杀死的突变体。

计算变异分数百分比的公式

变异分数可以通过将杀死的突变体的总数除以突变体的总数,然后乘以一百来计算。

Mutation Score = (Total count of  mutants killed/ Total count of mutants) * 100

如果我们获得一百分的变异分数,这表明现有测试用例是有效且足够的。

软件变异测试的目标

软件变异测试的目标列在下面:

  • 软件变异测试验证尚未验证的代码部分。
  • 软件变异测试识别遵循其他测试方法未检测到的代码缺陷。
  • 软件变异测试检测代码中的新型问题。
  • 软件变异测试衡量代码的变异分数。
  • 软件变异测试可以了解现有测试套件的有效性。

软件变异测试的类型

软件变异测试的不同类型列在下面:

1. 值变异

在这种类型中,修改常量的值以识别代码中的问题。对非常大的值进行小的更新,或将大的值更新为较小的值。例如:

int i = 100000089;
int j =  5678;
int k = 91011;
int c = (j * k) % i;
Updated Code:
int i = 1089;
int j =  5678;
int k = 91011;
int c = (j * k) % i;

2. 判定变异

在这种类型中,更新逻辑或算术运算符以识别程序源代码中的问题。例如:

if(i = j)
   k = 35;
else
   k = 50;
Updated Code:
if(i != j)
   k = 35;
else
   k = 50;

3. 语句变异

在这种类型中,删除语句或将其替换为另一个语句。例如:

if(i = j)
   k = 35;
else
   k = 50;
Updated Code:
if(i != j)
   m = 35;
else
   m = 50;

用于软件变异测试的工具

下面列出了用于软件变异测试的各种工具:

  • PIT
  • Insure++
  • Jester
  • Jumble
  • MuClipse

软件变异测试的优点

软件变异测试的优点列在下面:

  • 软件变异测试提高了程序源代码中错误识别的水平。
  • 软件变异测试有助于摆脱代码中不清楚的部分。
  • 软件变异测试检测并解决代码中的问题。
  • 软件变异测试为设计或自动化更好、更有效的测试用例提供指导。
  • 软件变异测试提高了代码中使用的编程水平。

软件变异测试的缺点

软件变异测试的缺点如下:

  • 软件变异测试是一个昂贵且耗时的过程。
  • 软件变异测试仅适用于白盒测试,不能应用于黑盒测试技术。
  • 有时变异体很复杂,因此不容易设计和执行它们以针对现有的测试套件。
  • 执行软件变异测试的测试人员应该经验丰富,并且应该具备编程和技术技能。
  • 选择合适的自动化工具来执行变异测试并不容易。

结论

本教程总结了关于软件变异测试的全面内容。我们从描述什么是软件变异测试开始,包括计算变异分数百分比的公式,软件变异测试的目标是什么,软件变异测试的不同类型是什么,用于软件变异测试的各种工具是什么,软件变异测试的优点是什么,软件变异测试的缺点是什么。这使您掌握了软件变异测试的深入知识。明智的做法是继续练习您所学的内容,并探索与软件测试相关的其他内容,以加深您的理解并拓宽您的视野。

广告