アジャイルプロジェクトのテスト自動化戦略

このテスト自動化戦略の例は、複数のアジャイルチームによる継続的デリバリーモデルを想定しています。

以前の記事では、包括的な アジャイルテスト戦略 ドキュメントだけでなく アジャイルプロジェクトのためにQA機能を​​最初から設定する方法 また、自動テストが初期設定の重要な項目の1つである方法。

このテスト自動化戦略の例では、テスト自動化の取り組みを最大限に活用するために考慮すべき重要なポイントをリストします。




エグゼクティブサマリー

自動テストは、アジャイル開発手法の中核となる活動です。継続的デプロイに移行するにつれて、アプリケーションの状態について開発チームに迅速なフィードバック応答が提供されるため、テストの自動化はますます重要になります。

この迅速なフィードバックを得るには、自動テストを継続的に実行する必要があり、高速で、テスト結果の一貫性と信頼性が必要です。


これらを達成するために、検証の大部分は新機能の開発の一部として行われるべきです。言い換えれば、開発とテストは一貫した活動である必要があり、開発中のものが機能し、既存の機能が損なわれていないことを確認することにより、品質を最初から「焼き付ける」必要があります。

これには、実行に時間がかかるGUIテストを低レベルにプッシュすることにより、「テスト自動化ピラミッドを反転」する必要があります。ビルドの一部として単体テストの直後に実行できるAPIレイヤーで、初期レベルの信頼性を提供します。

関連:



テスト自動化戦略の概要

検出ではなく防止–そもそもアプリケーションに欠陥が導入されるのを防ぐためにあらゆる努力を払う必要がありますが、そのための手法と方法はこの投稿の範囲外です。ここでは、バグがシステムに導入されたときにバグを迅速に検出し、開発にフィードバックできるように、方法論を定義しています。


量より質を優先する必要があります。ほとんどの場合、不安定な複数の機能ではなく、堅固な1つの機能でリリースすることをお勧めします。最小リリース基準として、新しく開発された機能によってリグレッションの欠陥が発生することはありませんでした。

すでに述べたように、アプリケーションの状態に関する迅速なフィードバックは継続的デリバリーをサポートするために非常に重要であるため、フィードバックを迅速に取得できるプロセスとメカニズムが策定されます。

迅速なフィードバックを得る1つの方法は、単体テスト、統合テスト、APIテストの数を増やすことです。これらの低レベルのテストは、コードが意図したとおりに機能していることを確認するためのセーフティネットを提供し、テストの他のレイヤーで欠陥が漏れるのを防ぐのに役立ちます。

ユニットテストは、より高いレベルでのテスト自動化の基盤を形成します。


改善の2番目の要素は、回帰テストをより頻繁に実行し、継続的インテグレーションのプロセスと整合させることです。後述を参照してください。自動化テストは、孤立したタスクとしてではなく、SDLCに組み込まれた一貫したアクティビティとして見なされるべきです。



回帰パックの定義

自動回帰テストは、テスト自動化戦略の中核です。

煙回帰パック

リグレッションパックは、アプリケーションをロードしてアクセスできるかどうかの健全性チェックとして機能します。また、アプリケーションが引き続き機能していることを確認するために、いくつかの重要なシナリオも実行する必要があります。

スモークテストパックの目的は、アプリケーションが読み込まれない、一般的なユーザーフローを実行できないなど、最も明白な問題を検出することです。このため、スモークテストは長くは続かないはずです 5分 何かメジャーが機能していない場合に迅速なフィードバックを提供します。


スモークテストパックはすべてのデプロイで実行され、APIテストやGUIテストを組み合わせて使用​​できます。

機能的回帰パック 、これは、スモークテストよりも詳細にアプリケーションの機能をチェックすることを目的としています。

さまざまな目的のために、複数の回帰パックが存在する必要があります。アプリケーションのさまざまなセクションで複数のチームが作業している場合、理想的には、チームが作業している領域に焦点を当てることができるさまざまな回帰パックが必要です。

これらのパックは、機能の動作が環境全体で一貫している限り、必要に応じて任意の環境で実行できる必要があります。それらは1日に複数回実行され、15〜30分を超えないようにする必要があります。


これらの機能テストはより詳細であるため、実行に時間がかかります。したがって、機能テストの大部分をAPIレイヤーに配置して、テストをより高速に実行できるようにすることが重要です。 15〜30分 制限時間。

エンドツーエンドの回帰パック、 アプリケーション全体をテストします。これらのテストの目的は、さまざまなデータベースやサードパーティアプリケーションに接続するアプリケーションのさまざまな部分が正しく機能することを確認することです。

エンドツーエンドテストは、機能回帰パックですでにテストされているため、すべての機能をテストすることを意図したものではありませんが、これらのテストは「軽量」であり、ある状態から別の状態への遷移をチェックするだけです。最も重要なシナリオまたはユーザージャーニーの。

