CTS-KB

テストトロフィー

てすととろふぃー

Testing Trophy Test Trophy テスト・トロフィー
#テスト #テストモデル #配分戦略 #フロントエンド

結合テスト を中心に厚くし、 静的解析(型 / lint)を基盤に置く テスト配分モデル。Kent C. Dodds が 2018 年のブログ記事 The Testing Trophy で提唱した、 テストピラミッド の現代版。

概要

       /\
      /E2\         ← 少なめ
     /----\
    / 結合 \      ← 多め(中心)
   /--------\
  /   単体  \     ← 中くらい
 /----------\
/   静的解析  \   ← 基盤(型 / lint)
--------------

4 層構造 で、ピラミッドの 3 層に 静的解析(型 / lint)の基盤 を加え、 結合テストを中心に厚く したのが特徴。トロフィー(カップ型)の形に見える。

各層の意図

役割
E2E少なめ(クリティカルパスのみ)
結合★ 中心。実本番に近い検証
単体中くらい(複雑なロジックのみ)
静的解析基盤(型システム・lint で機械的に検出)

なぜトロフィー型か

結合テストが「最もコスパが良い」

実本番との近さ:   E2E > 結合 > 単体
実行速度:        単体 > 結合 > E2E
コスパ最大点 = 結合

ピラミッドが想定した「単体は速くて安い」は今でも正しいが、 モック過剰の弊害 が無視できなくなった。結合テストは速度を犠牲にしても 本物に近い検証 ができる。

型システムが単体の一部を代替

TypeScript・Rust・Kotlin など型が厚い言語では、 「型チェックが通れば多くのバグは捕まる」 。型で表現できる範囲はテストを書かなくても良いという発想。

単体テストの過剰書きを抑制

単体テストの粒度を細かくしすぎると、 リファクタで全テストが壊れる 。Trophy では単体を「複雑なロジックの要所のみ」に絞り、リファクタ耐性を高める。

トロフィーが向く場面

状況向き具合
フロントエンド(React 等)
TypeScript / Rust / Kotlin
API 連携が多い
型なし言語△(静的解析基盤が薄い)
純粋計算ロジック中心△(単体の方が向く)

ピラミッドとの違いまとめ

観点ピラミッドトロフィー
提唱年20092018
中心単体テスト結合テスト
静的解析言及なし基盤として明示
単体の量多め中くらい
結合の量中くらい多め(中心)
主な対象バックエンドフロントエンド・型あり言語

AI 駆動開発との関係

AI 駆動開発では型システムがあると AI 生成コードのバグを型で機械的に検出 できる。トロフィーの「静的解析基盤」は AI 時代に特に効きます。

AI 駆動開発での効用トロフィーが提供
型エラーで AI ミスを即検出静的解析基盤
モック地獄を回避結合中心
本番乖離を最小化実環境に近い結合テスト

関連記事

関連用語

参考資料