アジャイル開発におけるテストの方法とは?ポイントや効率化のコツを解説

 2022.02.28  株式会社システムインテグレータ

ソフトウェア開発のほとんどは、アジャイル開発かウォーターフォール開発のどちらかで行われています。

そして、どちらの開発手法もテストを実施しなければなりません。テストすることで、仕様通りの動作をするかどうか、バグなどがないかどうか確認できます。不具合がなく安心して使えるソフトウェアをリリースするためです。

ここでは、アジャイル開発におけるテストについて、ポイントや効率化のコツを中心に解説していきます。

アジャイル開発とは

アジャイル開発におけるテストの方法とは?ポイントや効率化のコツを解説 1

最初に、アジャイル開発について概要をご説明しましょう。

アジャイル開発とは、プロジェクト全体を、いくつかのサイクルに分けた上で開発を進める手法のことです。ソフトウェア開発の場合、機能ごとに分けることが多く、分けたサイクルはスプリントと呼ばれています。

各スプリントはプロジェクトの中の一部ですが、それぞれ独立しているのが特徴です。1つのスプリントは1~3週間程度で完了し、スプリントが1つ完了するたびに機能が1つ加わっていきます。スプリントの開始と完了を繰り返し、全てのスプリントが完了すればプロジェクトも完了です。

アジャイル開発について詳しくはこちらで説明しています。
アジャイル開発とは?特徴やウォーターフォールとの違いなど徹底解説

アジャイル開発のメリット

アジャイル開発では、開発途中で仕様変更があった場合でも、設計をやり直すのは該当するスプリントに限られます。仕様変更と直接関係のない機能に関しては、そのままで問題ないため、柔軟に対応できるのがメリットです。

昨今のビジネス環境は変化が激しいため、その環境にマッチした開発手法と言えるでしょう。突然仕様変更を行うときでも、全体を修正する必要はありません。

また、ソフトウェアをできるだけ早くリリースして欲しいという顧客の要望に応えることもできます。

アジャイル開発とウォーターフォール型でテスト方法が異なる

ウォーターフォール開発では、プロジェクトの終盤にテスト工程を設置するのが特徴です。全ての機能に関して企画、設計、実装まで終えてからテストを行います。プロジェクトの序盤や中盤でテストを実施することはありません。

これに対して、アジャイル開発では、スプリントごとに開発が行われるため、テストもスプリントの数だけ行われます。スプリント内では終盤に行われますが、テストが無事に終わってスプリントが完了すれば、また次のスプリントへ移ります。

プロジェクト全体で見ると、頻繁にテストを実施するのがウォーターフォール開発との大きな違いと言えるでしょう。

アジャイルテストの4象限とは

アジャイル開発で行われるテストは、ビジネス面を重視する方法と技術面を重視する方法があります。また、それとは別にチームを支援するか製品の批評を重視するかで分けることも可能です。

異なる2つの軸で分けることで、4つのタイプに分けることができます。これがアジャイルテストの4象限と呼ばれているものです。

agile-test-2

縦軸の上方向を「ビジネス面」、下方向を「技術面」とします。横軸は右方向が「製品の批評」で左方向が「チームの支援」です。

左下はアジャイル第一象限で、内部コードの品質に焦点を当てています。テスト量を多めに行い、それを自動化することで、チームを支援した上で品質も維持できます。

左上のアジャイル第二象限は、主に要件に対して適用されるものです。ビジネスルールに則った要件になっているかどうかの確認がメインになるため、テスト回数自体は少なくて済みます。手動で行うことは少ないためチームの支援にもなるでしょう。

右上のアジャイル第三象限は、第一・第二象限のテストに対するフィードバックです。手動で探索テストを行い、信頼性を高めます。

右下のアジャイル第四象限は、安定性やセキュリティなどに関するテストです。機能とは直接関係ありませんが、快適に使用できるかどうかという面で信頼性を高めます。

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

アジャイル開発におけるテストの方法とは?ポイントや効率化のコツを解説 3

アジャイル開発においてテストを実施する際に、ポイントとなる点について見ていきましょう。

各スプリントでテストを実施する

アジャイル開発では、機能ごとにスプリントを設置し、そのスプリントを順番に完了させていくことで開発サイクルを回します。各スプリントでは担当する機能を実装するために必要な工程が盛り込まれており、その機能だけで見ればスプリント内で完結する仕組みです。

テストに関しても例外ではなく、各スプリント内で実施しなければなりません。これは他のスプリントとは関係なく実施することができます。テストにより不具合が見つかった場合には修正を行いますが、その際にも他のスプリントに影響が及ぶことはありません。

テストベースにユーザーストーリーを利用する

テストベースというのは、テストを実施する際に参照するデータや情報のことです。主にテストを実施する方法や手順などが記載されています。必要に応じて、数値などのデータを含めていることも多いです。手順に沿ってテストを実施し、基準を満たしているかどうかの確認を行います。

このテストベースを作成する際に、ユーザーストーリーを盛り込まなければなりません。ユーザーストーリーというのは、ユーザーがソフトウェアを使用してやりたいことを文章でまとめたもののことです。

要件定義とよく似ていますが、ユーザーストーリーは難解な専門用語を使用することはありません。一般の人でも分かるような簡潔な文章で記載します。例えば、カレンダーアプリなら、「予定を登録して指定した日時に通知が来るようにしたい」のような具合です。

また、ユーザーストーリーを作成する際には、ユーザーの要望を正確に把握する必要があります。

テストのスピードを速めて早期に問題を見つける

アジャイル開発はスピードを重視する際に用いられる開発手法です。そのため、テストを実施する際にも、できるだけスピーディーに行わなければなりません。

早い段階で問題点を発見できれば、それを修正する作業も早期に行えます。遅くなってから修正するよりも工数が少なくて済むでしょう。

スピードを特に重視する場合には、テスト駆動開発という手法が用いられることもあります。これは、実装を行う前にテストコードを作成するやり方です。実装の際には、テストを通過できるように考慮しながら作業を進めていきます。

また、開発工程の一部を外部委託するケースも見られますが、テストに関しては自社内で行うのが望ましいです。実際、アジャイル開発を行う企業の大半で、社内のテスト担当者やテスト設計者が、その実行まで行っています。

探索的テストの活用

開発においてテストを行う際には、テストケースを作成して、それに基づくスクリプトを実行する方法が多いです。

一方、探索的テストではスクリプトを使用しません。テストの実行結果を見て、次のテストの内容を探索するのが特徴です。テストケースの作成を行わなくて済む分だけ、時間が短縮されます。スピード重視のアジャイル開発によくマッチしたテスト方法と言えるでしょう。

また、通常のスクリプトテストと探索的テストを併用するケースも多いです。これにより、テストの精度を保ちつつスピードアップも図れます。完全に探索的テストのみで済ませることはむしろ少なめです。

アジャイル開発でテストを効率化するには

アジャイル開発では、スプリントごとにテストを実施しなければなりません。開発の初期段階で行うテストは比較的簡単に済みますが、終盤に近づくほど確認すべき点が増えてきます。そのため、時間不足に陥りやすいのが課題です。

それを克服するためには、次のような方法でテストの効率化を図る必要があります。

テストの対象箇所を絞り込む

テストで時間がかかってしまうのは、テストの対象範囲が広範囲にわたるためです。これを少しでも絞り込むことができれば、テストにかかる時間を短縮し効率化を図れます。

対象を絞り込む際には、テストを実施する箇所と省く箇所の判断が重要です。省いてしまった箇所に問題があり、不具合が発生してしまうと、テストを実施している意味がありません。そのため、絞り込むとは言っても、重要度の高いところや不具合が発生しやすいところは省いてしまわないように注意が必要です。

特に過去に障害が発生したことがある箇所と類似した箇所は必ずテストを実施するようにしましょう。それ以外でも不安に感じる箇所に関してはテストを実施するのが望ましいです。

