2000年代に登場した「アジャイル開発」は、開発にかかる時間を大幅に短縮化し従来の手法にかわってソフトウェア開発の主流となっています。それでは、アジャイル開発ではどのようなテストが行われるのでしょうか。この記事ではアジャイル開発が普及した背景を解説した上で、この開発手法におけるテストの進め方や特徴を紹介します。

アジャイル開発が普及している背景

アジャイル開発は新しい時代に適した開発手法として注目を集めています。実際、すでにこの手法を取り入れている企業は非常に多いです。それでは、どういった背景でアジャイル開発が普及しているのでしょうか。

仕様変更の要求に対し柔軟に対応可能な新しい手法が求められる

アジャイル開発は、開発途中でも仕様変更の要求に対し柔軟な対応が可能な開発手法です。アジャイル開発では、1つの機能ごとに計画→設計→実装→テスト→運用というサイクルを迅速に繰り返します。そうして開発がすんだ機能を組み合わせることによって、ソフトウェアを完成させるわけです。

アジャイル開発では開発途中で仕様変更の要求が発生しても、機能ごとに開発をすすめているため設計からやり直す負担が大きくありません。はじめに全ての機能設計を完了させるウォーターフォール開発に比べ、仕様変更の要求に対し柔軟な対応が可能となるのです。

仕様変更の要求が頻繁に発生する昨今の環境では、アジャイル開発はウォーターフォール開発よりスピーディーにソフトウェアを提供できます。アジャイルとは「素早い」という意味の英単語で、文字通りアジャイル開発とは速やかにソフトウェアを提供するための手法ということです。

従来の開発手法では、要求の変化に追随できない

アジャイル開発が登場するまで、一般的だった開発手法が「ウォーターフォール開発」です。ウォーターフォール開発では、あらかじめソフトウェアの仕様を全て決定してから設計→実装→テスト→運用といった工程へ移行します。「滝(Waterfall)の水が必ず上から下に落ちる」ように、上位の工程が完了してから下位の工程へすすむのが名前の由来です。

工程としてはシンプルですが、ウォーターフォール開発では開発途中に生じる仕様変更の要求が計算されていません。滝の水が下から上に戻ることがないように、仕様決定後に上位の工程へ戻ることが想定されていないのです。仮にテストの段階等で仕様変更の必要性が生じた場合、理論上、設計から全てやり直す必要が生じます。

その分、仕様変更に応じるための時間やコストが膨大化してしまいます。ウォーターフォール開発では、日々変わる仕様変更の要求に対応することはできません。

ソフトウェアに対する要求が激しく変化する時代に

インターネットが爆発的な広がりをみせ、ビジネスにおいてもITやソフトウェアの重要性が高まりました。ソフトウェアは、日々変わるビジネス環境の変化に対応することが求められるようになっています。

ソフトウェアの開発計画を立ち上げてからリリースまで数ヵ月かかるとしたら、その間にユーザーの要求が変化することもしばしばです。ソフトウェアに求められる仕様が目まぐるしく変わる現代には、素早く開発サイクルを回していくアジャイル開発がマッチしているのです。

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

では、アジャイル開発では、どのようにテストが行われるのでしょうか。従来のウォーターフォール開発と比較しつつ、アジャイル開発におけるテストの特徴を1つずつ解説します。

スプリントごとにテストをしていく

アジャイル開発では、一般的に1~3週間程度の決められた期間で開発のサイクルをまわしていきます。この開発サイクルを「スプリント」と呼びます。

ウォーターフォール開発の場合、全機能の設計や実装を終わらせたあとに、全ての機能に対するテストを一斉に行うのが一般的です。一方、アジャイル開発を採用した際は、スプリントごとにテストを行います。スプリントの対象となる機能ごとにテストが行われるわけです。

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

ユーザーストーリーとは、そのソフトウェアで「ユーザーが何をしたいか」をユーザー視点でまとめた文章です。ソフトウェアに求められる仕様をまとめたものを「要件定義」と呼ぶことがありますが、ユーザーストーリーは要件定義とは少し異なります。要件定義では仕様の詳細が専門的な用語等でまとめられますが、ユーザーストーリーはユーザーでもわかるような簡潔さで記述されるのです。

アジャイル開発の場合、ユーザーストーリーをテストベースとして利用します。テストベースとは、テストの手順や利用データをまとめた「テストケース」を作成するときに、参照すべき情報源のことです。ユーザーストーリーを利用することで、ユーザーの要望をより正確に把握して効率的にテストできるというメリットがあります。

早期に不具合を検知して修正

アジャイル開発におけるテストでは、開発プロセスのなるべく早い段階で不具合を検知して修正するのが特徴です。スピードが重視されるため、ウォーターフォール開発におけるテストと違い、外部に出すことはあまりありません。
開発会社のテスト担当者がテストを実行したり、テスト設計者がテストの実行も担ったりするかたちがほとんどです。仮に外部委託をする場合は、開発担当者等と同じ場所に常駐することが多いです。

またアジャイル開発の場合、「テスト駆動開発(TDD)」と呼ばれる手法があります。テスト駆動開発(TDD)では最初にテストコードを書いてから、それを基にテストを通過できるよう実装をすすめます。(テストコードとは、作成済のソースコードが想定した通りに動作するかチェックするためのソースコードです。)開発の早い段階からテストを繰り返すことになるため、比較的早くバグの検知や修正ができるのが特徴です。

探索的テストを活用する

探索的テストとは、テストケースを用意せず行うテスト手法です。あらかじめテストケースを作成してテストを行うスクリプトテストとは反対です。
探索的テストではテストの設計と実行を同時に行います。テストの実行結果をもとに、次にどのようなテストが必要かを「探索」するのです。

探索的テストは、アジャイル開発のテスト手法としてよく使われます。事前の用意が不要で迅速に実行できることから、スピードを重視するアジャイル開発に適しているためです。ただし、全くスクリプトテストを行わないというわけではなく、スクリプトテストを実行したあとに探索的テストを活用するケースなど様々です。アジャイル開発においては、テストケースは比較的軽量な内容になることが多いため、足りないテストを強化する意味合いとして探索的テストとの併用が有効なのです。

探索的テストとは?他のテストとの違いやメリット・デメリットについて理解しよう

まとめ

ソフトウェアに対する仕様変更の要求が頻繁に発生する昨今では、開発手法としてアジャイル開発がよく採用されています。アジャイル開発では、開発後期の段階でも比較的柔軟に仕様変更に応じることが可能です。

一方、アジャイル開発におけるテストはスプリントごとに行われます。スピードが重視されるため、事前準備が必要のない探索的テストや、早期に不具合を検知可能なテスト駆動開発(TDD)がよく採用されることがあります。ユーザーの要求をより正確に把握する目的で、ユーザーストーリーをテストベースとして利用するのも特徴的です。