DevOpsにおけるCI/CDパイプライン上でのテスト自動化戦略 Vol.1

Azure DevOpsやAWS CodePipelineを利用したCI/CDパイプライン上でテストを自動化する場合のベストプラクティスをご紹介する記事です。

はじめに

本記事では、DevOpsにおけるテスト自動化戦略にフォーカスした内容となっています。一般的に、DevOpsではCI/CDツールを活用して、コードのコミット後からリリースまでの様々なプロセスが自動化されます。このとき、テストに掛かる工数を削減するために、テストの実行を自動化するアプローチを採用することも多いですが、適切なテスト手法を選択しなければ思わぬ落とし穴に引っ掛かる場合もあります。
そこで、DevOpsにおけるテスト時に起こり得る課題についてご紹介しつつ、APIテスト自動化/サービス仮想化ツール「SOAtest/Virtualize」を用いたソリューションについてお届けします。

次のような方におすすめです。
  • DevOpsにおけるテスト手法をお探しの方
  • 現状のDevOpsにおけるテスト手法に課題を感じている方
  • 今後、DevOpsでのテスト自動化を検討している方

DevOpsとは?

DevOpsとは、システムの開発側(Development)と運用側(Operation)で連携しながら、変化に対して素早く・柔軟にシステムを対応していくための活動を意味します。
先の予想が難しく変化の速い現代において、ビジネス上の要求にシステムを素早く対応させることが可能となります。

以前のシステム運用は、一度開発したシステムをそのまま長期的に運用していくスタイルが一般的でしたが、昨今ではビジネスやテクノロジーの変化の流れが速く、システムもそれに追随して対応することが求められます。変化に対応できないシステムは技術的な負債として次第に積み重なり、ビジネスを遂行する上でのコストになり得ます。
そこで昨今では、システムの開発期間を短くし、リリース後も機能追加や新しいテクノロジーへの対応など、継続的に変化しながら価値を付与していく考え方が浸透しつつあります。システムの開発期間が短い場合、リリース後にバグが発見された場合でも修正から再リリースまで素早く実施することも可能となります。一方で、短期の開発サイクルを何度も回すことになりますので、自ずとシステムの開発側と運用側との連携が重要になります。この連携が上手く取れないことで、開発側がコードをコミットしたとしても運用側が素早くテストし実環境で稼働させられなければ、この連携部分がボトルネックとなり素早いリリースができないという事態に陥りかねません。

そこで、継続的にシステムに価値をもたらすために、システムの開発側と運用側とでのスムーズな連携を目指す、「DevOps」という考えが広まりつつあります。DevOpsはアジャイル開発等で広く取り入れられた考え方であり、昨今の変化の速いビジネス要求への対応が必要な場合に適しています。一方で、DevOpsというのはあくまでも概念ですので、開発側と運用側でのスムーズな連携を実現するための具体的な方法として、「チーム間でどのようにコミュニケーションを取るべきか」、「どのようなテクノロジーを採用するか」といった様々な観点について方針を立てていく必要があります。
そこで、まずはDevOpsで考慮すべき観点の1つであるCI/CDパイプラインにフォーカスし、Azure DevOpsやAWS CodePipelineのようなサービスと関連させた実施例を紹介します。

DevOpsにおけるCI/CDパイプライン

DevOpsにおけるCI/CDパイプラインとは、CI(継続的インテグレーション)とCD(継続デリバリー)によって開発サイクルの各プロセスを自動化することを意味します。従来はシステムの開発者が手動でテストや本番環境へのリリース等の作業を行うのが一般的でしたが、人の手が介在することがそもそも非効率であったり人為的なミスが生じたりといった課題も起こり得ました。そこで、コードのコミット後の作業をすべて自動化することで、属人性を解消し効率的にテストやリリースまでの工程を進めることが可能となります。特に、スピードが求められる昨今の開発においては、自動化が可能な工程はすべて自動化することで、開発者はコーディングに注力することができます。このCI/CDパイプラインを構築するために、Azure DevOps、AWS CodePipeline、Jenkinsといったサービスやツールがよく利用されます。
一般的に、CIおよびCDは下記の工程を表します。
CI:コードのコミット後のビルドからテストまでの工程
CD:リリース後に本番環境へデプロイし運用するまでの工程

一方で、DevOpsに限らず開発のスピードを高めたとしても、同時にソフトウェアの品質が伴っていなければ適切な手法であるとは言えません。後の工程で見つかる不具合ほど影響範囲が広く、手戻りの修正コストはより大きく掛かってきます。さらに、リリース後に不具合が発見された場合には、不具合の修正のためだけに次の開発サイクルを実施するという事態にも繋がりかねません。そのため、ソフトウェアにおける不具合を早期の段階から把握できるように、十分なテストを継続的に実施していくための手法を採用する必要があります。
すなわち、CI環境においてテストを自動化する際に、どのような手法を採用するかという点が重要となります。
そこで本記事では、Azure DevOpsやAWS CodePipeline等で構築したCI環境におけるテストにフォーカスし、テストを自動化する上での課題やそのソリューションについて紹介します。

CI環境におけるテストの自動化

DevOpsにおける開発でソフトウェアの品質を十分に確保するためには、Azure DevOpsやAWS CodePipelineなどのCIサービスを活用してテストを自動化することがポイントです。CI環境では、コードをコミットするごとにテストを自動で実行する仕組みを構築できますので、継続的にテストを実施してフィードバックを得ることができます。誰しもテストには工数を掛けたくないと思うものですので、テスト自動化の仕組みを作成しておくことで本来取り組むべき開発業務に注力することができます。

また、DevOpsでは、スクラム開発のような短期のスプリントを繰り返して、継続的にシステムをリリースする方式がよく採用されます。このとき、スプリントを重ねるごとに機能は追加されていきますので、自ずとテストすべき対象は増え、それと共にテストに掛かる工数も増えていきます。
この場合、テストの自動化が工数の削減に非常に有効となります。特に、回帰テストの資産を一度作成しておくと今後も繰り返し利用できますので、新規機能は手動でテストするとしても、テストの工数を抑えることに繋がります。結果的に、大きな工数を掛けることなくテストを継続的に実施でき、ソフトウェアの品質を確保することが可能となります。

まとめ

本記事では、DevOpsにおけるCI/CDパイプライン上で、継続的にテストを実施するメリットについてご紹介しました。次の記事では、テスト自動化を行う上で陥りやすい課題についてご紹介します。

APIテストまるわかりガイドダウンロード

APIのテスト自動化とサービス仮想化を1ツールで SOAtest/Virtualizeに
関するお問い合わせ

  • テクマトリックス株式会社
    東京本社

    ソフトウェアエンジニアリング事業部

    03-4405-7853

メールでのお問い合わせ
parasoft-info@techmatrix.co.jp

お問い合わせ

製品についてやテクマトリックスについてなど、
こちらよりお気軽にお問い合わせいただけます。