アジャイル開発のテスト戦略

アジャイル開発におけるテストのポイントやテスト戦略についてご紹介する記事です。

はじめに

ビジネスの変化が激しい昨今、市場のニーズや顧客の要望に素早く対応するためには、柔軟に対応できる開発体制であることが求められます。この背景に加えて、DX(デジタルトランスフォーメーション)推進も追い風となり、「アジャイル開発」に対する注目が集まっています。多くの企業がアジャイル開発手法を取り入れ、実施している中で、様々な課題も出てきているのではないでしょうか。

ここでは、アジャイル開発のステップの中でも「テスト」に焦点を当てて、テストで躓く課題や解決策など、アジャイル開発におけるテストのポイントについてご紹介します。

次のような方におすすめです。
  • アジャイル開発に関わっていて、リリース速度を加速させるテスト手法をお探しの方
  • アジャイル開発で、新しい機能を開発するごとにやるべきテストが増加してテストをやりきれなくなっている方
  • アジャイル開発で、バグが大量に発生し、テスト工数の増加や進捗に遅延が出ることを懸念している方

アジャイル開発とは?

「アジャイル開発」とは、システムやソフトウェアの開発手法の一つで、機能単位の小さなサイクルで、「計画→設計→開発→テスト」の工程を繰り返しながら開発を行います。特に、一つのサイクルが短く、その分ソフトウェアのリリース頻度が高いことが特長です。この1つのサイクルを、一般的にはスプリントと呼びます。
優先度の高い機能からスプリントを設置し、機能単位で順番に開発を進め、それらを1つのシステム、ソフトウェアとしてまとめます。

アジャイル開発では、要件が変化することを前提としているため、仕様変更に柔軟に対応でき、不具合が発生しても素早く修正可能といったメリットがあります。

アジャイル開発におけるテスト

アジャイル開発におけるテストの特長にはどういったものがあるのでしょうか。ここでは、テストの特長をいくつかご紹介します。

早い段階でテストができる

アジャイル開発では、一つのスプリントごとに「計画→設計→開発→テスト」の工程が設定されているため、決められた機能の開発が完了したら、テストをすぐに実施できます。ウォーターフォール開発の場合、すべての機能の開発が完了した後にテストフェーズに入るため、アジャイル開発は、ウォーターフォール開発に比べて、早い段階から機能のテストが実施できるといった特長があります。

不具合が見つかった際には、すぐに修正できる

アジャイル開発では、スプリントごとにテストを実施するため、早い段階で不具合を検知し、修正できるといった特長があります。開発した機能ごとに早い段階でテストを行なうため、もし不具合が見つかったとしても、少ない工数で修正を行うことができます。

アジャイル開発におけるテストの課題

実際にアジャイル開発においてテストを進めると、どのような課題が発生するのでしょうか。
ここでは、3つの課題をご紹介します。

スプリントを重ねるごとにテスト工数が増えることでリリースに影響を与えることがある

最初のスプリントでは、計画通りにテストを実施できていたとしても、スプリントを重ねるごとに対象アプリの機能が増え、それにあわせてテストの範囲も広がり、テスト工数が増加していきます。設計や開発が順調に進んでいても、テストのフェーズで予定よりも工数がかかってしまうと、リリースやそれに伴うスケジュールに影響を与える可能性があります。

テストのフェーズでは、新しく開発した機能のテストに加え、既存機能の回帰テストも必要になるため、限られた時間の中で、効率的にテストを実施することが求められます。既存機能の回帰テストを効率化し、新しい機能の開発とテストに集中して工数を使える状態にすることが特に重要なポイントになります。

ウォーターフォール開発に比べてトータルのテスト工数が増えることがある

アジャイル開発はウォーターフォール開発に比べて「テスト頻度が増える」といった特長があります。コードをコミットするごとにテストを行うような場合、手動(打鍵)でテストを実行して、結果を目視で確認するようなテストをしていると、テスト頻度の増加がそのままテスト工数の増加に直結してしまいます。アジャイル開発では各スプリントごとにテストフェーズが存在することは分かっているので、テストの頻度が増えても効率的にテストを実施できるテスト手法を採用することが求められます。

