SuperAPI AI 工具集

mutation-gate

测试与质量

查看项目

更新于 10-16 06:45

技能介绍

用途:变异测试回答覆盖率无法回答的问题——代码被改坏后测试还能通过吗。工具对代码做受控小改动(翻转 < 与 <=、替换 true/false、删除语句),重跑测试;被测试杀死的变异体算“kill”,漏过的“survivor”说明断言薄弱。当 requireMutation=true 时运行变异命令;把存活变异体当作测试质量缺陷,直到满足工具自身的分数阈值。退出码是 PASS/FAIL 的唯一依据,分数用于迭代判断。

工具与命令:JS/TS 用 Stryker,安装 pnpm add -D @stryker-mutator/core @stryker-mutator/jest-runner,命令 npx stryker run,输出 reports/mutation/mutation.json;Python 用 mutmut,安装 pip install mutmut,命令 mutmut run && mutmut results --json;Go 用 go-mutesting,安装 go install github.com/zimmski/go-mutesting/cmd/go-mutesting@latest,命令 go-mutesting ./...;Rust 用 cargo-mutants,安装 cargo install cargo-mutants,命令 cargo mutants,输出 mutants.out/outcomes.json。应选择与项目测试运行器匹配的工具,多语言仓库按语言子树分别运行。

配置要点:Stryker 的 thresholds.break 是退出码门限,coverageAnalysis 设为 perTest 可显著加速;mutmut 可设 runner="pytest -x" 在每次变异首次失败即停;go-mutesting 用 --exec-timeout 限制耗时、--disable 跳过易产生等价变异体的算子;cargo-mutants 支持 timeout_multiplier、examine_globs、exclude_globs,以及 --shard、--in-place。

常见存活模式与修复:循环 off-by-one 需补恰好等于长度的用例;布尔短路需补操作数不对称用例;默认值变异需覆盖省略参数的默认分支;字符串字面量变异需断言具体消息;提前返回与无返回值副作用泄漏需断言可观察效果。

可忽略情形:语义等价的等价变异体、不可达代码路径、仅影响性能的常量,需在报告中显式声明并用工具语法禁用,不得因“不稳定”而忽略,也不应无长篇理由就禁用整个文件。