SuperAPI AI 工具集

mutation-testing

测试与质量

查看项目

更新于 10-15 20:07

技能介绍

用途:变异测试用于审计现有测试套件的强度。行覆盖率只说明某行被执行过,变异测试则说明当该行逻辑出错时是否有断言会失败。它最适合逻辑密集的代码,按需运行,不应作为默认阻塞式 CI 门禁。

主要能力:变异工具会对源码做小的自动修改(变异体),例如 < 改为 <=(边界/差一错误)、and 改为 or(谓词逻辑)、== 改为 !=(条件取反)、return x 改为 return None、+ 改为 -、删除语句、移除列表/字典条目(白名单/黑名单覆盖)。对每个变异体重跑测试套件:Killed 表示至少一个测试失败,说明测试能检测该改动;Survived 表示所有测试仍通过,说明该变异体模拟了测试套件无法捕获的真实缺陷。Kill rate = killed / total mutants,衡量测试有效性而非代码执行。可能出现 100% 行覆盖率但 kill rate 仅 40% 的情况:每行都运行,但一半逻辑改动未被发现,因为断言太少。

使用方式:选择一个逻辑密集且测试已通过的模块;用变异工具限定该模块运行(Python:mutmut 或 cosmic-ray;JS/TS:stryker);列出 SURVIVED 变异体,每个都代表没有测试验证的行为;对代表真实缺陷的存活变异体,添加或加强断言将其杀死;重跑并确认 kill rate 上升,直到存活者只剩等价变异体。

适用场景:在依赖某关键模块前审计它(支付计算、认证谓词、控制文件系统/网络访问的白名单);在险些出错的缺陷后加固测试;把“我们有 90% 覆盖率”转化为“这些具体行为没有测试固定下来”。

限制:不要作为默认阻塞式 CI 门禁,运行时间是 N 个变异体乘以完整测试套件;不要追求 100% 指标,因为部分变异体是等价的(语义相同),永远无法被杀死。目标应是关键模块上 kill rate 上升,而非满分。