mcpField
M
mutation-testing

mutation-testing

github.com/trailofbits测试与质量7.9k4.3k 次安装今天更新
代码仓库

关于 mutation-testing

Mutation Testing 是一项面向 mewt 和 muton 的技能,可将用户引导至配置测试活动、调查存活变异体或编写结果报告的工作流。它还说明如何解读变异结果,并结合代码语境安排后续分析优先级。

主要功能

  1. 01路由至相应变异测试工作流
  2. 02配置并优化测试活动
  3. 03解读检出与存活的变异体
  4. 04评估等价变异体及严重性
  5. 05支持正式结果报告

适用场景

  1. 01设置变异测试活动范围或缩短耗时
  2. 02调查未检出的变异体以寻找潜在缺陷
  3. 03编写结构化的变异分析报告

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/trailofbits/skills --skill mutation-testing

安装后在 Claude Code 中输入/mutation-testing确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

agents/
openai.yaml
assets/
trail-of-bits-mark.svg
references/
blockchain-patterns.md
equivalent-mutants.md
input-formats.md
optimization-strategies.md
report-template.md
severity-classification.md
workflows/
analyzing-results.md
bug-hunter.md
configuration.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,以及:

其他情况 → 运行 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 进行筛选,按优先级处理结果。

评论

支持 Markdown