我开始深入研究代码分析和突变体。我在我的eclipse项目中使用PITest作为插件。我遇到了这个我无法杀死的突变体。假设我有以下代码。
SPECIAL_CHARS
据我的理解,如果有一个不属于(
的字符(比如说i
),变量?
会递增。 PITest报告了两个突变体。
提供以下信息。
我试着写几个Junit测试,可能会在没有任何运气的情况下杀死这个突变体。有人可以解释一下我怎么可能杀了它?
我现在知道,如果我的密码password
作为字符串... WHERE transaction = 1 AND transaction = 2 AND transaction = 3 AND transaction = 4 AND transaction = 5
的第一个字符,则可能会终止条件边界检查。增量怎么样?这是什么意思?
答案 0 :(得分:0)
由于代码不执行任何操作,因此无法编写测试来杀死您提供的代码中的任何可能的突变体。该方法返回void,代码不会执行任何副作用。
Pitest可以删除此方法中的所有代码,程序在功能上也是等效的。
如果代码被修改,以便产生某种输出(特殊字符的计数?)并且输入密码没有硬编码,那么就可以编写区分变异程序和un-的测试。突变了一个。
条件边界突变体产生相当于
的代码if (SPECIAL_CHARS.indexOf(c) <= 0 )
这可以通过在密码的0索引处使用特殊字符的测试用例来检测,该密码检查在计数中检测到这一点。
增量变异算子将增量转换为减量,即从
i++
到
i--
这是一个非常不稳定的突变,并且会被任何提供密码的测试用例检测到,该密码包含在结果计数上声明的特殊字符。