本記事では、E2Eテストの概要や、アプリケーション開発に役立つエンドツーエンド (End to End) テストの実践ガイドやポイントを詳しくご紹介します。


E2E テストを手早く実装したいという方には、CircleCI などの CI/CD プラットフォームがお勧めです。 ぜひ、今すぐ CircleCI の無料アカウントを作成し、E2E テストを始めてみてください。

無料アカウントを作成する


E2E テストとは?

E2E (エンドツーエンド) テストは、アプリケーションが期待どおりに動作し、ユーザーのタスクやプロセスの種類を問わずデータフローが適切に機能することを確認する手法です。 具体的には、エンドユーザーの観点に立って現実世界で想定されるシナリオをシミュレートします。 たとえば登録フォームでは、ユーザーが以下の操作のいずれか (または複数) を行うと想定されます。

  • メールアドレスとパスワードを空のままにする
  • 有効なメールアドレスとパスワードを入力する
  • 無効なメールアドレスとパスワードを入力する
  • 登録ボタンを押す

E2E テストを実施することで、これらすべての操作がユーザーの期待どおりに機能するか検証できます。

E2E テストは網羅的なテストのように思えますが、継続的インテグレーションを堅実に実践するには、他にも多数のテスト手法を組み合わせる必要があります。 検討すべき主なテストは以下のとおりです。

  • 単体テスト: システムの構成コンポーネントの 1 つひとつが期待どおり機能することを確認する
  • 機能テスト: システムが特定の入力に対して適切な出力を返すことを確認する
  • 結合テスト: 個々のソフトウェアモジュールを 1 つのグループとして組み合わせてテストする

E2E テストが上述のテストと異なる点は、ユーザーのワークフロー全体に焦点を置くことにあります。

E2E テストが重要な理由

以下のような理由から、E2E テストは広く採用されています。

  • 詳細なテストケースを数多く追加できるので、単体テストや機能テストなどのテスト手法よりもテストカバレッジの拡張に役立つ
  • エンドユーザーの行動に基づくテストケースを実行して、アプリケーションが正しく動作することを確認できる
  • 重要なユーザーの操作順序を自動化して、市場投入までの時間を短縮できる
  • ソフトウェアのテストにかかる時間を短縮して、ソフトウェアの開発と保守にかかる総コストを削減できる
  • バグを定期的かつ確実に検出できる

E2E テストは、開発者やテスト担当者、マネージャー、ユーザーなど、さまざまな立場の人物にとってメリットがあります。 開発者にとってのメリットは、テストと品質保証の大半を QA チームに任せて、アプリケーションへの機能追加に注力できることです。 テスト担当者には、E2E テストならではの作成のしやすさがメリットです。E2E テストの基となるのはユーザーの行動であり、それらの行動はユーザービリティテストで観察しチケットで文書化できるからです。 E2E テストを行うことで、エンドユーザーへのリリース前にソフトウェアの問題を検出しやすくなります。 マネージャーにとっては、E2E テストを通じて実際のユーザーのワークフローの重要度を把握することで、開発バックログのタスクの優先順位を調整しやすくなるというメリットがあります。

ユーザーの立場で見ると、E2E テストにはエクスペリエンスを高める効果があります。 特に、ユーザー操作が多く必要な Web アプリ、デスクトップアプリ、モバイルアプリでは、テストケースによりユーザーの期待を満たしているかどうかを確かめられるからです。

E2E テストの課題

E2E テストは優れたソフトウェアテスト手法です。 しかし、E2E テスト自体の特性から、以下の課題があります。

  • 時間がかかる
  • 現実世界のシナリオを再現するようにテストを設計する必要がある
  • ユーザーの目的を深く理解する必要がある

時間がかかる

E2E テストは、テストケースを作成するうえで製品を詳しく理解しなければならないため、時間がかかります。 ソフトウェア製品が大規模であれば、ユーザーが取り得る行動は数多く存在します。しかし、その行動それぞれについてテストを行う価値はほとんどありません。 E2E テストよりも単体テスト、スナップショットテスト、結合テストを頻繁に行い、E2E テストは最も優先順位の高いユーザーのワークフローについてのみ実施するケースが一般的です。

テスト設計が難しい

E2E テストは現実世界におけるユーザーの行動をシミュレートするので、テストを設計する際に考慮すべき要素が数多くあります。

たとえば Web アプリケーションであれば、使用されるブラウザーは多数あり、しかもブラウザーごとに仕様が異なります。 そのため、ブラウザー別にテストを作成する必要があります。 これは手間がかかるうえに、予算超過に至る可能性があります。 また、テスト駆動開発を実践していてコードに対するフィードバックがすぐに欲しい場合、E2E テストではうまくいきません。

