由于突变测试的最终目的是通过找到可以揭示故障的测试用例(通过更改程序的部分然后验证输出)来检测程序的故障,似乎只有当比较的突变体的输出不同时与原始人相比,是否可以检测到与该突变体相关的故障。
但是,如果开发人员不确定程序的输出,或者对于不同的测试用例,确实需要不同的值,那么她/他如何检测突变体是否检测到错误(当然,当突变导致编译时错误)?
编辑:说突变体被杀死是否正确,只是如果原始程序和突变体具有不同的输出,而不验证原始程序的输出是否正确?
由于突变测试的最终目的是通过找到可以揭示故障的测试用例(通过更改程序的部分然后验证输出)来检测程序的故障,似乎只有当比较的突变体的输出不同时与原始人相比,是否可以检测到与该突变体相关的故障。
但是,如果开发人员不确定程序的输出,或者对于不同的测试用例,确实需要不同的值,那么她/他如何检测突变体是否检测到错误(当然,当突变导致编译时错误)?
编辑:说突变体被杀死是否正确,只是如果原始程序和突变体具有不同的输出,而不验证原始程序的输出是否正确?
这取决于您正在谈论的突变测试类型。
在弱突变测试中,如果突变导致程序内部状态发生变化,则认为该突变被杀死——这种变化甚至不需要在外部可见。
在坚定的突变测试中,如果变化传播到距离其起源一定距离的地方,则认为突变体被杀死。
在强突变测试中,更改必须传播并被测试用例中的断言检测到。
所以答案
“说变种人被杀是对的吗,只是原版和变种人的输出不同,而没有验证原程序的输出是否正确?”
是
流行的开源突变测试工具主要是(全部?)强大的突变测试系统。
不,变异测试的主要目标是检查测试用例的质量。
如果测试用例质量很好,它将杀死大多数突变体。