3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

E2Eテスト実装の戦略と実践例

3
Last updated at Posted at 2025-12-22

本記事は2024年に社内向けに発表した資料に加筆修正したものです。

目次

  1. TL;DR(この記事の要点)
  2. テストについてのおさらい
  3. 成果報告
  4. Next Actions
  5. 参考文献

1. TL;DR(この記事の要点)

1.1. 主張

E2Eテストを効果的に導入することで、バグ発生率7.79%減少QAコスト103MD削減コードカバレッジ73.1% を達成した。成功の鍵は「選定→実装→計測」のサイクルを回し、優先順位の高いテストケースから自動化を進めたことにある。

1.2. 課題:質とスピードの両立(プロフィットツリー)

開発チームとして「質の高い製品を素早く届ける」ためには、品質スピードの両立が必要である。以下のプロフィットツリーで、目標達成のために改善すべき要素を分解した。

E2Eテスト自動化による改善効果:

改善項目 施策 成果
テスト漏れを減らす 継続的な自動テスト実行 バグ発生率 7.79%減少
バグの早期発見 CI/CDパイプライン統合 開発中にバグ検出
手動テスト工数を減らす テストケースの自動化 103MD削減
手戻りを減らす 早期発見による修正 修正コスト削減

1.3. 目指した指標

指標 目的 達成値
バグ発生率 品質向上 7.79%減少
QAコスト 効率化 103.05 MD削減
コードカバレッジ 網羅性 73.1%

1.4. 解決ワークフロー

以下の3ステップを継続的に回すことで、効果的なテスト自動化を実現した。

ステップ 内容 ポイント
選定 バグ発生率の高いテストケースを特定 QAチームとの協議で優先順位決定
実装 Cypressでテスト実装、CI/CDに統合 継続的なメンテナンス
計測 カバレッジ・効果を検証 データ品質の担保が重要

2. テストについてのおさらい

2.1. マイク・コーンのテストピラミッド(改訂版)

テストをその対象で分ける代わりに、テストの範囲によって分けることを提案する。ソフトウェアの中でテストが占める割合が大きいほど、ピラミッドの上部に配置される。

image

Figure 1.1. A revised version of the original test pyramid

出典: Testing JavaScript Applications

2.2. 各テストの性質

image

2.3. ユニットテストの範囲

ソフトウェアの最も原子的な構成要素である関数を検証する。

ユニットテストはピラミッドの一番下にあるので、そのスコープは小さい。上に行くにつれて、テストがカバーする範囲が広がっていく。

image

2.4. 統合テストの範囲

統合テストは、ソフトウェアのさまざまな部分がどのように連携して動作するかを検証する。

統合テストのスコープは、単体テストのスコープよりも広い。統合テストは、関数がどのように相互作用するか、そして、ソフトウェアがどのようにサードパーティと統合されるかをチェックする。

image

2.5. E2Eテストの範囲

エンドツーエンドのテストは、ユーザの視点からアプリケーションを検証する。

End-to-endテストは外部の視点からソフトウェアとのインターフェイスを提供する。高度に分離されたアプローチをとることで、アプリケーションの広い領域をカバーする。

image

2.5.1. インターフェイスを検査対象により分類する

ウェブアプリケーションにおけるユーザの視点からのインターフェイスをテストの検査対象で分類すると以下のようになる。

アプリケーション全体

  • GUI
    • HTTP API
    • WebSocket
    • その他のリアルタイム通信技術などに依存する

バックエンド

  • HTTP API
  • WebSocket
  • Webhooks
  • RSSフィードやAtomフィード
  • CLI
  • EメールやSMS
  • ...

2.5.2. E2Eテストの細分化

マイク・コーンのテストピラミッドからエンドツーエンドテストの領域を細分化し、HTTP APIテストをGUIテストの下に配置する。

image

HTTP APIテストの特徴:

  • アプリケーションの広い範囲をカバー
  • GUIテストの複雑さを伴わない
  • 統合テストやユニットテストより遅い
  • GUIを含むE2Eテストよりはるかに速い
  • 強力な保証を提供

2.5.3. HTTP APIテストの範囲

HTTP APIテストは、アプリケーションのバックエンド全体と、アプリケーションが公開するHTTP APIをカバーする。

image

2.5.4. GUIテストの範囲

GUIテストはアプリケーションのすべての部分をカバーするため、テストピラミッドの中で最も高い位置にある。

image

GUIテストの特徴:

  • アプリケーション全体の表面をカバー
  • GUIに密結合だが、コードには密結合しない
  • 最も遅いテスト
  • 最も強力な保証を提供

GUIテストはアプリケーション全体を対象とする。クライアントを使用してバックエンドと対話するため、スタックのすべての部分にアクセスする。

image

2.6. アジャイルテストの4象限

縦軸がビジネス面と技術面、横軸がチームを支援する側面と製品を批評する側面。

image

出典: 『実践アジャイルテスト』P96

