变异测试

变异测试是一种结构测试方法,用于检查测试程序的效率或精度。此方法有助于检查被测应用程序中的缺陷数量。它还有助于估计或提高测试套件的充足性。

变异测试

为什么它被命名为变异测试?

变异测试的命名是这样的,因为创建了突变体(程序中的小变化)并将其引入程序代码中。该策略也称为基于故障的测试方法,因为通过将单个缺陷引入原始程序代码来创建突变体。

为什么需要进行突变检测?

测试覆盖率被认为是软件测试中的重要因素。变异测试有助于分析一组测试策略是否足以确保产品符合质量要求。如果我们无法解决任何问题,我们无法保证系统没有bug。

在变异测试中,软件代码会发生微小变化。在此之后,针对突变程序检查一组测试用例。良好的单元测试将能够检查程序代码中的缺陷。

如何进行变异测试

  1. 创建突变体软件 - 需要首先通过将单个缺陷引入AUT来创建程序的突变体。QA测试人员可以根据需要引入尽可能多的突变体。他们还需要确保每个突变体保持独特,并且也与原始系统不同。

  2. 测试用例准备 - QA团队应该能够以能够识别突变体引起的问题的方式制作测试用例。

  3. 测试原始软件 - QA测试人员需要检查输入软件的测试用例输出是否与预期结果相同。否则,需要修复问题,并且需要测试软件,直到AUT没有缺陷。

  4. 突变软件测试 - 突变软件需要使用与原始软件相同的测试用例集进行测试。如果突变体软件的输出与原始软件的输出不同,则需要将突变体标记为死亡。它不应该再次测试。

  5. 突变得分计算 - 定义为计数od死突变体与非等效突变体的比率。Mutation得分的理想值是1。

  6. 突变评分分析 - 突变评分与测试效率直接相关。QA测试仪可以重复突变测试,直到获得满意的结果。

突变测试类型:

突变检测可大致分为三类 - 价值突变,决策突变和语句突变。

在值突变中,常数或参数的值被改变。例如,在循环中将值更改为更大或更小,初始化值更改。

决策突变 - 这有助于修改程序代码,以便反映滑动错误。例如,> a更改为<a。

语句变异 - 在此类测试中,开发人员剪切和粘贴代码,这可能导致删除某些行语句。这也可能涉及交换代码行的顺序。可以删除/复制一行代码。陈述顺序也可以改变。

变异算子:

应用于原始程序以生成突变体的运算符称为突变运算符。Mutation操作符可以大致分为

  1. 传统变异算子

  2. 类变异算子

传统变异算子:

传统的变异算子是为过程式编程语言开发的。尽管这些操作符的应用产生了大量的突变体,但它们都可能无效,因为它们往往会重叠。以下是传统的变异算子

  1. 算术运算符

  2. 关系运算符

  3. 条件运算符

  4. 逻辑运算符

  5. 分配运营商

  6. 移位运算符

通过替换,插入或删除突变操作符来生成突变体。

类突变操作符:

这些用于生成突变体以测试面向对象和集成问题。

  1. 封装 -通过应用修改,删除或插入实例变量和方法的访问级别的运算符来形成突变。

  2. 继承 - 通过应用运算符生成突变体,这些运算符删除隐藏变量以检查是否定义了该变量,以及它在类和子类中的可访问性是否正确。

  3. 多态性 - 突变体由多态运算符创建,以检查具有相同名称和参数数量的方法是否可以正确方式访问。

变异测试工具:

有几种Mutation测试工具可供使用。Jumble和Insure ++是其中最常见的。

混乱:

  1. Jumble是一个简单的非图形开源工具。它将文本文件转换为可以研究文件格式的版本。

  2. 它直接在源代码级别运行,并加快Mutation测试过程。Jumble支持的有限Mutation运算符集:条件,二进制算术运算,增量,内联常量,类池常量,返回值和开关语句

保证++:

  1. 它是C和C ++的商业自动测试工具,它使用Mutation分析技术。

  2. Insure ++不是生成所有可能的突变体,而是关注“潜在的等效突变体”。这个想法背后的动机是,如果任何测试用例能够杀死“潜在的等效突变体”,它也可能会发现原始程序中的错误

变异测试的挑战:

变异测试能够有效地评估测试集的充分性和质量,但是它也具有如下的某些挑战

  1. 突变测试具有针对测试集执行大量突变体的高计算成本。

  2. 人类oracle问题,指的是检查每个测试用例的输出与原始程序的输出的过程,可能是一个严重的问题,因为突变测试可以导致测试用例数量的增加

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章