ソフトウェアテストとは 、コンピュータ上で動作するソフトウェアに対し、期待どおりに動作することを実証したり、欠陥や想定外の動作を検出したりする活動のことです。
テスト活動には様々なものがあります。 ソフトウェア開発ライフサイクルの中で、テスト活動を整理し、理解し、適切に実施していくことも重要です。 ソフトウェアテストを静的または動的、外見または内面、目的別、あるいはレベル別などの観点で分類することで、ソフトウェアテストを整理し、ソフトウェア開発ライフサイクルへ適用することができます。
ここでは、テストレベル別に実施する代表的なテストを解説します。
テストレベルの種類
テストレベルとは、JSTQBでは「系統的にまとめ、マネジメントしていくテストの活動グループである」と定義されています。ソフトウェア開発ライフサイクルの活動をレベル別に分類して実施する場合の、レベルごとに分類されるテストグループのことです。
ここからは、ソフトウェア開発ライフサイクルモデルの代表例の一つである、V字モデルを例にします。V字モデルは左側の開発工程と右側のテスト工程で構成されており、開発のレベルと各テストのレベルが対応している特徴を持っています。このような特徴を持つV字モデルの下記テストレベルについて解説します。
- 単体テスト
- 結合テスト
- システムテスト
- 受け入れテスト
単体テストのテスト対象と実施内容
単体テストは、JSTQBでは別名のコンポーネントテストとして「個々のソフトウェアコンポーネントのテスト」と定義されています。単体テストのテスト対象は、コンポーネントとも呼ばれるソフトウェア単体です。テストの単位は、関数、クラス、モジュール、コードおよびデータ構造など、開発手法により異なります。
単体テストでは、詳細設計書、データモデル、コンポーネント仕様、ソースコードなどをもとに、詳細設計までに定義された機能仕様を満足させることや、ソフトウェア単体の構造が設計通りであること、論理的なエラーがないことなどを検証します。
また、多くの場合はシステムの他の部分と切り離したテストが可能ですが、ハーネス、スタブ、ドライバ、フレームワークなどと呼ばれる、テストを支援するためのプログラムや、統合開発環境やテストツールを利用して実施し、通常は開発者自身が実施することが大半です。
結合テストのテスト対象と実施内容
結合テストは、JSTQBでは別名の統合テストとして「統合したコンポーネントやシステムのインターフェースや相互作用の欠陥を摘出するためのテスト」として定義されています。
結合テストの対象は、2つ以上のコンポーネント、サブシステム、データベース、マイクロサービスなどの相互処理部分です。結合するテスト対象は、それぞれ単体テストを実施し欠陥に対処したものとなります。
結合テストでは、基本設計書、コンポーネントレベルまたはシステムレベルのアーキテクチャ、外部インターフェース定義、テスト済みのコンポーネントまたはサブシステムなどをもとに、結合テストの対象部分が、基本設計で定義された機能仕様を満足することや、結合した構造が設計通りであること、結合して実現する機能に欠陥がないことなどを検証します。 また、結合テストでは上位や下位のコンポーネントがない場合には、スタブやドライバなどと呼ばれるテストを支援するためのプログラムを利用して実施します。
システムテストのテスト対象と実施内容
システムテストは、JSTQBでは「統合されたシステムが、特定の要件を満たすことを実証するためのテストプロセス」と定義されています。
システムテストの対象は、全てのコンポーネントやサブシステムを統合したシステム全体です。単体テストおよび結合テストを実施し欠陥に対処を完了する必要があります。
システムテストでは、要件定義書、基本設計書、対象システムなどをもとに、システム全体がエンドツーエンドで実行する機能や非機能的な振る舞いが要件を満たすことや、要件に反する欠陥がないことなどを検証します。
受け入れテストのテスト対象と実施内容
受け入れテストは、JSTQBでは「システムが、ユーザーのニーズ、要件、ビジネスプロセスを満足するかチェックするための公式テスト」と定義されています。
受け入れテストの対象は、システムテストを実施し検出した欠陥への対処を完了した、システム全体とされることが大半です。
受け入れテストでは、ユーザー要求、契約要件、規制要件、ビジネスプロセス、リスク、インストール手順などをもとに、テスト対象システムが導入に向けて準備できているかどうか、使用できるかどうか、想定しているシステムの使用方法に合致しているかなどの妥当性を検証します。受け入れテスト実施の際、多くはシステムを使用するユーザー、または独立したテスト担当チームが行います。
おわりに
- 単体テストは詳細設計に対応しコンポーネント単体を検証
- 結合テストは基本設計に対応しコンポーネントやシステムの相互作用部分を検証
- システムテストは要件定義に対応し統合されたシステムが要件を満たすことを検証
- 受け入れテストは要求分析に対応し対象システムが要求に妥当であるかを検証
今回はV字モデルを例にテストレベルを解説しました。ただ漠然とテストをするのではなく、テストレベルなどテストの種類を整理し、目的に合ったテストを実施するようにしましょう。