テストピラミッドに分類される自動テストの対象範囲は一般的にQ1〜Q2の領域に配置される。

2.7. テストケースの選定

表に色付けし優先順位を付けて並び替える作業をすることで特に自動化コストが低く、リスクや手動テストのコストが高いところから自動化する

image

出典: 質とスピード(AWS Dev Day 2023 Tokyo 特別編)


3. 成果報告

3.1. 当社にて現在本番稼働しているサービスにおける達成項目

指標 数値 説明
バグ発生率減少 7.79% 全テストケースにおけるE2Eテスト導入前と現在のバグ発生率の差
QAコスト減少 103.05 MD E2Eテストによって代替できた項目消化工数
コードカバレッジ 73.1% E2Eテストによるラインカバレッジの網羅率

3.2. バグ発生率減少の要因

効果的なテストケースの選定

優先順位をつけてバグ発生率の減少効果が高いところから自動化を進めた。

image

3.2.1. プロセス

  1. Jiraのバグチケットからバグ発生率の高いテストケースを見つける
  2. 試験項目表と照合
  3. Cypress Dashboardで自動テストを実装して継続的に監視

QA項目の自動化する優先順位の付け方はQAチームと協議して決定した。

3.3. QAコスト減少の要因

継続的なテストのメンテナンス

CI/CDパイプラインにE2Eテストを統合し、継続的にテストコードのメンテナンスを行った。
image

E2Eテストによって代替できた項目消化工数 = 103.05 MD

  • QAが手動で実施した場合のコスト: 0.025 MD/CASE
  • E2Eが今まで実行したCASE数: 4122
  • 0.025 × 4122 = 103.05 MD

3.4. コードカバレッジを効果的に高くできた要因

E2Eテストの特性

テストケース数ベースで自動化の割合を考えると:

image

約16.6%の自動化で73.1%のコードカバレッジを達成している。

これはテストピラミッドが示すように、E2Eテストが少ないテストケースで広範囲をカバーできる特性による。

3.5. コードカバレッジの水準

テストカバレッジ70%程度がどのくらいの水準かユニットテストの場合を見てみると:

image

出典: Code Coverage at Google

思慮深くテストを実施すれば、テストカバレッジはおそらく80%台後半か90%台になるだろう。100%は信用ならない。

テストカバレッジ - Martin Fowler's Bliki (ja)

3.6. 選定、実装、計測のサイクルが重要

QAコストを効果的に減少させるためにはテストの選定、実装、計測のサイクルが重要。

image

3.7. テストの選定・実装についての考察

今回の経験を振り返りE2Eテストを更に整理してみる。

QAコスト大、実装コスト大(少量) QAコスト小、実装コスト小(大量)
シナリオを再現するための前提条件が多い シナリオを再現するための前提条件が少ない
依存するAPIエンドポイントが比較的多い 依存するAPIエンドポイントが比較的少ない
実装詳細に関わるので開発者がカバーするのが効果的 今後AIベースの自動テストツールの発展でカバーできるかもしれない(Autify, mabl, Testim等)

3.7.1. E2Eテストのケース数ベースでの割合は20%ぐらいが上限

  • ほとんどのバグはソースコードの10%〜20%から出るという考え
  • 「アイスクリームコーン」というアンチパターンを避ける

単体テストを入れていく、そしてどこからやるかの話は『ソフトウェア品質を高める開発者テスト』にて紹介されている。複雑度やHotspot値によってスコア付けをし、特に複雑度が高いものはファイルを分割して複雑度を減らしてから単体テストを書く方法が紹介されている。

選定の振り返りに自動化割合とラインカバレッジを合わせて確認すると効果的?

3.8. テストの計測についての考察

誤った意思決定を防ぐためにもデータ品質は重要。当初、テストカバレッジの算出にbackendから自動生成されていたapi clientのコードも含まれていたので、正しい数値が算出できていなかった。

3.9. 成果報告の総括

「バグ発生率7.79%減少」「QAコスト103MD削減」「コードカバレッジ73.1%」という数値そのものではなく、これらの数値を導き出すに至ったプロセスにこそ、本取り組みの本質的な価値がある。

本報告では、QAチームとの協議を経て優先順位を明確に定め、バグ発生率の高いテストケースから着手している。これは「選定→実装→計測」のサイクルを回すという、地道ではあるが確実な方法論である。

成功の本質は数値ではなく、「なぜそのテストを書くのか」「何を計測すべきか」を常に問い続ける姿勢にある。


4. Next Actions

4.1. 効果的なテストケース選定プロセスの探索

  • バグ発生率の説明変数を見つける
    • 実装工数、コードの複雑度、...

テストデータの更なる収集が必要:

  • メタデータをテストコードに与えていく
  • テスト失敗の原因データを集める

参考:

4.2. 深いシナリオと見なされる重要なテストケースにおけるAPI Testingの実装

4.3. AIベースの自動テストツールの導入


5. 参考文献

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?