变异测试小记

作者: 胖艺 | 来源:发表于2017-03-25 10:34 被阅读451次

引言

测试用例设计是软件测试中的核心问题。在实践的过程中,一般采用业务流程覆盖、数据流覆盖、语句覆盖等作为测试充分性准则进行测试用例的设计。而变异测试则提供了基于缺陷的对测试充分性进行度量的角度,针对测试用例集的充分性进行评估和改进。

定义

根据《中国软件测试标准规范》(以下简称规范)的定义,变异测试(在规范中称为程序变异,以下二者互用)是一种差错驱动测试,是为了查出被测软件在做过其他测试后还剩余一些的小差错。本方法一般用变异测试工具动态进行,属于动态测试。下面就变异测试的原理来阐明其定义。

原理

首先,具体来说,测试人员首先根据被测程序特征设计变异算子(mutation operator),变异算子一般在符合语法前提下仅对被测程序作微小改动。然后对被测程序应用变异算子可生成大量变异体(mutant),在识别出等价变异体(equivalent mutant)后,若已有测试用例不能杀除所有非等价变异体,则需要额外设计新的测试用例,并添加到测试用例集中,以提高测试充分性。流程如下图:

变异测试流程图

除了可用于测试用例集的充分性评估,变异测试也可以通过采用变异缺陷来模拟被测软件的真实缺陷,从而对研究人员提出的测试方法的有效性进行辅助评估。根据Andrews等的《Is mutation an appropriate tool for testing experiments?》的研究表明变异算子生成的变异缺陷与真实缺陷在有效性评估中效果相似。这就是为什么说变异测试是基于缺陷的、差错驱动的测试。

在这个过程中,有两个前提假设:

假设1 (熟练程序员假设)即假设熟练程序员因编程经验较为丰富,编写出的有缺陷代码与正确代码非常接近,仅需作小幅度代码修改就可以完成缺陷的移除。基于该假设,变异测试仅需通过对被测程序作小幅度代码修改就可以模拟熟练程序员的实际编程行为。

假设2(耦合效应假设)若测试用例可以检测出简单缺陷,则该测试用例也易于检测到更为复杂的缺陷。这里简单缺陷的含义是仅在原有程序上执行单一语法修改形成的缺陷,而复杂缺陷的含义是在原有程序上依次执行多次单一语法修改形成的缺陷。

从这两个假设,我们不难看出,如果程序中存在着明显的代码错误,变异测试则不一定有效。所以在《规范》的定义中指出“是为了查出被测软件在做过其他测试后还剩余一些的小差错”。而一些小的差错,无论经过多少产品、开发、测试、架构评审,往往是测试用例无法覆盖到的。这正是变异测试的用武之地。

应用

变异测试的基本测试过程,可以用下图表示:

变异测试过程

目前,可以应用在java上的工具有:MuJava、MuClipse(均是学术研究的原型工具,尚未发现可用于企业生产开发的工具)。但在这段时间的使用中由于缺少extendedOJ.jar未能成功运行。而参考官方文档说明,其使用也十分不友好。变异测试从理论到实际应用,还有一段路。(当然,也可能无路可走。)

研究框架

抛开企业的生产开发,变异测试的研究方面如下图所示:

变异测试研究框架

小结

变异测试作为一种面向软件缺陷的测试技术,目前得到了学术研究人员的关注,也取得了大量研究成果。作为一名测试人员,期待其未来的生产应用。


关于变异测试更详细的介绍可以参考:

[1]陈 翔,顾 庆;变异测试:原理、优化和应用;计算机科学与探索,2012-06

[2]ncsu: MuClipse: Mutation Testing for Eclipse ,www.csc.ncsu.edu

相关文章

  • 变异测试小记

    引言 测试用例设计是软件测试中的核心问题。在实践的过程中,一般采用业务流程覆盖、数据流覆盖、语句覆盖等作为测试充分...

  • MAJOR 使用教程

    简介 Major 是一个轻量级变异测试工具,其工作原理主要分为两步: 在编译过程中生成+嵌入变异体 执行变异体进行...

  • Maven简单使用教程

    MAVEN 常用的构建命令 mvn -v 查看版本mvn -compile 变异mvn -test 测试mvn -...

  • 变异测试:如何利用故障?

    使用事先设计好的故障以确保你的代码达到预期的结果,并遵循 .NET xUnit.net 测试框架来进行测试。 在变...

  • 变异测试是测试驱动开发(TDD)的演变

    测试驱动开发技术是根据大自然的运作规律创建的,变异测试自然成为 DevOps 演变的下一步。 在 “故障是无懈可击...

  • 变异测试:基于故障的试验

    基于 .NET 的 xUnit.net 测试框架,开发一款自动猫门的逻辑,让门在白天开放,夜间锁定。 在本系列的第...

  • 病毒变异是否会影响疫苗效果?

    这种可能性不大。在增殖过程中,病毒会发生变异,大多数变异并不会影响病毒的致病性、检测试剂敏感性以及疫苗的有效性。比...

  • 你该何去何从?——从性能测试到全栈测试的思考

    性能测试与结果分析培训小记 受合作伙伴邀请,在北京实施了一次《性能测试与结果分析》的培训,要谈的东西很多,所以几经...

  • 自琂自语

    变异癞蛤蟆 (琂琂迷上了变异怪物。)妈妈,你是变异癞蛤蟆妈妈,我是变异癞蛤蟆宝宝。 ...

  • 遗传算法求解函数最大值Java实现

    我的《自然计算》作业,搬上来。 目录 概述 编码 初始群体的产生 适应度计算 选择运算 交叉运算 变异运算 测试效...

网友评论

    本文标题:变异测试小记

    本文链接:https://www.haomeiwen.com/subject/zloqottx.html