mcpField
F
fuzz

fuzz

github.com/millioncoテスト・品質15.1k283 回インストール2 週間前に更新
リポジトリ

fuzz について

ファジングハーネスでコード解析ルールを検査するスキルです。開発者向けに、対象を絞ったテストやコーパス全体のテスト、結果の調査、回帰ケースの保存、報告の手順を示します。

主な機能

  1. 01ルール別ファジングテストの実行
  2. 02タグ単位でのルール群テスト
  3. 03用意されたリポジトリコーパスの利用
  4. 04クラッシュと誤検知の調査
  5. 05回帰ケースの保存とシード再生

活用シーン

  1. 01個別テスト後のルール検査
  2. 02実際のリポジトリでのルール動作確認
  3. 03ファジング結果の再現と調査

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/millionco/react-doctor --skill fuzz

インストール後、Claude Code で/fuzzを入力して読み込まれたか確認します。

詳細

ファズルール

焦点を絞ったルールテストに合格したら、packages/fuzz を使用してください。ハーネスのアーキテクチャとコーパスの設定については、README.md をお読みください。

ハーネスを実行する

最初に対象ルールを実行します。

FUZZ_RULE=<rule-id> FUZZ_STRICT=1 FUZZ_ITERATIONS=500 nr fuzz

便利なバリエーション:

nr fuzz
FUZZ_RULE=<rule-id> FUZZ_SEED=42 nr fuzz
FUZZ_INVARIANTS=1 nr fuzz
FUZZ_CORPUS_DIR=<repository-directory> nr fuzz
FUZZ_RULE=<rule-id> FUZZ_PRINT_SILENT=1 nr fuzz

対象ルールが発火することを確認してください。何も出力しないルールでは、早期終了の処理しかテストできません。何も出力されない場合は、packages/fuzz/src/snippet-pools.ts にトリガーとなる構造を追加して、再実行してください。

レジストリ全体のコホートをテストするには、FUZZ_RULE の代わりに FUZZ_TAG=<tag> を使用してください。

推奨される全体スイープ(ルールバッチのリリース前など)では、実際のチェックアウトをコーパスとして指定してください。すぐに使えるコーパスはどのマシンでも利用できます。パッケージの README の「Canonical corpora」を参照してください。bun scripts/sync-fuzz-corpus.ts は固定された 48 リポジトリのサンプルを作成します(RDE キャッシュがあればシンボリックリンクを作成し、なければクローンします)。また、bun scripts/build-bench-corpus.ts は react-bench の診断密度の高い RD-health 対象ファイルを抽出します。

cd packages/fuzz
bun scripts/sync-fuzz-corpus.ts
FUZZ_INVARIANTS=1 FUZZ_ITERATIONS=100 FUZZ_CORPUS_DIR=tmp/corpus-repos nr fuzz

ルールの変更が一般的な構文に影響する場合は、直接的な誤検知チェックを実行してください。

cd packages/fuzz
bun scripts/hunt-false-positives.ts

検出結果をトリアージする

再現用データは packages/fuzz/tmp/fuzz-findings/ にあります。

  • クラッシュ:プログラムを最小化し、例外を発生させない回帰テストを追加して、ルールを修正し、シードを再実行します
  • 低速ケース:問題を引き起こす構造をプロファイルし、探索範囲に上限を設け、既存のしきい値を維持します
  • 判定の変化:偶発的な構文に依存する検出を修正し、適切な場合は堅牢性ゲートにルールを追加します
  • 不変条件違反:ルールが書き換えに反応すべきかを判断し、予期しない変更を修正してテストします
  • 誤検知:有効なプログラムをルールテストとファズ回帰コーパスに追加します

検出結果を 1 件再実行します。

FUZZ_RULE=<rule-id> FUZZ_SEED=<seed> FUZZ_ITERATIONS=1 nr fuzz

誤検知を再発させない

誤検知が確認されるたびに、次の作業を行います。

  1. 最小限のフィクスチャを packages/fuzz/corpus/regressions/<rule-id>--<slug>.tsx に追加します。
  2. フィクスチャのヘッダーに、ルール ID、弱点クラス、ソースを記載します。
  3. ルールテストスイートに、焦点を絞った有効なケースを追加します。
  4. 既存のプールで弱点を再現できない場合は、ジェネレーター用のスニペットを追加します。
  5. nr -C packages/fuzz test を実行し、対象ルールを再実行します。

library-idiom、control-flow、wrapper-transparency、name-heuristic、alias-guard、cross-file、framework-gating、paren-shape、default-parameter、dynamic-computed、private-member、copy-tracking など、安定した弱点名を使用してください。

プロジェクトレベルのデッドコードや依存関係に関する検出結果は、ルールファザーではなくコアテストに含めてください。

結果を報告する

コマンド、対象ルールの発火回数、検出結果、再実行したシード、コーパスのフィクスチャ、ジェネレーターの変更を記録してください。実装上の問題だと確認された検出結果は rule-validate に渡してください。

コメント