ユーザーの目的の理解

ユーザーが求めているのは機能そのものではなく、特定の問題に対する解決策です。 そのため E2E テストでは、ユーザーの問題をアプリで効率的に解決できるかどうかということに焦点を置くべきです。

ここでの問題は、開発チームがユーザーの目的を細かく理解しきれない場合があることです。 そのため、ソフトウェア開発の早い段階で、ソフトウェアの機能に対するユーザーの意見を集める手段を導入する必要があります。 ユーザー調査のコストはかさみがちであるため、実際のユーザーとなる人にアプリケーションの “ベータテスター” を頼む方法がよく取られています。

E2E テストの実装方法

さて、開発プロセスに E2E テストを組み込むことの重要性はわかりましたが、どこから始めればよいでしょうか。 第一歩としては、E2E テストケースの設計がお勧めです。 その後、まず手動で E2E テストを行い、うまく機能するようになったらテストの自動化に取り掛かりましょう。

E2E テストケースの設計

E2E テストにはいくらかの準備が必要です。まずは、E2E テストの実装に関係する作業を把握しましょう。 以下に、一般的な E2E テストで行う作業を示します。

  • E2E テストの結果を検証するための要件を確認する
  • テスト環境と要件を設定する
  • システムとサブシステムのすべてのプロセスを定義する
  • 各システムとサブシステムの役割と責任を記述する
  • テストに使うツールとフレームワークをまとめる
  • テストケースの設計要件をリストアップする
  • システムごとに入力データと出力データをリストアップする

これらの作業を終えたら、E2E テストを実装する準備は完了です。

手動の E2E テスト

手動テストは、人間のテスト担当者がテスト対象のソフトウェアを直接操作して実施します。 これにより、テスト担当者は役に立つ機能とそうでない機能を素早く把握しながら、テスト計画を作成できます。 手動テストを実施することで、テストケースの特定や、それまで見えていなかったユーザーのシステムの操作順序を発見できます。 さらに、テストケースの自動化を進めるうえで必要な情報も得られます。 手作業で作成したテスト計画とテストケースは、自動テストにすることができます。

手動テストの手法には、水平と垂直の 2 種類があります。

水平 E2E テストでは、アプリケーション全体を対象とします。 このテストを行うには、ソフトウェア開発チームがワークフローを詳しく定義し、信頼性の高いテスト環境を用意する必要があります。 1 つのテストワークフローで複数のサブシステムを対象とする場合もあります。 水平 E2E テストの例としては、UI とデータベース、メール統合の同時テストが挙げられます。

垂直 E2E テストは、アプリケーションを個別のテストが可能なレイヤーに分解して行います。 垂直 E2E テストはレイヤー別に細かく実施するため、水平 E2E テストに先立って実施するのが一般的です。 たとえば、ユーザーインターフェースの各サブシステムについて垂直 E2E テストを行うことで、バグを簡単に特定し修正できます。

E2E テストの自動化

プロジェクトが大きくなると、手動ではすべての E2E テストを行いきれなくなってきます。 この問題は、ユーザーインターフェースのテストで顕著です。1 つのユーザーインターフェース操作が、他の複数の操作につながるからです。 このように操作どうしが複雑にからみあう事態に対処するには、テストの自動化が欠かせません。 E2E テストを自動化すれば、ユーザー操作を自動でテストし、貴重な時間を節約できます。

手動でテストケースを確立できたら、そのケースをコードとして記述し、自動テストツールに統合しましょう。 たとえば、CI/CD パイプラインを使用すると、ソフトウェアの E2E テストを自動化できます。

ソフトウェアに新機能を追加するペースに対応するには、ソフトウェアテストの自動化が唯一の現実的な選択肢です。 テストを自動化すると、新しいコードを追加するたびにコードベース全体がテストケースに照らして自動的にチェックされるので、バグの捕捉にかかる時間を短縮できます。

おわりに

この記事では、E2E テストの概要を確認し、E2E テストのメリットと課題を説明しました。 また、E2E テストの実装方法について、水平テストと垂直テストの 2 つを取り上げ、手動テストと自動テストの違いと併せて説明しました。

手動テストは E2E テストを始める第一歩としてお勧めであり、自動テストを構築する基盤となります。 テストの自動化には、時間の節約だけでなく、複雑化の防止という効果もあります。これにより、チームがアプリケーション開発に全力を尽くせるようになります。

追加参考情報一覧