2024-01-20 テストピラミッド
テストピラミッドについて、t-wadaさんが書かれている下記の記事から引用する。
第5回 テストピラミッド ~自動テストの信頼性を中長期的に保つ最適なバランス~ | gihyo.jp
テストピラミッド
図1は、テストの粒度をユニットテスト、インテグレーションテスト、E2E(end to end)テストの三段階で示しており、テストピラミッドの説明によく用いられます。ユニットテストが最も多く、E2Eテストが最も少ない状態に近づけることで、開発速度と信頼性の高いバランスが得られると言われています。
図1 テストピラミッド
アイスクリームコーン型
望ましくない比率の例としては、図2のアイスクリームコーン型や、上下に比べ中央がくびれた砂時計型が挙げられます。どちらも上段のテストが多いのが特徴です。なぜそうなるのでしょうか。
図2 アイスクリームコーン型
E2Eテストのように、テスト内容がユーザー視点に近く、検証するコード範囲も最も広くなるテストを書けるようになると、これらのテストだけですべての範囲を網羅できると錯覚しがちになります。しかし、これらのテストは決定性が低いため、コードに変更がないのに結果が毎回変わる、コードが正しいのに失敗するなどの不安定な動作が増えます。そういった信頼不能テスト(flaky test)は失敗時の原因究明を困難にし、開発者はテスト結果を次第に信頼しなくなります。
どれくらいのバランスがいい?
指標としては「下段:中段:上段=70:20:10」を目安とし、システムが大規模になるにつれて自動テストの決定性や速度がさらに重要になりますので、80:15:5を目指すのがよいでしょう。