zudo-test-wisdom
GitHub リポジトリ

検索したい単語を入力

いつでも検索バーを開ける

クイック判断テーブル

変更内容に基づいて使用すべきテストレベルを決定する。

クイック判断テーブル

このテーブルを使って、現在のタスクに必要な最小テストレベルを判断します:

変更内容最小レベル理由
純粋なロジック/ユーティリティ関数レベル1DOMやCSSが関与しない
コンポーネントのprops/状態レベル2出力を検証するためにシミュレートDOMが必要
ビルド設定/テンプレート/SSGレベル3ビルドされた出力ファイルを検査する必要がある
CSS/レイアウト/表示レベル5CSSは実際のレンダリングエンジンが必要
インタラクティブなUIフローレベル4ユーザーインタラクションには実際のブラウザが必要
ビジュアルバグの報告レベル5算出スタイル + 視覚的結果を確認する必要がある
「表示されない」レベル5表示は視覚的な属性
「まだ壊れている」(テストがパスした後)1つ上のレベル現在のレベルはこのバグに対するブラインドスポットがある
canvas/フォトエディタ/ズーム・リサイズなどで、L4が書けず、かつL5でも到達できないレベル6(最終手段)E2Eも決定論的視覚検証もアサーションを表現できない

Warning

「最小レベル」とは、バグを確実にキャッチできる最低のレベルを意味します。 より低いレベルを使用すると誤った確信を与えます -- テストはパスしますが、バグは残ります。

判断フローチャート

flowchart TD A[何を検証していますか?] --> B{純粋なロジックですか?} B -->|はい| L1[レベル1: ユニットテスト] B -->|いいえ| C{コンポーネントの動作ですか?} C -->|はい| D{CSS/表示に関わりますか?} D -->|いいえ| L2[レベル2: DOMコンポーネントテスト] D -->|はい| L5a[レベル5: 視覚的検証] C -->|いいえ| E{ビルド出力ですか?} E -->|はい| L3[レベル3: ビルド出力テスト] E -->|いいえ| F{インタラクティブUIですか?} F -->|はい| L4[レベル4: E2Eブラウザテスト] F -->|いいえ| G{ビジュアル/CSSですか?} G -->|はい| L5b[レベル5: 視覚的検証] G -->|いいえ| L1b[レベル1: ユニットテストから開始] L4 -. L4 intractable AND L5 unreachable .-> L6[レベル6: AIベース<br/>final resort, not for CI] L5b -. L4 intractable AND L5 unreachable .-> L6

重要な原則: CSSは常にレベル5が必要

CSS、レイアウト、視覚的な外観に関わる変更はレベル5をデフォルトにすべきです。その理由:

  1. レベル1(ユニットテスト)-- DOMがまったくなく、CSSを処理できない

  2. レベル2(jsdom)-- DOMはあるがCSSエンジンがない;getComputedStyle()は空文字列を返す

  3. レベル3(ビルド出力)-- ファイルの内容を検査するが、レンダリングは検査しない

  4. レベル4(Playwright)-- 実際のブラウザで実行するが、通常は視覚的な外観ではなくDOMの状態をアサートする

レベル5(verify-ui + headless-browser)のみが、算出スタイルの値を決定論的にチェックし、結果を視覚的に確認できます。

エスカレーションのトリガー

以下の場合に次のレベルに進みます:

  • テストがパスしたがユーザーが問題の継続を報告した

  • ロジックをテストしているがバグが視覚的な可能性がある

  • 下位レベルのテストでデータの正しさが確認されたが出力が正しく見えない

  • CSSまたはレイアウトの問題が疑われる

  • 複数の下位レベルのテストがパスしたが機能がブラウザで動作しない

L6へのエスカレーションルール

レベル6(AIベース)へのエスカレーションは、通常の「次のレベル」進行の一部ではありません。同時に以下の両方が真である必要があります:

  1. L4が書けない。 対象サーフェスに対してクリーンなE2Eを書くことが真に不可能 — canvasベース、多重のカメラ/ズーム、ステートフルなリサイズ変換など — 単に「いつもより難しい」ではない。

  2. L5がアサーションに届かない。 安定したbounding rectを返すDOM要素がない、算出スタイルが適用できない(対象が <canvas>)、スクリーンショットのピクセル差分はノイズが多すぎる。

どちらか片方しか真でない場合、正しい答えはもう一方の階層です。L6は最終手段であり、「L5が難しいときの次の試み」ではありません。

レベルを選んだ後:実行場所を決める

適切なテストレベルを選ぶことで、テストが何を見るかが決まります。残る2つ目の決定は:テストはどこで・いつ実行されるのか? それが実行ティアです — 独立した別の軸です。

  • 実行ティア — T0(インナーループ)からT4(ローカルヘビーレーン)までを定義し、各ティアの適用条件とティア間の移行ルールを説明します。

  • 重いテストの判断ルール — PR CIに重すぎると感じるテストへの対処手順:レベルを下げるか、削除するか、「なぜ重いのか」を分類して適切なティアを割り当てます。

Revision History

Takeshi Takatsudo作成: 2026-04-04T07:11:52+09:00更新: 2026-06-17T02:21:43+09:00