mutation-testing: Running a mewt/muton Mutation Testing Campaign with an Agent Skill

前言

行覆盖率能告诉你「哪些行被执行过」,却很难说明断言是否真的抓住了行为变化。变异测试通过在源码里注入小改动、再跑测试套件,看有多少变异体被测试「杀死」——存活下来的变异体往往指向测试缺口或等价变异,需要人工甄别。

mewt 与 muton 是常用的变异测试工具,但战役配置、范围裁剪、超时调优和结果解读步骤多、文档分散。Trail of Bits 在 skills 仓库里把这套流程做成 mutation-testing Skill:按场景路由到配置、挖 bug、写报告等工作流,并附带命令与结果含义的参考说明。下面介绍它是什么、能做什么,以及如何安装与典型用法。

这是什么

mutation-testing 是 Trail of Bits Skills 中 Verification 类插件下的一个 Skill。官方描述为:配置 mewt 或 muton 战役、分析存活变异体、并针对测试薄弱处追查源码问题。

Skill 声明可用工具为:Read、Write、Bash、Grep。它会根据你的意图加载对应 workflow 与 reference,而不是一次性塞满全部文档。官方注明:muton 与 mewt 接口一致;下文示例以 mewt 为准,使用 muton 时替换为 muton 及 muton.toml、muton.sqlite 等文件名。命令行行为以 mewt --help 与 mewt <subcommand> --help 为准;示例反映 mewt 4.x API。

核心功能

场景路由

Skill 先判断你要做哪类事,再加载列出的文档(workflow 与 reference 不会自动互相加载):

场景 加载内容
搭建、限定范围或加速战役 workflows/configuration.md;若预估耗时很长或明确要求加速,另加 references/optimization-strategies.md
战役结束,在未充分测试的代码里找 bug workflows/bug-hunter.md
把结果整理成正式分析报告 workflows/analyzing-results.md,以及等价变异、严重度、报告模板等 reference;区块链目标另加 blockchain-patterns.md;非 mewt/muton 产出的结果可参考 input-formats.md
其他 以 mewt --help 为准,直接协助

何时使用 / 不必使用

适合在对话里提到 mewt、muton 或 mutation testing;需要配置、限定范围或加速战役;需要分析存活/未捕获变异体、等价变异、击杀率;或希望用变异结果在源码里找 bug。

不必使用当用户只问测试或行覆盖率、且完全没有变异测试上下文时。

结果状态含义

  • Caught / TestFail:测试发现了变异(期望行为)。
  • Uncaught:测试未发现改动——需区分是测试缺口还是等价变异。
  • Timeout:测试超时,结论不确定,不能当作覆盖证据。
  • Skipped:同一行上已有更严重变异体未捕获时,较低严重度的变异可能被跳过。

严重度描述的是变异类型的优先级,不是业务风险;低严重度变异若落在计费等关键路径,仍应优先人工审查。

安装与启用

mutation-testing 随 trailofbits/skills 市场发布,与具体编辑器/CLI 的安装方式以官方仓库为准。

Claude Code

/plugin marketplace add trailofbits/skills

通过 /plugin menu 浏览并安装对应插件。

Codex

codex plugin marketplace add trailofbits/skills
codex plugin list
codex plugin add <plugin-name>@trailofbits

本地开发时,在 skills 仓库的父目录执行:

/plugins marketplace add ./skills

安装市场后,在插件列表中选择 mutation-testing 所在插件(路径:plugins/mutation-testing/)即可启用 Skill。Cursor 侧若通过兼容 Claude 插件市场的能力加载同一市场,步骤与上述市场添加方式一致;未在资料中单独列出的客户端差异不在此文展开。

典型用法

1. 初始化与跑战役

先做初始化,再生成变异体或一次性跑完整战役:

mewt init                    # 创建配置与数据库
mewt mutate [paths]          # 只生成变异体,不跑测试
mewt run [paths]             # 生成变异体并执行战役

2. 查看进度与结果

mewt status                  # 总览及按文件拆分
mewt results                 # 默认:未捕获的变异体
mewt results --all           # 全部结果
mewt results --format json   # json | sarif | ids | table

按路径、严重度、变异类型、状态或行号缩小范围(results 与 print mutants 共用过滤语义):

mewt results --target 'src/auth/**'   # glob 建议加引号,避免 shell 展开
mewt results --severity high,medium
mewt results --mutation-types ER,CR
mewt results --status Uncaught        # Uncaught | TestFail | Skipped | Timeout
mewt results --line 42

3. 深入单条变异与复测

mewt print mutant --id [id]              # 查看变异后代码
mewt test --ids [ids]                    # 复测指定 ID
mewt test --ids-file uncaught_ids.txt    # 从文件或 stdin('-')复测

4. 检查配置与语言变异集

mewt print config                        # 当前生效配置
mewt print targets                       # 实际被变异的文件
mewt print mutations --language [lang]   # 某语言的变异算子与严重度

语言标签为 mewt 4.x 的 canonical family 或 family/dialect,例如 rust、javascript/ts、move/sui、move/iota。

5. 结合 Skill 解读未捕获变异

mewt print mutations --language [lang] 是算子与严重度的权威列表。资料中给出的优先级示例如下(具体 slug 以工具输出为准):

严重度 代表 slug 未捕获时通常意味着什么
High ER(Error Replacement) 测试容忍了注入的错误;需看路径是否执行、错误处理是否掩盖变化、断言是否检查结果
Medium CR(Comment Replacement) 删掉语句测试仍通过;需判断语句副作用是否被断言观察到
Medium IF/IT、NR 分支或条件变化未被区分;双分支常量替换都存活可能表示条件未执行或断言偏弱
Low AOS、COS 等算子_shuffle、BL、AS 等 关注边界输入与算术断言;单凭变异结果不能证明代码是否执行

分析正式报告、等价变异目录与验证步骤、严重度分级、报告结构等,在启用 Skill 并进入「分析报告」路由时会加载对应 reference。

适用场景与注意

适合:已在或计划使用 mewt/muton 的团队;需要在 AI 辅助下完成战役配置、长时战役优化、存活变异体 triage,或从变异结果反推测试与代码问题;智能合约等场景可在 Skill 路由下加载区块链相关 pattern 参考(Solidity、Move、FunC/Tolk、Cairo、Solana Rust 等)。

注意:

  • 仅讨论覆盖率而不涉及变异测试时,不应依赖本 Skill 替代覆盖率工具说明。
  • 外部工具(如 slither-mutate、mull、dextool-mutate)的结果导入需参考 input-formats.md,格式可能与 mewt/muton 原生输出不同。
  • 超时条目不能当作「测到了」的证据;长战役应结合 configuration 与 optimization-strategies 工作流做范围与性能调优。

结尾

mutation-testing 把 mewt/muton 的配置、加速、结果分析与挖 bug 流程收敛成可路由的 Skill,降低变异测试这一进阶主题的入门成本。官方 Skill 文档:

https://github.com/trailofbits/skills/tree/main/plugins/mutation-testing/skills/mutation-testing

Skills 市场与安装说明:

https://github.com/trailofbits/skills

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye