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

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

はじめに

本記事では、DevOpsにおけるAPI連携するシステムに対してのテスト自動化戦略にフォーカスした内容となっています。一般的にDevOpsでは、Azure DevOpsやAWS CodePipelineといったCI/CDサービスを活用して、コードのコミット後からリリースまでのさまざまなプロセスが自動化されます。このとき、テストに掛かる工数を削減するために、テストの実行を自動化するアプローチを採用することも多いですが、適切なテスト手法を選択しなければ思わぬ落とし穴に引っ掛かる場合もあります。

そこで、DevOpsにおけるテスト時に起こり得る課題についてご紹介しつつ、APIテスト自動化/サービス仮想化ツール「SOAtest/Virtualize」を用いたソリューションについてお届けします。

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

以前の記事では、DevOpsにおけるCI/CDパイプライン上で継続的にテストを実施するメリットについてご紹介していますので、気になる方はDevOpsにおけるCI/CDパイプライン上でのテスト自動化戦略 Vol.1もご確認ください。

DevOpsにおいてAPI連携するシステムに必要なテストとは?

DevOpsにおける開発でAPI連携を伴うシステムの品質を十分に確保するためには、Azure DevOpsやAWS CodePipelineなどのCIサービスを活用してテストを自動化することがポイントです。CI環境では、コードをコミットするごとにテストが自動で実行されますので、継続的にテストを実施してフィードバックを得ることができます。特にDevOpsでは、短期の開発サイクルを何度も繰り返して実施する開発方式が採用されるケースが多いため、それだけテストの頻度が多くなると予想されます。このとき、回帰テストの資産を一度作成しておくと今後も繰り返し利用できますので、工数を抑えつつ継続的にテストを実施することが可能となります。

API連携を伴うシステムでは、UIアプリケーションが属するフロントエンドや、UIを持たずサーバーとして処理を行うバックエンド等がAPIでデータ連携しています。また、バックエンドが別のシステムや外部の他社サービスと連携している場合もあります。このとき、各々のシステムがAPIを介してデータ連携することでシステムは適切に動作することができます。

一方で、DevOpsにおける開発のテストフェーズでは、システム間でのAPI連携が必要となるが故に生じる課題もあります。一般的にAPI連携を伴うシステムの開発は、フロントエンド側とバックエンド側で開発チームが異なっている並行開発という方式が多く採用されます。そのため、各々のチームの担当システムをテストするだけでもシステム間でのデータ連携が必須となり、連携するシステムが利用できない場合にはテストの進捗に影響することもあります。そのため、連携するシステムが利用可能かどうかという点もテスト時には注目する必要があると言えます。

次項では、フロントエンド・バックエンドの各々をテストする際に起こり得る課題について詳しくご紹介します。

フロントエンドのテスト時の課題

フロントエンドのテストでは、アプリケーションのUIテストが主なテスト観点となります。一般的には、フロントエンドのテスト工数を減らすためにUIテストの自動化ツールを導入するというソリューションがよく採用されます。UIテストを自動化することで、特に繰り返し実施する必要があるUIの回帰テストを効率化することができます。
一方で、APIで連携するシステムはそもそもバックエンドのシステムが利用できなければ正常には動作しませんので、フロントエンドのテストを実施するためにはバックエンドのAPIが利用できる状態である必要があります。そのため、UIテストの自動化ツールを導入したとしても、バックエンドのAPIが利用できないためにテストが思うように実施できないという状況が起こり得ます。

バックエンドの影響で起こり得るフロントエンドのテストに関する課題は下記の通りです。
  • バックエンドの開発が遅延していてAPIとの結合テストができない
  • バックエンドを開発している他チームとのスケジュール調整が必要となりテストを自由にできない
  • 連携している外部のAPIを利用できる期間が限られており、テストのタイミングが限定される

そのため、フロントエンドのをテストする場合には、バックエンド側にも目を向け、適切なテストソリューションを選択する必要があります。

バックエンドのテスト時の課題

バックエンドのテストにおいては、連携するフロントエンドとの結合テストを実施する前に、APIを直接テストして品質を確保することが求められます。このとき、サブシステムや他社のサービスなどのテスト対象のAPIと連携するシステムが利用できない場合には、バックエンドのAPIテストも実施できず待たされるという状況が起こり得ます。また、他社のサービスを利用するためだけにスケジュールの調整が必要であったりサービスの利用可能な時間帯が限られていたりと、テストが可能なタイミングが限定されるというケースも考えられます。
また、APIテストが可能な状態であっても、APIテスト手法に課題がある場合もあります。例えば、限られたデータパターンでしかテストを実施していない場合や、複数のAPIを想定した順番で呼び出すシナリオテストのパターンが不足しているというケースです。また、APIテストは実施していてもレスポンス電文の検証は目視で行っているために、テストが自動化されていないという例もあります。

このように、バックエンドのAPIをテストする際に起こり得る課題をまとめると下記の通りです。
  • 連携しているAPIに依存しており、自由なタイミングでAPIテストができない
  • さまざまなデータパターンでのテストや、複数のAPIを順番に呼び出すシナリオテストができていない
  • APIテストは行っているが、テストの実行から検証までを含めての自動化はできていない

そのため、バックエンドのAPIテストを自由に実施できる環境を用意しつつ、十分なテストパターンでAPIテストの自動化が可能なソリューションを採用することが求められます。

テスト進捗の遅れが許されないスケジュール

DevOpsでは、Azure DevOpsやAWS CodePipelineなどのサービスを用いて構築したCI/CDパイプライン上のプロセスで継続的にテストを実施します。このとき、フロントエンド側とバックエンド側の開発者は各々の担当システムをに日々テストしますが、プロジェクトの特定のマイルストーン毎にAPI連携を伴うシステム間の結合テストを実施することが一般的です。例えば、下図のスケジュールでは、各マイルストーンでシステム間で連携したテストを行う予定がありますので、前もって十分なテストを行い品質を確保することが求められます。
一方で、ソフトウェアの品質が低いままシステム連携を伴うテストを行った場合、問題が起こった際に原因を特定するための手戻り作業が発生しやすくなります。結果としてテストの進捗が遅れ、さらにプロジェクト全体の遅延にも繋がり得ますので、このような状態に陥らないためにも適したテスト戦略が必要となります。

まとめ

本記事では、DevOpsにおいてAPI連携するシステムをテストする際の課題についてご紹介しました。次の記事では、これらの課題に対するソリューションについてご紹介します。
APIテストまるわかりガイドダウンロード

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

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

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

    03-4405-7853

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

お問い合わせ

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