COLUMN
コラム
Column 36

ウォーターフォール開発とアジャイル開発におけるテストの役割

システム開発において、代表的な手法として「ウォーターフォール開発」と「アジャイル開発」があります。
それぞれの開発手法には大きく違いがあり、ソフトウェアテストにおいても「ウォーターフォール開発」と「アジャイル開発」によってテストのアプローチが異なります。
今回は2つの開発手法におけるテストの役割についてご説明いたします。

1.ウォーターフォール開発とアジャイル開発の違いについて

ウォーターフォール開発とアジャイル開発では、開発プロセスの進め方に大きな違いがあります。
ここではそれぞれの特徴について簡単にご説明いたします。

①ウォーターフォール 開発とは

現在のシステム/ソフトウェア開発において最も認知度が高いと言われているのが、「ウォーターフォール開発」です。 開発工程を細分化し上流工程から下流工程へと、1つの工程を完了させてから次の工程へと順番に進めていく開発手法です。 そのため途中での仕様変更や追加要件などの対応が難しく、万が一テストフェーズで仕様の考慮漏れや致命的なバグが見つかった場合、前の工程から見直すことになりリリースの遅れにもつながります。
プロジェクトなどによって異なる場合がありますが、一般的には以下のような工程に分けられます。

図1

②アジャイル開発とは

ウォーターフォール開発に代わり、現在主流になってきている開発手法が「アジャイル開発」です。
プロジェクトを小単位に分け、短い期間で「計画→設計→実装→テスト」といった工程を繰り返して(イテレーション)開発を進めていく手法です。 小さいサイクルを繰り返すため、急な仕様変更や開発中に発生した問題の修正などにも柔軟に対応することができます。
システムを小さい単位で区切って開発することで、開発期間が大幅に短縮されることからアジャイル(素早い・迅速)と呼ばれています。

図1

2.それぞれの開発におけるテストの役割

先ほどは開発プロセスの違いについてご説明しましたが、開発手法によりテストのアプローチの仕方も異なります。ここではそのアプローチの違いや役割についてご説明いたします。

①ウォーターフォール開発でのテストチームの役割

ウォーターフォール開発においてのテスト工程では、主に以下4つのテストが実施されます。

各工程において主にテストチームが実施するのは、結合テストと総合テストになります。
テスト工程 役割 実施者
単体テスト 画面や機能などモジュールごとに動作の確認をする 開発者
結合テスト 複数の機能やシステムを組み合わせて動作の確認をする テストチーム
総合テスト 実運用を想定し、システム全体の機能や性能を確認する テストチーム
受入れテスト 要求した内容がシステムに反映されているかを確認する クライアント

■結合テスト
結合テストとは、単体テストで正常に動作した複数のモジュールを組み合わせて、モジュール間の構造に問題がないかデータの受け渡しが正常に行われるかなど、システムが仕様に従って正しく動作するかを確認するテストです。
また、結合テストは単体テストを経た機能を組み合わせていく最初のテストとなります。 それぞれの機能が動作するかを確認するのではなく、機能や操作の組み合わせが正しいか、仕様通りに動作しているかも検証する必要があります。 そのため事前に綿密にテスト計画を立て、テストの目的に沿ったテスト項目を策定することもテストチームの重要な役割となります。

■総合テスト
総合テストとはシステムが要件定義で挙げられた内容に沿っているか、仕様に従って正常に動作するかどうかを確認するテストのことです。 ソフトウェア開発工程での最後のテストであり、エンドユーザーが実際に使用する状況を想定した環境でテストを実行します。
総合テストでは、要件や仕様に従って正常に動作しているかどうかを確認するために、様々なテストが必要になります。 具体的には機能要件に加え、パフォーマンス、ユーザビリティ、セキュリティ、負荷テストなどの非機能要件に対して、システムが求められる性能や品質になっているかを確認する必要があります。 そのためテストチームとしてテスト実行以外にも幅広い知識が求められます。

②アジャイル開発でのテストチームの役割

先述したウォーターフォール開発では、プロジェクト工程の終盤、実装が完了した後にテストが実行されますが、アジャイル開発ではスプリント毎に開発が行われるため、実装と並行してテストも実施する必要があります。 またテストの実施期間が短く、機能の追加だけでなく急な仕様変更への対応なども発生するため、ウォーターフォール開発の時のように、事前に仕様に沿ったテストケースの作成や時間をかけてのテスト実行が難しくなります。
短期間で正しく動く製品・サービスをリリースするために、以下のようなテストアプローチがあります。

1.探索的テストの実施
探索的テストとは、ソフトウェアの品質を向上させるために行われるテスト手法の一つで、事前にテストケースを作成せずテスト担当者がソフトウェアの振る舞いや結果に応じて、テストの内容や目的を柔軟に調整しながら実行する技法を指します。
事前にテスト設計をする必要がないため、テスト期間の短縮が図れる他、従来のテスト手法では見つけにくい、想定外の問題を発見することができます 。

2.テストの自動化
アジャイル開発ではスプリントごとに新しい機能が追加され、さらにバグの修正等によるコードの変更なども多く発生します。 それによりデグレが発生する可能性があるため、リグレッションテストの実施も重要になってきます。 アジャイル開発におけるテストの自動化 は、このリグレッションテストで特に効果を発揮します。過去に実施したテストケースを流用し、スプリントごとにテストを行うことで工数の削減につながり、テストの効率性の向上も期待できます。

3.テストを見える化させる
テストの見える化とは、テストに関する情報や結果を可視化することで、プロジェクト全体で品質に対する共通認識を得ることができるようにすることです。 テストの見える化により、品質に関する問題や改善の必要性を迅速に把握・分析し、品質を向上させることができます。

上記以外にも、テストを実行するだけでなく開発の開始からテストチームがプロジェクトに入ることで、品質保証の立場から仕様の考慮漏れや矛盾を指摘して不具合の発生を事前に防ぐことができます。また、プロジェクトメンバーとコミュニケーションを密にとり、「どんなテストが最適か」「どうやったら品質が向上するか」なども考慮して活動することも重要となります。

3. まとめ

ウォーターフォール開発とアジャイル開発の違いや、それぞれの開発に応じたテストアプローチについてご紹介させていただきました。
簡単にまとめると、ウォーターフォール開発でのテストは、開発プロセスの最後に行います。事前に要求や仕様が明確になっているので、それに応じたテストケースを作成し、いかに 不具合を発見するかが重要なポイントとなります。
対してアジャイル開発でのテストは、実装と並行して繰り返し行われます。そのためテストチームの強みを生かし、開発段階から要求や品質について関与し対応することで、不具合の早期発見や欠陥の予防にも貢献できます。
どちらの開発手法においても、不具合を見つけることだけでなく、ユーザー目線での品質向上と共にプロジェクト全体の品質を良くすることもテストチームの重要な役割となります。

ページトップへ戻る