# Coverage-Guided Test Sampling > **0.13.0 で削除。** `coverage-guided` 戦略、`flaker collect coverage`、`[coverage]` セクションは flaker 0.13.0 で削除された。本ドキュメントは歴史的資料として保持している。現行の戦略は `weighted` / `affected` / `hybrid` / `full`。詳細は [migration-0.12-to-0.13.md](migration-0.12-to-0.13.md) を参照。 Coverage-guided fuzzing の知見をテスト選択に応用した戦略。変更されたコードをカバーするテストを効率的に選択し、冗長なテスト選択を排除する。 ## 仕組み 1. changed files から影響範囲を特定 2. カバレッジデータから影響範囲をカバーするテストを列挙 3. Greedy set cover でカバレッジの新規性が最大のテストを順に選択 4. カバレッジデータがなければ co-failure で近似 5. 残り枠は weighted random で埋める ## 使い方 ### 1. カバレッジデータの収集 テスト実行時にカバレッジデータを生成し、`flaker collect coverage` で取り込む。 **Istanbul (nyc / Vitest / Jest):** ```bash # Vitest で coverage 生成 npx vitest run --coverage # flaker に取り込む flaker collect coverage --format istanbul --input coverage/coverage-final.json ``` **V8 coverage (Node.js):** ```bash # Node.js で V8 coverage 生成 node --experimental-test-coverage test.mjs # flaker に取り込む flaker collect coverage --format v8 --input coverage/ ``` **Playwright:** ```bash # Playwright で coverage 生成 npx playwright test --coverage # flaker に取り込む flaker collect coverage --format playwright --input test-results/coverage/ ``` ### 2. サンプリング実行 ```bash # coverage-guided 戦略でサンプリング flaker run --dry-run --strategy coverage-guided --changed src/auth.ts src/api.ts --percentage 20 # hybrid 戦略でも coverage データがあれば自動利用 flaker run --strategy hybrid --changed src/auth.ts ``` ### 3. flaker.toml 設定 ```toml [coverage] format = "istanbul" # istanbul | v8 | playwright input = "coverage-final.json" granularity = "statement" # statement (default) | function | branch ``` ## 対応フォーマット | フォーマット | 入力形式 | 説明 | |-------------|----------|------| | `istanbul` | `coverage-final.json` | Istanbul/nyc の statement coverage | | `v8` | V8 coverage JSON | Node.js 内蔵の V8 coverage | | `playwright` | Playwright coverage JSON | Playwright の V8 coverage 出力 | ## カバレッジ Adapter の拡張 カスタム coverage フォーマットに対応するには、`CoverageAdapter` インターフェースを実装する。 ```typescript import type { CoverageAdapter, CoverageEdge } from "./adapters/coverage-types.js"; export const myCoverageAdapter: CoverageAdapter = { name: "my-format", parse(input: string): CoverageEdge[] { // input をパースして CoverageEdge[] を返す return [ { suite: "tests/auth.test.ts", testName: "login", edges: ["src/auth.ts:10", "src/auth.ts:42"], }, ]; }, }; ``` `CoverageEdge` の `edges` は `ファイルパス:行番号` または `ファイルパス:関数名` の形式で指定する。 ## 設計詳細 [ML ベーステスト選択 設計ドキュメント](ml-test-selection-design.md) を参照。