SuperAPI AI 工具集

mutation-testing

测试与质量

查看项目

更新于 10-16 08:08

技能介绍

用途:覆盖率只能证明某行在测试中执行过,变异测试则验证测试是否能发现该行出错——muter 会变异源码(如把 > 改成 <、&& 改成 ||、删除语句),每个变异体重跑测试套件,并报告存活下来的变异体,即“被覆盖但实际未被断言”的代码。它用于回答“智能体写的是真测试还是覆盖剧场”,但也是整条测试流水线中最慢、最脆弱的工具,因此只作为顾问性报告。

适用时机:覆盖率健康但缺陷仍从已覆盖代码漏过;审计智能体生成的测试套件是否存在无断言测试;对引擎/逻辑目标做周期性(每晚/每周)质量审计。不要用作每次提交或阻塞合并的检查——完整变异运行会把套件运行时间乘以变异体数量。

安装与首次运行: brew install muter-mutation-testing/formulae/muter muter --version 把 templates/muter.conf.yml 复制到仓库根目录为 muter.conf.yml 并按需限定范围,然后运行: muter run(生成存活变异体的 HTML/控制台报告)

范围:只对逻辑密度最高、套件声称有真实覆盖的代码做变异测试——engine/store/service 类型;排除 UI、生成代码和测试文件。例如: mutateSourcesInDirectories:

  • App/Engines
  • App/Stores excludeList:
  • "*View.swift"
  • "Preview"

报告解读:被杀死的变异体表示有测试失败,说明套件确实断言了该行为;存活的变异体表示代码已破坏但所有测试仍通过,即覆盖而无验证,每个存活者都是具体、可定位的提示:补上能杀死它的断言。变异得分(杀死数÷总数)只适合作为同一范围随时间的趋势,不要追求绝对值。

注意事项(为何保持顾问性):工具链脆弱,muter 会重写源码并驱动 xcodebuild,新 Xcode 版本可能使其失效,使用前先在当前工具链上确认普通 muter run 能完成;Swift Testing 检测,muter 的杀死检测在 XCTest 上更成熟,需在可信套件的文件上跑一个变异周期,确认 #expect 失败能被识别;运行时间等于套件时间乘以变异体数,必须严格限定范围,夜间或按需运行。

手动回退:当 muter 无法运行时,可手工做单点变异——选一个关键函数,反转一个条件(或返回常量),运行其套件,必须有测试失败;若没有失败,说明存在断言缺口,立即补测试;然后还原。每个引擎每次发布做两三次抽检即有意义的审计效果。

常见陷阱:把它接成合并门禁会因运行时间和脆弱性阻塞所有人;变异整个应用会得到数小时的 UI 噪声;追逐分数不可取,应跟踪已修复的存活者数量;不要信任未经验证的运行,先在你信任的套件上校准。资料未提供具体价格、平台支持范围与更多配置项。