チーム間で連携して行う結合テストが進捗に影響を及ぼすことがある

昨今はAPI連携を伴うシステムが増加していることから、一つのシステムを開発する際にフロントエンド(UI)とバックエンド(API)で開発チームを分けて開発やテストを進めることが多くあります。また、マイクロサービスアーキテクチャを採用した開発では、より小さい単位の機能ごとにチームを分けて開発・テストを行うことがあります。その場合、機能を組み合わせる時に不具合が見つかるケースが増加するため、他のチームや他社システムと組み合わせた結合テストの重要性が高まります。

その一方で、各機能を十分にテストしないまま結合テストを実施すると、バグを検出した際にどこに問題があるのか、切り分け調査から修正、そしてチーム間のスケジュールを再調整した上で再テストすることになるため、多くのテスト工数を費やすだけでなく、プロジェクト進捗に影響を与えることになります。そのため、結合テストの前に、各機能ごとに品質を確保しておくことが求められます。

アジャイル開発のテスト戦略

アジャイル開発におけるテストの課題をご紹介しましたが、課題に対するテスト戦略としてはどのようなものがあるのでしょうか。
ここでは、アジャイル開発のテストを効率化するためのテスト手法として、2つご紹介します。

回帰テスト自動化ツールを導入する

打鍵でテストを実施しているためにテストの工数が大きくなり、課題を感じている場合は、テスト自動化ツールを取り入れることが一つの解決策となります。たとえば、今まで人が打鍵でテストを実行して結果を目視で確認していたテストに対し、自動化ツールでテストを実施することで、その分の工数を他の作業に割り当てることができますし、人的ミスを削減することも可能となります。

アジャイル開発におけるテスト自動化は、新しく開発する機能ではなく、既存機能の回帰テストで特に効果を発揮します。回帰テストの自動化は、スプリントを重ねるごとにテスト工数が増加する課題に対して、計画工数内(または、より少ない工数)でテストを完了することを強力にサポートします。そして、新しい機能の開発とテストに注力することを可能にし、「アジャイル」な開発を継続できるようにします。一方で、新しく開発する機能は仕様変更の影響を受けやすいため、相対的にテスト自動化を適用しにくい特性があります。

サービス仮想化を利用し、API連携で用いる機能に成り代わる疑似環境を用意する

昨今のシステムでは、APIを用いて機能を連携させることが一般的になっています。たとえば、フロントエンド(UI)とバックエンド(API)との連携や、マイクロサービスの各機能(API)を連携させてシステムを構築します。各機能を連携させたときの動作を検証する結合テストで手戻りを減らすためには、結合テストの前に各チームが開発するアプリケーションや機能の品質を別々に確保しておくことがポイントになります。そのための方法として、本物の機能とAPI連携する前に、疑似環境を使って結合テストを行い、開発の早い段階からバグ出しを行うことが一つの解決策となります。この疑似環境を構築する方法として、「サービス仮想化」というテスト手法があります。

一般的には、API連携における疑似環境を構築する方法として、スタブやモックサーバーがあげられますが、サービス仮想化は、スタブやモックサーバーよりも強化された機能を備え、疑似環境の作成やメンテナンスを大幅に効率化するだけでなく、さまざまなシナリオテストで利用できるため、実施可能なテストの幅を増やします。

下の図では、サービス仮想化の利用例として、フロントエンドのUIテストを行うために、バックエンドのAPIをサービス仮想化で代用するテスト手法を表しています。これで、開発の早い段階からUIテストを行うことを可能にします。

また、下図では、バックエンドのAPIをテストするために、連携する外部システムをサービス仮想化で代用するテスト手法を表しています。これで、開発の早い段階からAPIテストを行うことを可能にします。

