如何杀死条件边界突变体

时间:2017-12-31 00:31:24

标签: java unit-testing pitest

我开始深入研究代码分析和突变体。我在我的eclipse项目中使用PITest作为插件。我遇到了这个我无法杀死的突变体。假设我有以下代码。

SPECIAL_CHARS

据我的理解,如果有一个不属于(的字符(比如说i),变量?会递增。 PITest报告了两个突变体。

enter image description here

提供以下信息。

enter image description here

enter image description here

我试着写几个Junit测试,可能会在没有任何运气的情况下杀死这个突变体。有人可以解释一下我怎么可能杀了它?

我现在知道,如果我的密码password作为字符串... WHERE transaction = 1 AND transaction = 2 AND transaction = 3 AND transaction = 4 AND transaction = 5的第一个字符,则可能会终止条件边界检查。增量怎么样?这是什么意思?

1 个答案:

答案 0 :(得分:0)

由于代码不执行任何操作,因此无法编写测试来杀死您提供的代码中的任何可能的突变体。该方法返回void,代码不会执行任何副作用。

Pitest可以删除此方法中的所有代码,程序在功能上也是等效的。

如果代码被修改,以便产生某种输出(特殊字符的计数?)并且输入密码没有硬编码,那么就可以编写区分变异程序和un-的测试。突变了一个。

条件边界突变体产生相当于

的代码
if (SPECIAL_CHARS.indexOf(c) <= 0 )

这可以通过在密码的0索引处使用特殊字符的测试用例来检测,该密码检查在计数中检测到这一点。

增量变异算子将增量转换为减量,即从

i++

i--

这是一个非常不稳定的突变,并且会被任何提供密码的测试用例检测到,该密码包含在结果计数上声明的特殊字符。