
Pragya Yadav 著
エンドツーエンド(E2E)テストとは
エンドツーエンド(E2E)テストとは、ユーザーの視点からアプリケーションのワークフロー全体を精査するテストであり、包括的にアプリケーションをテストするうえで大きな価値があります。E2Eテストは本番環境で実ユーザーに影響を与える可能性のある潜在的なバグを検出し、アプリケーション内外のすべてのコンポーネントがシームレスに連携することを保証します。テストピラミッドでは、E2Eテストは単体テスト、統合テスト、システムテストの後に実施されます。
次に実践的なシナリオを見てみましょう。
E2Eテスト: モバイルバンキングアプリケーションでの振込処理
金融取引は機密性が高いため、アプリケーションを包括的にテストするには、E2Eテストが不可欠です。ここでは、モバイルバンキングアプリケーションのE2Eテストの手順を紹介します。
一般的な手順は、ユーザーのログイン、振込開始、取引状況の確認です。
- モバイルアプリのインストールと起動
- モバイル端末にモバイルバンキングアプリをインストールします。
- アプリをタップして、アプリが正常に起動し、ログイン認証情報が求められることを確認します。
- ユーザー認証
- バンキングアプリにログインするための有効なユーザー認証情報を入力します。
- アプリが安全なログインのためにワンタイムパスワード(OTP)などの多要素認証(MFA)を要求することを確認します。
- 認証を完了します。
- ダッシュボードデータ
- ログイン後、ダッシュボードに正しいユーザー/アカウントデータが表示されていることを確認します(口座残高、口座番号、支店など)
- ダッシュボードのクイックアクセスリンクとナビゲーションが正しく機能していることを確認します。
- 振込開始
- モバイルアプリから振込オプションを選択します。
- 振込先の口座番号、支店、金額、取引内容など、必要な情報をすべて入力します。
- 振込処理を続行し、内容を確定します。
- トランザクションの承認と処理
- アプリのセキュリティ対策に基づき、OTP、PIN、生体認証などで取引を承認します。
- 取引が処理され、確認メッセージが表示されます。
- 口座残高が適切に更新されます。
- 取引通知
- 電子メール、SMS、電話などによる取引通知の受信を確認します。
- 取引状況の確認
- 取引履歴に移動し、取引の詳細が期待通りに記録されているかを確認します。
- ログアウトとセッション終了
- アプリからログアウトし、セッション終了が機能していることを確認します。
- データベースのチェック
- データベースをチェックし、取引の詳細が正しく記録されていることを確認します。
この例では、ユーザーの立場から、インストール、ログイン、振込、確認、ログアウトまでを含む、モバイルアプリのエンドツーエンドワークフローの概要を示しています。このテストはセキュリティ、効率性、操作性、使いやすさを評価します。
テストの種類: 水平テストと垂直テスト
ソフトウェアアプリケーションのE2Eテストには、水平E2Eテストと垂直E2Eテストという2つのアプローチがあります。
水平E2Eテスト
ソフトウェア/アプリケーションのフロー全体を、エンドユーザーが通るのと同じようにすべてのレイヤーにわたって段階的に検証します。ビジネスプロセス全体を精査し、UIからビジネスロジック、データ処理、データベースレイヤー、さらにその先へとシームレスに進めることができます。
たとえば、モバイルバンキングアプリケーションでは、ログイン、取引開始、処理、データベース検証といった包括的なビジネスフローをカバーします。
垂直E2Eテスト
垂直E2Eテストは、水平E2Eテストよりもより細分化されたアプローチをとります。最も細かいレベル(例:データベース)からUI、あるいはその逆の方向で、レイヤーを1つずつテストすることに重点を置きます。アプリケーションのさまざまなレイヤーをテストする際に、下から上、あるいは上から下へのアプローチを採用することができます。
たとえば、モバイルアプリケーションの例では、最も細かいレベルとしてデータベースのテストから始めることができます。次に、トランザクション処理を担うAPIのテストを行ってからユーザーインターフェースに移ります。あるいは、UIから始めてデータベースの検証で終わるという、上から下へのアプローチを採用することもできます。
E2Eテストにおける課題
E2Eテストの性質上、テスト中にさまざまな課題が発生する可能性があります。
テストおよびセットアップが複雑
E2Eテストを設計する際には、アプリケーションのワークフロー全体をカバーするシナリオを作成します。アプリケーションが複雑になればなるほど、テストシナリオも複雑になります。コンフィギュレーション、データベース、外部依存関係など、実環境を模倣したテスト環境の構築は、全体的な複雑さに輪をかけます。
テスト実行時間の増加
通常、E2Eテストでは、ユーザーの操作を模倣し、ユーザーインターフェースを通じてアプリケーションと対話します。このプロセスは、単体テストのような低レベルのテストよりも時間がかかります。実行時間が長くなるとフィードバックが遅くなり、現代のソフトウェア開発ライフサイクル(SDLC)に必要とされるアジャイル開発のスピードに影響を与えます。
テストケースが不安定
複数のシステムコンポーネントが関係するテストを安定させるのは、その性質上、困難な場合があります。E2Eテストはアプリケーション、特にUIの変更の影響を受けやすい可能性があります。ささいな修正でもテストの失敗につながる場合があります。さらに、ネットワークの状態や外部システムの状態といった環境要因が不安定さをもたらすこともあります。
保守やデバッグが難しい
アプリケーションの発展に伴い、UI、機能、またはビジネスロジックの変更を反映するために、E2Eテストスクリプトを更新する必要があります。エンドツーエンドという性質上、E2Eテストにおける不具合のデバッグは困難な場合があります。エラーの根本原因を特定するには、さまざまなコンポーネントとその相互作用を調べる必要があるかもしれません。
外部システムへの依存
E2Eテストは、外部のソフトウェアシステム、サービス、またはAPIと連携することがよくあります。このような外部依存関係の変更やダウンタイムがテストの失敗につながる可能性があります。依存関係の調整と管理は、特に複雑な分散システムでは困難になる場合があります。
テストデータの管理が複雑
E2Eテストのためのテストデータの生成と管理は、特に複数のテストシナリオ、ユーザーロール、データの組み合わせを扱う場合、複雑になる可能性があります。データの一貫性、可用性、再現性を確保することは、信頼性の高いテストを行うためにきわめて重要です。
テストカバレッジの不足
E2Eテストで網羅的なテストカバレッジを達成するのは容易ではありません。想定されるすべてのシナリオをカバーすることが現実的でなく、カバレッジに穴がある場合があります。この課題に対処するには、クリティカルパスとシナリオの優先順位付けが不可欠です。
効果的なE2Eテストの大原則
効果的なE2Eテストの3つの柱として、以下が挙げられます。
1.包括的なテスト計画
包括的なテスト計画に基づいて構築された強固な基盤は、E2E テストの目標を組織的に達成するのに不可欠です。主な手順は以下の通りです。
テストスコープの定義
E2Eテストの目的を明確に定義し、どのような機能やフィーチャーが範囲に含まれ、何が含まれないかを明確にします。境界を確立することで、テストへの取り組みを効果的に集中させることができます。
ユーザー要件とフローを知る
E2Eテストを成功させるには、ユーザー要件とフローを理解することが重要です。ユーザーストーリー、ユースケース、ビジネス要件を徹底的に分析し、ユーザーの期待を把握します。この洞察がテストケース作成の指針となり、ユーザーニーズとの整合性を確実にします。
リスクの評価と優先順位付け
ビジネスリスクを分析し、その影響に基づいて重点分野の優先順位を決定します。この情報を基に、E2Eテストプロセスでテストケースを作成するユーザーシナリオやワークフローに優先順位をつけ、リソースを効率的に配分し、リスクの高い分野から対応します。
適切なテスト戦略を立てる
E2Eテストの目的に沿った堅牢なテスト戦略を策定します。プロジェクトの要件と制約に基づいて、適切なテスト手法(手動テスト、 自動テスト、またはハイブリッドモデル)を選択します。
2.テスト環境のセットアップ
E2Eテストの有効性は、テスト環境が本番環境をどこまで忠実に再現しているかにかかっています。整合性の高いテスト環境を構築するために、以下の点を考慮します。
実環境を忠実に再現する
このステップでは、本番環境を忠実に再現するテスト環境を設定します。これには、必要なすべての依存関係、ネットワーク、データベース、外部接続を設定し、正確で信頼性の高いテスト結果を保証することが含まれます。
アクセス制御とセキュリティ制御の設定
実際のユーザーの状況を模倣するために、テスト環境にアクセス制御とセキュリティ制御を導入します。このステップでは、セキュリティ対策を含め、テストが実際のユーザーエクスペリエンスを正確に再現していることを確認します。
テスト環境を検証する
テスト環境をセットアップした後、その正確さを検証し、運用環境を忠実に再現していることを確認します。この検証ステップは、その後のテストアクティビティの信頼性を保証するのにきわめて重要です。
テスト環境のメンテナンス
テスト環境を定期的に更新・メンテナンスし、進化する本番環境との整合性を保ちます。このような継続的なメンテナンスにより、テスト環境が常に本番システムを反映した信頼性の高いものであることを保証し、時間の経過とともに発生する変更や更新に対応できるようになります。
3.テストデータ管理
E2Eテストの成功は、使用するテストデータの品質と密接に関連します。正確性と妥当性を確保するには、以下の重要なステップを実施する必要があります。
テストデータの作成
ネガティブケースやエッジケースを含め、さまざまなシナリオをカバーする適切で現実的なテストデータを作成します。よく練られたテストデータは、テストプロセスの完全性を高めます。
プライバシーおよび機密性
プライバシーと機密性の基準を満たすため、データ規制を遵守します。テストデータに機密情報が含まれている場合は、マスキングや暗号化などの手段を用いて機密性を保護し、プライバシー要件に準拠します。
データの更新とクリーンアップ
テスト結果を損なう可能性のある古いデータの蓄積を防ぐため、テスト実行前のデータ更新とテスト実行後のクリーンアップの手順を策定します。これにより、テストの繰り返しのたびにクリーンな状態から開始し、正確で信頼性の高い結果が得られるようになります。
データのアクセシビリティ
必要なときにアクセス可能な状態を維持しながら、テストデータを安全に保存します。セキュリティとアクセシビリティのバランスを取ることは、シームレスなテスト実行のために非常に重要です。データの完全性を保ちながら、権限を与えられた個人が必要なデータにアクセスできるようにします。
E2Eテストにおける効果的な自動化のベストプラクティス
E2Eテストの自動化の有効性を確実にするために、以下のベストプラクティスを検討します。
定期的なコミュニケーション
定期的なミーティングやスタンダップミーティングを実施し、障害、進捗、問題、潜在的な解決策についての情報共有を促進します。Slack、Jira、Confluenceなどのコラボレーションツールを活用してコミュニケーションを合理化し、チームコラボレーションのためのオープンチャネルを維持します。
例: チームはSlackを利用して日々の更新や迅速な問題解決のためのディスカッションを行います。より大きなテスト戦略やテストの進捗状況については、全体的なZoomミーティングで議論し、詳細レベルと戦略レベルの両方で効果的なコミュニケーションを確保します。
機能横断型のチーム
E2Eテストプロセスの堅牢性を高めるために、開発者、テスター、ビジネスアナリスト、その他のプロジェクト利害関係者など、多様な職種が参加する機能横断的なチームの結成を検討します。チームメンバーはそれぞれ独自の視点をもたらし、より包括的なテストアプローチに貢献します。
例: プロジェクトチームは、開発者、QAエンジニア、UXデザイナー、プロダクトマネージャーで構成されます。この機能横断型チームは、各メンバーがそれぞれの専門性を活かしながら、スプリント単位でコラボレーションを行います。この協働的なアプローチにより、テストのカバー範囲が広がり、テスト段階で潜在的な問題の迅速な特定が容易になります。
文書化と知識の共有
E2Eテストの有効性を確保するには、テスト計画、テストケース、および結果を網羅した包括的な文書が重要です。この文書を効率的に管理するには、市販のツールを活用します。さらに、チーム内で定期的にナレッジ共有セッションを実施し、テクノロジーの進歩や新興のテクノロジーについて全員に情報を提供します。
例: チームはテスト管理プラットフォームを採用し、テスト計画、E2Eテストのスクリプト、テスト結果を文書化し、チームメンバー全員がアクセスできるようにしています。定期的に開催されるワークショップでは、新しいテストツールや方法論について議論し、知識を共有することで、協働的な学習環境を育んでいます。
E2Eプロセスへのステークホルダーの関与
E2Eテストをより洗練されたものにするために、ステークホルダーやエンドユーザーを積極的にテストプロセスに参加させます。テストのさまざまな段階でフィードバックを求めることは、理解を深め、より効果的なE2Eテスト戦略に貢献します。
ステークホルダーはテストプロセスにおいて極めて重要な役割を果たします。ステークホルダーはテストシナリオを定義するための初期計画会議に参加します。さらに、大きなマイルストーンの後にもフィードバックを求めます。このような関与により、テストがユーザーの期待や包括的なビジネス目標に密接に沿うようになります。
レビューおよびレトロスペクティブ
リリース後にレトロスペクティブを実施し、E2Eテストプロセスにおける成果と課題を評価・特定し、継続的な改善を促進します。
例: 各リリース後、チームはE2Eテストのパフォーマンスを評価するためにレトロスペクティブを実施します。これには、成功した側面やテスト中に遭遇した課題についての議論も含まれます。MiroやTrelloのような共同作業ツールを導入すると、このようなレトロスペクティブセッションが容易になり、効果的なコミュニケーションと継続的な改善のための洞察の文書化が促進されます。
フィードバックループの構築
フィードバックループを実装し、テスト結果や問題点をすぐに開発チームに伝え、迅速な対応を促します。
例: 継続的インテグレーション/継続的デプロイメント(CI/CD)のためにJenkinsを活用し、自動化テストのフィードバックを開発パイプラインに組み込みます。テストが失敗した場合、ただちに開発チームに通知が送信され、問題の迅速な特定と解決が可能になります。
テストケースの保守
テストケースを定期的にレビューし、ソフトウェアアプリケーションの変更に合わせて更新することで、テストスイートの妥当性を確保します。必要に応じて、冗長なテストケースや妥当ではないテストケースを特定し、削除します。
例: QAチームはテストスイートの定期的なレビューを実施し、古くなったテストを削除し、最近の機能追加に基づいて新しいテストを組み込んでいます。このプラクティスにより、テストスイートの継続的な発展が確実になり、最新かつアプリケーションの状態を反映したテストスイートが維持されます。
必要に応じたアップスキル
常に進化し続ける業界に対応するには、技術職を対象とした継続的なアップスキリングが不可欠です。必要に応じてチームのためにトレーニングセッションを開催し、常に最新の技術や知識に対応できるようにします。
例: 組織は高度な手動および自動テストツールやテクニックをテーマとする品質保証チーム向けのトレーニングセッションの費用を負担します。これらのセッションは、チームの継続的な能力開発に貢献し、この分野における最新の進歩に対応できるスキルを維持します。
E2Eテストに適したツールの選び方
次にE2Eテストのためのツールを選択する際に考慮すべき最も重要な7つのステップを紹介します。
| ステップ | なぜ重要なのか | 実践方法 |
|---|---|---|
| 1.テストの目標を定義する | 明確な目標はツール選択の指針となり、プロジェクトの目標や求められる成果との整合性を確保します。 | ・ツールは、プロジェクト固有の要件に合致したものでなければならず、与えられた状況においてテストの有効性を保証するものでなければなりません。 |
| 2.プロジェクト要件を評価する | ツールは、プロジェクト固有の要件に合致したものでなければならず、与えられた状況においてテストの有効性を保証するものでなければなりません。 | ・プロジェクトマネージャー、開発者、関係するチームメンバーとコラボレーションします。 ・テストツールが対応する必要がある技術スタック、ソフトウェア/ウェブアプリケーションアーキテクチャ、特定のテストシナリオを特定します。 |
| 3.テスト環境を検討する | 複数のプラットフォームにわたってシームレスに統合し、効果的にテストを実施するには、テスト環境との互換性が重要です。 | ・テスト環境の構成(ブラウザ、デバイス、OS)を文書化します。 ・特定された環境とツールの互換性を確認します。 |
| 4.自動化フレームワークのサポート | 自動化フレームワークとの連携により、一貫性と標準化を確保し、効率的なテストスクリプト開発を促進します。 | ・使用されている既存の自動化フレームワークを評価します。 ・それらのフレームワークをサポートするツール、またはSelenium、Cypress、Appiumなどの広く採用されているツールを選択します。 |
| 5.統合機能 | 統合機能は、テストプロセスの合理化を促進し、ツールが既存の開発エコシステム内でシームレスに動作することを可能にします。 | ・ドキュメントやベンダーへの問い合わせを通じて統合機能を調査します。 ・CI/CDパイプライン、課題トラッキングシステム、および他のツールとのシームレスな統合を確実にします。 |
| 6.コスト面の考慮 | コストを管理することで、選択したツールが予算の制約に沿うようになり、長期にわたるテストプロセスの持続可能性に貢献します。 | ・ライセンス、保守、およびトレーニング費用を含む包括的なコスト分析をまとめます。 ・予算の制約や長期的な財政目標とコストを照らし合わせます。 |
| 7.使いやすさ | 学習曲線が緩やかでユーザーフレンドリーなツールを選択します。これは、チームメンバーの技術的専門知識のレベルにばらつきがある場合に重要です。 | ・試用期間中にユーザビリティテストセッションを実施したり、ユーザーからのフィードバックを求めたりします。 ・例: testRigorは生成AIを使用し、Web、モバイル、API、およびデスクトップ アプリケーションのエンドツーエンドのテストを迅速かつ簡単に、簡単な英語で実行できます。 |
選定プロセスでは、最終候補に残ったツールのトライアルを実施し、チームメンバーからのフィードバックを収集し、コミュニティサポートやドキュメントなどの要素を考慮します。これにより、テストの効率と長期的な持続可能性が保証されます。
今すぐTestRailを無料体験して、TestRailのコア機能を活用してソフトウェアテストプロセスを効率的かつ効果的に管理する方法をご覧ください。
(この記事は、開発元Gurock社の Blog 「How to Improve End-to-End Testing」2024年3月19日の翻訳記事です。)
関連する製品
テスト管理ツール TestRail
テストケースの管理やテスト結果の記録、チームでの情報共有など、Excelを使ったテスト管理の業務に限界を感じていませんか?TestRailはシンプルで使いやすいUIを提供し、テストにかかるさまざまな管理コストの削減に貢献します。
■ TestRailの特長 ■
- テストにさまざまな情報を関連づけて一元管理
- Webブラウザー上でテストケースを簡単に入力や編集可能
- テスト実施の準備と結果の共有が容易
- 進捗や比較などのレポートを提供
- 要件 / 課題管理ツールやテスト自動化ツールと連携
日本国内では、テスト管理にExcelを使っていたお客さまからの乗り換えが多く、Web上で完結するテスト管理を実現されています。
TestRail でテスト管理のお悩みを解決しませんか?