SuperAPI AI 工具集

mutation-testing

测试与质量

查看项目

更新于 10-16 08:07

技能介绍

用途:变异测试用于验证测试套件是否真能捕获缺陷。它通过修改代码(如把 + 改为 -、>= 改为 >、删除语句)生成变异体,再运行测试,统计被测试杀死的比例,从而暴露仅覆盖但无有效断言的弱测试。

主要能力:支持算术、关系、逻辑、条件、语句等常见变异算子;计算变异分数(Killed / (Killed + Survived)),目标通常为 >80%;给出分数解读(90%+ 优秀,80-90% 良好,60-80% 需关注,<60% 存在明显缺口);可结合覆盖率数据识别弱覆盖,并针对存活变异生成补充测试。

使用方式:以 Stryker 为例,安装 npm install --save-dev @stryker-mutator/core @stryker-mutator/jest-runner,执行 npx stryker init 初始化,在配置中指定 testRunner、coverageAnalysis、mutate 范围与 thresholds(如 high 90、low 70、break 60),然后运行 npx stryker run。修复存活变异时补充边界值测试,例如为 quantity >= 10 增加恰好 10 与 9 的用例。技能还提供代理驱动用法,通过 Task 调用 qe-test-generator 生成缺失测试、qe-coverage-analyzer 关联覆盖率,并可用 FleetManager 顺序编排多个代理。

适用场景:评估测试套件质量、查找断言缺口、证明测试能捕获缺陷、关键发布前把关;优先用于支付、认证、数据完整性等关键路径。

限制与注意事项:高覆盖率不等于好测试,100% 覆盖但断言薄弱仍无用;日期比较中 >= 改 > 的变异很难被杀死,需补边界测试;超过 500 行代码的文件易超时,应使用 --mutate 指定函数;容器中 --concurrency 默认按 CPU 数可能 OOM,建议设为 2;同时安装 jest 与 vitest 时需显式指定 --testRunner jest。运行后可把结果追加到 run-history.json 以跟踪分数变化。