ただ、テストエンジニアだけの判断ではなかなか省く箇所を決められないこともあります。そのため、開発メンバーも含めてチーム全体で、どの箇所に実施すべきか、省いても大丈夫かどうか決めるようにしましょう。

積極的にテストの自動化を進める

テストを実施した結果、不具合が発見されたら、その箇所を修正することになります。このとき他の箇所にも影響が出るケースが多くあり、手戻りが発生してしまいます。

小さな手戻りならそれほど大きな手間にはなりませんが、大きな手戻りだと時間のロスも多いため軽視できません。そのため、手戻りを少なくするためには最後にまとめてテストを実施するのではなく、開発の途中で継続的に行う必要があります。

アジャイルの場合、スプリント単位でテストを実施する必要があるため極力テストは自動化するようにしましょう。自動化でテストに必要な作業そのものをスピードアップできるのに加えて、手戻りによる時間のロスも防止できます。

自動化するテストと手動で行うテストを分ける際には、テスト自動化のピラミッドに照らし合わせて判断するといいでしょう。

テスト自動化のピラミッドでは、繰り返し負荷の高い作業ほど下に位置しており、そうでない作業ほど上の方に位置しています。また、上の方に位置している作業の多くは、アジャイルテストの4象限で第三象限に分類される作業です。

そのため、テスト自動化のピラミッドの下方に位置する作業を自動化しましょう。それを土台にして上方に位置する作業を手動で行うことで、品質と効率化を両立することが可能です。

アジャイル開発の手法「テスト駆動開発(TDD)」とは

テスト駆動開発(TDD)はアジャイル開発においてよく行われている開発手法です。

テストというのは、開発がある程度進まなければ実施できないものだと考える人が多いでしょう。しかし、テスト駆動開発においては最初の段階でテストを実施するのが大きな特徴です。コードの作成を行う前に、テストの作成を行います。ただ、通常の開発で最後に実施するようなテストと比べると簡素な内容です。

そして、テストが完成したらコンパイルして実行します。コードをまだ作成していないことから、テストは失敗しますが、それで特に問題ありません。ここで、どんなコードならテストに通過するのかという視点で考えてコードの作成に着手します。正常に動作すれば、その部分に関してはテストにも通過したものとして扱って問題ありません。

もし、正常に動作しなかった場合にはコードの修正を行い再テストを実施します。

また、テスト通過後のコードに関して、必要に応じてリファクタリングを行います。リファクタリングとは、外部動作に影響を与えないようにした上でコードの内部構造を最適化することです。リファクタリング後は、外部動作の確認も行います。

テスト駆動開発では、このテスト作成からリファクタリングまでの一連のサイクルをいくつも繰り返します。

まとめ

アジャイル開発のテスト手法について理解いただけましたでしょうか。アジャイル開発はスピードが重視される開発手法であるため、テストに関してもスピード感が求められます。一方でテストを実施する回数が多く、時間不足に陥る例も少なくありません。

そのため、どの段階でテストを実施するのか、自動化できる部分はないかどうかという点を早い段階で決めておくことが重要です。探索的テストやテスト駆動開発なども取り入れて、スピード感のある開発を実現しましょう。

開発現場がひっ迫していてテスト工程を効率化したいとお悩みの方は、以下の資料もぜひご覧ください。


RELATED POST関連記事


RECENT POST「アジャイル開発」の最新記事


アジャイル開発

アジャイル開発とスクラム開発の違いとは?それぞれの開発手法について特徴やメリット、その関係性について解説

アジャイル開発

CI/CDとは?詳しい意味やメリット、DevOpsとの関係について解説

アジャイル開発

スプリントとは?アジャイル開発やスクラムとの関係性、メリットを解説

アジャイル開発

スプリントプランニングとは?スクラムにおける役割や手順を解説

アジャイル開発におけるテストの方法とは?ポイントや効率化のコツを解説

OBPM Neo TOPへ

ブログ購読のお申込み

人気資料ランキング