什么是突变测试?(示例)
什么是突变测试?
突变测试 是一种软件测试,其中源代码的某些语句被更改/变异,以检查测试用例是否能够发现源代码中的错误。变异测试的目标是确保测试用例的质量,以确保其稳健性,使变异的源代码无法通过。
突变程序中所做的更改应保持极小,以免影响程序的总体目标。突变测试也称为基于故障的测试策略,因为它涉及在程序中创建故障,并且它是一种 白色 Box 测试 主要用于 单元测试.
变异最初于 1971 年提出,但由于成本过高而逐渐失去热度。现在,它再次受到热捧,并被广泛应用于以下语言: Java 和 XML。
如何执行变异测试?
以下是执行突变测试(突变分析)的步骤:
步骤1:通过创建多个版本(称为突变体)将故障引入程序源代码。每个突变体应包含一个故障,目标是导致突变版本失败,以证明测试用例的有效性。
步骤2:测试用例既应用于原始程序,也应用于变异程序。 测试用例 应该是足够的,并且它被调整来检测程序中的错误。
步骤3:比较原始程序和变异程序的结果。
步骤4:如果原始程序和变异程序生成不同的输出,则变异程序被测试用例杀死。因此测试用例足以检测原始程序和变异程序之间的变化。
步骤5:如果原始程序和变异程序生成相同的输出,则变异程序保持活动状态。在这种情况下,需要创建更有效的测试用例来杀死所有变异程序。
如何创建变异程序?
变异只不过是对程序语句进行的单一语法更改。每个变异程序都应与原始程序相差一个变异。
原创节目 | 变异程序 |
---|---|
如果 (x>y)
打印“你好” 其他 打印“嗨” |
如果(xy <y)
打印“你好” 其他 打印“嗨” |
突变程序中需要改变什么?
有几种技术可用于生成变异程序。让我们来看看
Operand 替换运算符 | 表达修饰 Opera职权范围 | 声明修改 Opera职权范围 |
---|---|---|
用另一个操作数 (x 替换 y 或 y 替换 x) 或用常数值替换该操作数。 | 在程序语句中替换运算符或插入新的运算符。 | 修改程序语句以创建变异程序。 |
例-
如果 (x>y) 则替换 x 和 y 值 如果(5>y)用常数 5 替换 x |
例-
如果(x==y) 我们可以将 == 替换为 >=,并让变异程序如下 如果(x>=y)并在语句中插入++ 如果(x==++y) |
例-
删除 if-else 语句中的 else 部分 删除整个 if-else 语句来检查程序的行为 一些突变运算符示例:
|
突变测试的自动化
突变测试手动执行极其耗时且复杂。为了加快流程,建议使用自动化工具。自动化工具还可以降低测试成本。
可用工具列表-
突变测试的类型
In 软件工程,变异测试基本上可以分为三类——语句变异、决策变异和值变异。
- 语句修改 – 开发人员剪切并粘贴部分代码,结果可能是删除了一些行
- 价值变异– 修改主要参数的值
- 决策突变– 控制语句需要改变
突变评分
突变分数定义为被杀死的突变体占突变体总数的百分比。
- 突变分数 = (杀死的突变体/突变体总数) * 100
如果得分为 100%,则测试用例是突变充分的。实验结果表明,突变测试是衡量测试用例充分性的有效方法。但是,主要缺点是生成突变体并针对该突变程序执行每个测试用例的成本很高。
突变测试的优势
以下是突变测试的优点:
- 这是实现源程序高覆盖率的有效方法。
- 该测试能够全面测试突变程序。
- 变异测试为软件开发人员带来了良好的错误检测水平。
- 该方法可以揭示源代码中的歧义,并有能力检测程序中的所有错误。
- 通过此次测试,客户受益匪浅,获得了最可靠、最稳定的系统。
突变测试的缺点
另一方面,突变测试也有以下缺点:
- 由于需要生成许多突变程序,因此突变测试极其昂贵且耗时。
- 由于耗费时间,可以说,如果没有自动化工具,这种测试就无法完成。
- 每个变异程序的测试用例数量与原始程序相同。因此,可能需要针对原始测试套件对大量变异程序进行测试。
- 由于此方法涉及源代码更改,因此不适用于 黑色 Box 测试.
结语
您想对您的应用程序进行详尽的测试吗?答案是变异测试。这是测试程序最全面的技术。这种方法可以检查测试程序的有效性和准确性,以检测系统中的故障或错误。