软件测试 - 变异测试
软件要经过各种测试阶段才能达到预期的性能。变异测试是一种测试,用于构建新的测试用例,并分析为验证软件而开发的现有测试用例的质量。
什么是软件变异测试?
软件变异测试也称为代码变异测试。它是白盒测试技术下的一个概念。在此期间,对代码进行细微更改以验证现有测试用例的有效性,或识别程序源代码中使用的测试数据中的弱点。
软件变异测试可用于验证设计模型、数据库、XML 等。它是一种结构测试,其中代码的解剖结构用于帮助测试过程。它基本上以微小的方式重写代码,以便可以避免或最小化代码冗余。在源代码中进行更新后,现有的测试用例应该能够识别这些更新。代码中的更改通常会导致错误的引入。
突变测试主要用于评估软件测试工具的有效性,而不是软件本身。它主要用于单元测试。它可以捕获其他测试方法无法检测到的缺陷。在执行突变测试时,一行代码可能会被删除或多次使用,真或假语句或变量可能会被修改等。一旦代码中的突变被纳入,就会对其进行验证,并与实际代码进行比较。
如果在突变代码上运行的现有测试用例识别出与在原始代码上运行相同的缺陷,则代码仍未执行,或者现有测试用例无法识别突变。这表明需要对现有测试用例进行改进,以提高其效率。成功的突变测试结果应该在对原始代码和突变代码执行相同测试用例时具有不同的测试结果。当突变代码的测试结果和原始代码不同时,突变体将不再使用,这些突变体被称为已杀死的突变体。
计算突变分数百分比的公式
突变分数可以通过将杀死的突变体总数除以突变体总数,然后乘以百来计算。
突变分数 = (杀死的突变体总数/突变体总数) * 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
软件变异测试的优势
软件变异测试的优势如下 −
- 软件变异测试提高了程序源代码中的错误识别级别。
- 软件变异测试有助于摆脱代码中不清楚的部分。
- 软件变异测试检测并解决代码中的问题。
- 软件变异测试为设计或自动化更好、更有效的测试提供了指导案例。
- 软件突变测试提高了代码中使用的编程水平。
软件突变测试的缺点
软件突变测试的缺点如下 −
- 软件突变测试是一个昂贵且耗时的过程。
- 软件突变测试仅适用于白盒,不能应用于黑盒测试技术。
- 有时突变体很复杂,因此不容易针对现有测试套件设计和执行它们。
- 执行软件突变测试的测试人员应该经验丰富,并且应该具备编程和技术技能。
- 选择正确的自动化工具进行突变测试并不容易。
结论
这就是我们对本教程的全面介绍软件突变测试。我们首先描述了什么是软件突变测试、计算突变分数百分比的公式、软件突变测试的目标是什么、软件突变测试的不同类型是什么、用于软件突变测试的各种工具是什么、软件突变测试的优点是什么、软件突变测试的缺点是什么。这使您具备了软件突变测试的深入知识。明智的做法是继续实践您学到的知识并探索与软件测试相关的其他知识,以加深您的理解并拓展您的视野。