关于 mutation-testing
Mutation Testing 是一项面向 mewt 和 muton 的技能,可将用户引导至配置测试活动、调查存活变异体或编写结果报告的工作流。它还说明如何解读变异结果,并结合代码语境安排后续分析优先级。
主要功能
- 01路由至相应变异测试工作流
- 02配置并优化测试活动
- 03解读检出与存活的变异体
- 04评估等价变异体及严重性
- 05支持正式结果报告
适用场景
- 01设置变异测试活动范围或缩短耗时
- 02调查未检出的变异体以寻找潜在缺陷
- 03编写结构化的变异分析报告
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ trailofbits/ skills --skill mutation-testing安装后在 Claude Code 中输入/mutation-testing确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
agents/openai.yamlassets/trail-of-bits-mark.svgreferences/blockchain-patterns.mdequivalent-mutants.mdinput-formats.mdoptimization-strategies.mdreport-template.mdseverity-classification.mdworkflows/analyzing-results.mdbug-hunter.mdconfiguration.md详细介绍
变异测试(mewt/muton)
将请求路由到合适的变异测试工作流,并加载该工作流所需的参考资料。
注意:muton 和 mewt 的接口完全相同。示例使用
mewt;在 muton 项目中,请替换为muton及其文件名(muton.toml、muton.sqlite)。
mewt --help 和 mewt <subcommand> --help 是命令行行为的权威依据。下方示例反映的是 mewt 4.x API;如果某个标志看起来陌生,或命令运行失败,请运行 --help。
适用场景
在用户符合以下情况时使用此技能:
- 提到“mewt”、“muton”或“变异测试”
- 想要配置、限定范围或加快变异测试活动
- 想要分析变异测试结果——存活/未捕获的变异体、等价变异体、击杀率
- 想要利用变异测试结果查找源代码中的错误
不适用场景
如果用户询问的是测试或行覆盖率,且没有涉及变异测试,请勿使用此技能。
路由
选择工作流,然后加载该工作流及其对应的参考资料。工作流和参考资料不会相互加载——此处负责作出选择。
设置、限定范围或加快变异测试活动 → workflows/configuration.md → 如果活动的预估耗时较长,需要缩短耗时,或用户要求加快速度,也请加载 references/optimization-strategies.md。
活动已完成,要在未经测试的代码中查找错误 → workflows/bug-hunter.md
将结果整理成正式分析报告 → workflows/analyzing-results.md,以及:
- references/equivalent-mutants.md — 等价变异体目录和验证流程
- references/severity-classification.md — 严重性等级标准
- references/report-template.md — 报告结构
- references/blockchain-patterns.md — 仅适用于 Solidity、Move、FunC/Tolk、Cairo 或 Solana Rust 目标
- references/input-formats.md — 除非结果来自 mewt 或 muton。其他工具的输出可能不包含自我描述信息;此文档介绍 slither-mutate、mull 和 dextool-mutate 的解析锚点
其他情况 → 运行 mewt --help 或 mewt <subcommand> --help,然后直接提供帮助。
必备命令
# Set up and run
mewt init # Create config and database
mewt mutate [paths] # Generate mutants without testing them
mewt run [paths] # Generate mutants and run the campaign
# Read results
mewt status # Overview with per-file breakdown
mewt results # Uncaught mutants (default view)
mewt results --all # Every outcome, not just uncaught
mewt results --format json # json | sarif | ids | table
# Narrow down (these filters work on both `results` and `print mutants`)
mewt results --target 'src/auth/**' # Quote globs so the shell does not expand them
mewt results --severity high,medium
mewt results --mutation-types ER,CR
mewt results --status Uncaught # Uncaught | TestFail | Skipped | Timeout
mewt results --line 42
# Investigate and re-test
mewt print mutant --id [id] # View the mutated code
mewt test --ids [ids] # Re-test specific mutants
mewt test --ids-file uncaught_ids.txt # Re-test IDs from a file, or '-' for stdin
# Inspect configuration
mewt print config # Effective config
mewt print targets # Files actually mutated
mewt print mutations --language [lang] # Mutations and severities for a language
在 mewt 4.x 中,语言标签采用规范的 family 或 family/dialect 值,例如 rust、javascript/ts、move/sui、move/iota。
结果含义
- Caught/TestFail:测试检测到了变异(好)
- Uncaught:测试未检测到变更。请检查代码,判断这是测试缺口还是等价变异。
- Timeout:测试耗时过长——结果不确定,不能作为覆盖率的证据
- Skipped:由于同一行上严重性更高的变异未被捕获,因此跳过了严重性较低的变异
解读变异类型
mewt print mutations --language [lang] 会列出某种语言的所有变异 slug、描述和严重性,并且是权威依据——运算符集合会随着每次发布而扩展。该命令的输出不会告诉你存活的变异 意味着什么,而这正是确定优先级的依据:
| 严重性 | 代表性 slug | 未捕获的变异体说明了什么 |
|---|---|---|
| 高 | ER(错误替换) | 测试容忍注入的错误。检查相关路径是否执行、错误处理是否掩盖了变化,以及断言是否检查了结果。 |
| 中 | CR(注释替换) | 移除该语句不会导致测试失败。检查其影响是否重要,以及断言是否能观察到这些影响。 |
| 中 | IF/IT(条件为假/真)、NR(移除否定) | 测试无法区分发生变化的条件。两个常量替换都存活,可能表明条件未执行,或对分支结果的断言较弱。 |
| 低 | 运算符替换(AOS、COS、LOS、BOS、移位/赋值变体)、BL、AS、LC、WF | 检查边界输入、算术断言和语义等价性。仅凭变异结果无法确定代码是否执行。 |
严重性衡量的是 变异本身,而非风险。费用计算中的低严重性存活变异,比日志语句中的高严重性存活变异更重要——应根据变异代码的作用来判断。使用 --severity 进行筛选,按优先级处理结果。