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

詳細

Mutation Testing(mewt/muton)

適切なミューテーションテストのワークフローに案内し、そのワークフローに必要なリファレンスを読み込みます。

注:muton と mewt のインターフェースは同一です。例では mewt を使用しています。muton のプロジェクトでは、muton とそのファイル名(muton.toml、muton.sqlite)に置き換えてください。

コマンドラインの動作については、mewt --help と mewt <subcommand> --help が正確な情報源です。以下の例は mewt 4.x API に基づいています。フラグの意味がわからない場合やコマンドが失敗する場合は、--help を実行してください。

使用する場合

次のような場合にこのスキルを使用します。

  • ユーザーが「mewt」「muton」または「mutation testing」に言及している
  • ミューテーションテストのキャンペーンを設定、範囲指定、または高速化したい
  • ミューテーションの結果(生き残った/検出されなかったミュータント、等価ミュータント、キル率)を分析したい
  • ミューテーションの結果を使ってソースコードのバグを見つけたい

使用しない場合

ユーザーがミューテーションテストに触れずに、テストや行カバレッジについて尋ねている場合は、このスキルを使用しないでください。


ルーティング

ワークフローを選び、そのワークフローと、一覧に記載されたリファレンスを読み込みます。ワークフローとリファレンスが互いを読み込むことはありません。その判断はここで行います。

キャンペーンの設定、範囲指定、または高速化 → 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] は、ある言語のすべてのミューテーションスラッグ、説明、重大度を一覧表示するもので、これが正式な情報源です。演算子のセットはリリースごとに増えていきます。ただし、この出力からは、生き残ったミュータントが何を意味するのかは分かりません。優先順位を決めるには、その解釈が必要です。

重大度代表的なスラッグ検出されなかったミュータントが示すこと
高ER(エラーの置換)テストは注入されたエラーを許容しています。そのパスが実行されるか、エラー処理によって変更が隠されていないか、アサーションが結果を検証しているかを調べてください。
中CR(コメントの置換)文を削除してもテストは失敗しません。その文の効果が重要か、アサーションで確認されているかを確認してください。
中IF/IT(If False/True)、NR(否定の削除)テストは変更された条件を区別できていません。両方の定数置換が生き残る場合、その条件が実行されていないか、分岐の結果に対するアサーションが弱い可能性があります。
低演算子の入れ替え(AOS、COS、LOS、BOS、シフト/代入のバリエーション)、BL、AS、LC、WF境界値の入力、算術演算のアサーション、意味的な等価性を確認してください。ミューテーションの結果だけでは、コードが実行されたかどうかは判断できません。

重大度はリスクではなく、ミューテーションの順位を示します。手数料の計算における重大度の低いミュータントが生き残るほうが、ログ出力における重大度の高いミュータントが生き残るよりも重要です。変更されたコードの働きを考慮してください。--severity で絞り込むと、優先順位に沿って結果を確認できます。

コメント