CI/CDパイプラインへの自動化テストの統合

私たちはアジャイルな世界に生きています。アジャイルな世界では、拡大する顧客ニーズに基づいて段階的に機能が開発されリリースされます。新機能の開発でアプリケーション コードがチェックインされたときに不具合をすぐに発見するために、開発・リリース プロセスの重要な要素となっているのが自動化テストです。自動化テストは、単体テスト、API テスト、UI レベル テストから構成されることがあり、リリースサイクルが速い環境では必須となっているCI/CDパイプラインの一部として、自動的に実行されます。

自動化テストの重要性はほとんどの組織が認識しており、自動化テストを作成できる優秀なエンジニアを採用するためにかなりの時間と労力を費やしています。しかし、自動化テストを首尾よく作成できたとしても、既存の CI/CD パイプラインにどのように統合するかを考えなければなりません 。「どのようなテストを実行するのか」「いつ実行するのか」「開発した機能について即座にフィードバックを得るためにテストをどのように構成するのか」を判断する 必要があります。

これらプロセスを支援するひとつの方法は、テストを分類し、開発プロセスのさまざまなフェーズで定期的に実行することです。下図は、これらのプロセスについてテスターの理解を深めるために、アジャイル プロセスのさまざまなフェーズに自動化がどのように適合するかを示したものです。

CI/CD パイプラインで実行される自動化テストには、一般的に 3 つのタイプがあります。

スモーク テスト

スモーク テストは、システムの重要な機能が期待通りに動作していることを確認するために、すべてのコード チェックインで実行されます。スモーク テストは、UIテスト、APIテスト、単体テストといった複数のテストから構成されます。スモーク テストの目的はシステムについて迅速なフィードバックを得ることであり、その実行は通常、5分から10分以内に終了します 。

日々の回帰テスト

回帰テストは、システムに追加された新機能が既存の機能を壊さないことを確認します。システムのエンドツーエンドのフローをカバーするという点で、スモーク テストよりも詳細なテストです。通常、少なくとも、1日に1回は実行し、リリース前には複数回実行します。

スプリント レベルのテスト

スプリントの一部として作成される新しい自動化テストです。スプリント中に完了した新しいテストは、日々の回帰テストに追加されます。通常、テストは回帰テストのフェーズで回帰テスト スイートにマージされます。

回帰テストのフェーズでは、上記のすべての自動化テストが手動テストと並行して実行されます。受け入れテストのフェーズでは、高レベルの受け入れテスト計画があります。受け入れテストは、新機能をメイン コード ブランチにマージした後に、システムの重要な機能がマージの影響を受けることなく正常に 動作しているかを確認するために実行されます。また、スモーク テストと回帰テストも並行して再び実行されます。

このプロセス全体にわたって、プロジェクトのタイムライン、および自動化に関連して利用できるリソースに応じて、手動のスクリプト テスト、探索的テスト、リスク ベースド テストを継続して行います。

自動化テストを作成することは、自動化のひとつの側面に過ぎません。自動化テストの作成に費やした時間と労力に対して、最大のカバレッジと迅速なフィードバックを得るという観点から、より広い視点での考察が必要になります。

シームレスな CI/CD パイプラインの実装によって従来よりも 迅速なリリースを実現しようとするとき、上記で説明したすべての方法がさらに重要になります。

チームの規模とアプリケーションの複雑さは様々であり、組織の規模も巨大企業から新興企業まで様々です 。しかしいずれにしても、プロセスは同じであることに変わりありません。チームは共同作業を行う必要があり、CI/CD パイプラインの一部として自動化テストを編成して実行するための一連の流れを把握する必要があります。

テストの自動化には、単にコードを記述するだけではなく、もっと多彩な側面があります。あなたのコンテキストに基づいて、これらの原則を適用してください。

作者について:

Raj Subrameyerは、国際的な基調講演者、ライター、およびキャリアコーチであり、技術的なバックグラウンドを豊富に持っています。 彼のBlog(rajsubra.com/blog/)では、読者の生活に役立ち、インスピレーションを与えるニュース、リソースを投稿しています。

(この記事は、開発元 Ranorex 社 Blog 「Integrating Automated Tests into Your CI/CD Pipeline」2020年3月12日の翻訳記事です。)