このように、サービス仮想化は、フロントエンドのUIやバックエンドのAPIのテストに必要な疑似環境を提供し、開発の早い段階からテストを可能にするテスト手法となります。

疑似環境の構築や、サービス仮想化についての詳細は、次の記事をご参照ください。

テスト自動化とサービス仮想化でアジャイルのテストを加速

アジャイル開発におけるテスト課題の解決策として、回帰テスト自動化ツールの導入やサービス仮想化を活用するテスト戦略についてご紹介してきました。ここでは、具体的に、アジャイル開発で活用できる回帰テスト自動化ツールやサービス仮想化ツールをご紹介します。

UIテスト自動化ツール:Ranorex

Ranorexは多くのサードパーティー製コントロールをサポートする高性能なUIキャプチャ機能を搭載したUIテスト自動化ツールです。デスクトップアプリ、Webアプリ、モバイルアプリに対応しており、いつも通りの画面操作をするだけで操作をキャプチャし、テストシナリオを自動生成します。そして、キャプチャした操作を再生する形でテスト自動化をサポートします。
UIのテストでは、さまざまなデータパターンでテストを実施するデータ駆動型テストや、検証が必要になりますが、Ranorexにはデータ駆動型テストや検証を実施するための機能が用意されているので、テストに合わせて柔軟にテストシナリオを作成、編集することが可能です。

APIテスト自動化ツール:SOAtest

SOAtestはAPIのテストドライバー機能を持ち、APIへのリクエスト電文(テスト電文)をシミュレートします。テスト実行後にAPIから返されるレスポンス電文の検証も自動で行いますので、APIテストを自動化できます。また、テストドライバー間で値を受け渡すシナリオテストもGUI上の操作のみで簡単に実施できます。テストに使用するデータをCSVやEXCELでデータソースとして用意し、テストドライバーに流し込むことで、豊富なバリエーションでテストを実施することも可能です。
APIテストの機能以外にも、データベースの検証を行う機能やエビデンスの自動収集機能に加えて、リモートのサーバーにコマンドを打ち込んでからAPIテストを実施する機能なども搭載されています。SOAtestでは、APIテストに関連する諸々の処理を含めて1つのシナリオとして自動化することが可能です。

サービス仮想化ツール:Virtualize

Virtualizeはスタブ/モックサーバーの機能を持ち、受信したリクエスト電文に対して適切に応答することが可能です。あたかも本物のAPIを利用しているかのように応答するため、API利用者のテストに必要な疑似環境を作成できます。Virtualizeは受信したリクエストを賢く判断し、応答すべきAPIに成り代わって適したデータを返すことができます。CSVやEXCELなどで用意したデータソースを取り込めば、用意されたデータの分だけバリエーションに富んだ応答ができます。値のバリエーションに加え、検索API→更新APIのように異なるAPIを順番に呼び出すシナリオテストであっても、Virtualizeは受信したリクエストを賢く判断し、応答すべきAPIに成り代わって適したデータを返すことができます。
設定はすべてGUI上で行いますので直感的な操作や容易にメンテナンスすることが可能です。Virtualizeを利用することで、さまざまな理由で本物のAPIが利用できない状況であっても、APIを利用しているかのようなテストをいつでも実施することができます。

まとめ

この記事では、アジャイル開発におけるテストのポイントやテスト戦略についてご紹介しました。アジャイル開発においては、頻繁に実施するテストに対し、品質を確保しつつも、いかに効率的にテストを進めるか、といったことも重要となります。そのための方法として、回帰テスト自動化やサービス仮想化を活用するテスト戦略と具体的なツールをご紹介しました。アジャイル開発におけるテスト効率化のために、今回ご紹介した「UIテスト自動化ツール Ranorex」「APIテスト自動化ツール SOAtest」「サービス仮想化ツール Virtualize」の活用もご検討ください。
APIテストまるわかりガイドダウンロード

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

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

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

    03-4405-7853

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

お問い合わせ

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