真实世界突变测试, PIT 是一种最先进的突变测试系统, 为 Java 和 jvm 提供了黄金标准的测试覆盖率. 它快速, 可伸缩, 并与现代测试和构建工具集成.
什么是突变测试
突变测试是将错误 (或突变) 自动嵌入到代码中, 然后运行测试. 如果测试失败, 则意味着突变被杀死; 而测试如果能正常通过, 则说明突变存活.
如此, 我们便可以根据突变的存活率来给代码质量做出一个科学的量化的评定.
what?
当代码发生变更时, 代码执行应该产生不同的结果, 这些结果变化会导致原来的单元测试的断言逻辑失效. 这是自动化测试必须直面的问题, 而 PIT 会针对你用于测试的代码版本不同自动对突变产生的逻辑做出修改.
why?
传统的测试覆盖 (如基于行, 语句, 分支等的覆盖统计) 只统计测试流程所执行过的代码作为度量. 它不检查您的测试是否能够触发执行代码中的错误. 因此, 传统代码覆盖只能识别出测试流程中从没有经过测试的代码.
如果测试逻辑中没有断言, 那么这些代码就可能潜在很多质量问题. 还有一个常见的问题是仅经过部分测试用例测试的代码, 可是仍然可以执行它的所有分支, 让我们误以为所有的代码都被覆盖了.
由于它实际上能够检测每个语句是否得到了有意义的测试, 所以突变测试是衡量所有其他类型覆盖率的黄金标准.
Why PIT?
针对 Java 的突变测试系统有很多, 但是它们没有得到广泛的应用.
其首要原因是性能慢, 然后很难使用. 这些系统编写的目的是为了满足学术研究的需要, 而不是真正的开发团队.
PIT 有以下特性:
快速: 能在几分钟的时间内完成以前需要几天时间的代码分析.
易用: 可以通过 maven,ant,gradle 工具快速创建
活跃的研发更新
友好的支持
image
浅绿色表示行覆盖, 深绿色表示突变覆盖. 淡粉色表示缺乏行覆盖, 深粉色表示缺乏突变覆盖.
来源: http://www.jianshu.com/p/903ccd141bdf