これらのテストは、ユーザーがシステムをどのように使用するかをチェックするため、主にGUIを介して実行されます。これらの実行にかかる時間はアプリケーションごとに異なりますが、通常は1日1回または夜間に実行されます。



複数のアジャイルチームのテスト自動化戦略

test_automation_strategy_agile

自動化されたユニットテスト

テスト自動化はユニットレベルで始まります。ユニットテストは、開発された新機能について開発者が作成する必要があります。これらの単体テストは、システムGUIテストに至るまでのより大規模な自動化プラクティスの基盤を形成します。

開発されるすべての新機能について、コードが意図したとおりに機能し、要件を満たしていることを証明するために、一貫性のある堅実な単体テストのセットが作成されていることを確認するのは開発者の責任です。

単体テストは、実行が非常に速く、保守と変更が簡単で(依存関係がないため)、コードにエラーがあるとすぐに開発者にフィードバックされるため、チームに最大のROIを提供します。

単体テストは、開発者のマシンとCI環境で実行されます。

自動統合/ APIまたはサービステスト

単体テストはクラス内の機能のテストに基づいていますが、統合テストはユニットテストの次のレベルを形成し、コンポーネントを集合的に構成して機能の一部を提供するクラスをテストします。これらのテストは、単体テストが実行されて合格した場合にのみ実行されます。

サービステストは、GUI Webインターフェイスの介入なしに、APIレイヤーで自然に実行されます。したがって、テストは純粋な形式で機能を検証できます。テストはコンポーネントと直接通信するため、実行が速く、ビルドの一部になります。

必要に応じて、 ワイヤーモック 他の3つの依存関係を除外するために使用されますrdパーティシステム、およびテストに必要なデータを提供するためのダウンストリームシステムが利用できない場合。

統合テストやサービステストは、開発者のマシンでも実行してビルドの一部にすることができますが、時間がかかり始める場合は、CI環境で実行するのが最適です。

SoapUIなどのツールをサービステストに使用できます。

アプリケーションテスト

一般的なeコマースアプリケーションは、さまざまな機能を提供するさまざまなアプリケーションまたは「アプリ」に分割できます。 「アプリテスト」の概念は、アプリの機能をテストするテストのグループがまとめられ、目的のアプリに対して実行されることです。このパックは、チームが個々のアプリをリリースしたい場合や、アプリが正しく機能しているかどうかを知りたい場合に役立ちます。

アプリケーションテストでは通常、さまざまなコンポーネントと対話するためのインターフェイスが必要です。したがって、これらのテストはGUIのブラウザを介して実行されることが予想されます。

アプリテストの目的は、アプリケーションの機能が機能的に正しいことを確認することです。テストは特定のアプリの状態に自信を持たせるように編成されているため、これらのテストは特定のアプリを「ダウン」して実行するため、通常は垂直テストと呼ばれます。テストは非常に徹底的で、カバレッジは広いです。

Selenium WebDriver ブラウザに対してこれらの自動テストを実行するために使用できます。このツールはブラウザ自動化テストで最も人気があり、複雑な検証を可能にする豊富なAPIを提供します。

エンドツーエンドのシナリオテスト

システムに対して実行されるGUI自動テストは、一般的なユーザーフロー、ジャーニー、またはエンドツーエンドのシナリオとして機能します。このタイプのテスト(以下で説明)の問題により、これらは最小限に抑えられます。エンドツーエンドのシナリオは、夜間の回帰パックに含まれています。



テスト自動化ピラミッドの反転

テスト自動化戦略の一環として、GUIレイヤーで実行される自動テストの数を最小限に抑える必要があります。

GUIを介して自動テストを実行すると、ユーザーのアプリケーションとのやり取りをシミュレートするという点で優れた意味のあるテストが提供されますが、以下に示すように多くの問題が発生する傾向があります。

もろい

テストは、対話するWeb要素を識別するためにHTMLロケーターに依存しているため、IDが変更されるとすぐにテストは失敗します。したがって、テストには多くの保守コストがかかります。

限定テスト

GUIには、検証を可能にするためにWeb応答からのすべての詳細が含まれていない可能性があるため、GUIは機能を完全に検証するテスターの機能を制限する可能性があります。

スロー

テストはGUIを介して実行されるため、ページの読み込み時間は全体的なテスト時間を大幅に増加させる可能性があり、そのため開発者へのフィードバックは比較的遅くなります。

最小のROI

上記の問題のため、GUI自動テストは最小のROIを提供します。

ブラウザ自動化テストは最小限に抑えられ、一般的なユーザーフローと、システム全体が実行されるエンドツーエンドのシナリオを組み込んだユーザーの行動をシミュレートするために使用されます。