テストピラミッドとは?
テストピラミッドとは、テストの種類をバランスさせるためのガイドラインです: 底部に多数の高速なunit tests、その上に少数のintegration tests、頂点にさらに少数のend-to-end tests。
すべてのテストが、速度、コスト、捕捉するものにおいて等しいわけではありません。テストピラミッドは、それらをどう混ぜるかのシンプルなメンタルモデルです: 底部に多数の安価で高速なテスト、頂点に少数の高価で広範なテスト。
3つの層
底部はunit tests: 多数で、高速で、コードの小さな部分に焦点を当てます。中間はintegration tests: 少数で、より低速で、コンポーネントが連携することを確認します。頂点はend-to-end tests: 最少で、最も低速で、最も広範で、ユーザーの旅全体を検証します。その形、底が広く頂点が狭い、が推奨です。
なぜその形なのか
高速で安価なunit testsは最も速く最も精密なフィードバックを与えるので、それを多数欲しくなります。end-to-end testsは現実的ですが遅くflakyなので、クリティカルなパスをカバーするのに十分な数だけ欲しいのです。ピラミッドを逆さにし、遅いend-to-end testsに頼ると、スイートが遅く脆くなります。
例
健全なプロジェクトは、1分以内に実行される数千のunit tests、数分で実行される数百のintegration tests、そしてsignup、checkout、loginをカバーする数ダースのend-to-end testsを持つかもしれません。カバレッジの大部分は底部から安価に得られます。
アンチパターン: ice cream cone
ピラミッドの逆、少数のunit testsに対して多数のend-to-endと手動テスト、は時に "ice cream cone" と呼ばれます。それは変更のたびに実行するのが苦痛な、遅くflakyなテストスイートを生み、continuous integrationを損ないます。ピラミッドは、チームをこれから遠ざけるために存在します。
なぜCIにとって重要なのか
CIは変更のたびにスイート全体を実行するので、その速度と信頼性は人々がどれだけ頻繁に統合するかに直接影響します。ピラミッド型のスイートは高速に実行され、めったにflakyにならず、フィードバックを速く保ちます。頂点が重いスイートはあらゆるプルリクエストを長引かせ、それがピラミッドがCIに優しいデフォルトである理由です。
重要なポイント
- ピラミッドは、多数のunit tests、少数のintegration、最少のE2Eを好みます。
- 底部の高速で安価なテストが、秒あたり最良のフィードバックを与えます。
- 頂点が重い "ice cream cone" は、CIを遅くしflakyにします。