ソフトウェアテストには多くの種類があり、プロジェクトの現場では「ユニットテスト」「リグレッションテスト」「E2Eテスト」など、さまざまな用語が飛び交います。しかし、これらの用語は体系的に整理されており、国際的には ISTQB(International Software Testing Qualifications Board) の分類が最も広く参照される「準標準」として知られています。
この記事では、ISTQB の公式体系をベースに、実務でよく使われるテストの種類を テストレベル・テストタイプ・テスト設計技法 の3つの軸で整理して解説します。
ソフトウェアテストとは
ISTQB では、ソフトウェアテストを以下のように定義しています。
ソフトウェアの品質を評価し、欠陥を発見し、リスクを低減するための活動
テストは単に「バグを見つける作業」ではなく、ソフトウェアが期待通りに動作するかを確認し、リリースのリスクを管理するための包括的な活動です。
テストレベル — いつ・どの粒度でテストするか
最も基本となる分類が テストレベル(Testing Levels) です。開発工程に沿って、テスト対象の粒度を変えていく考え方で、一般的に「V字モデル」として知られています。
ISTQB では以下のレベルが定義されています。
ユニットテスト(単体テスト / Unit Testing)
プログラムの最小単位(関数やメソッド)が正しく動作するかを検証します。ロジックの正しさや境界値の確認が主な目的です。
開発者が実装と同時に書くことが多く、CI/CD パイプラインで最初に実行されるテストでもあります。
統合テスト(結合テスト / Integration Testing)
同一システム内のコンポーネント同士を組み合わせた際に、インターフェースやデータの受け渡しに問題がないかを検証します。「コンポーネント統合テスト」とも呼ばれます。
たとえば、API と DB の接続、モジュール間のデータフローなどが対象です。
システムテスト(System Testing)
システム全体として、定義された要件(機能・性能)を満たしているかを検証します。End-to-End のシナリオテストがこのレベルに該当します。
システム統合テスト(System Integration Testing)
統合テストが「システム内部」のコンポーネント間を対象とするのに対し、システム統合テストはシステムの境界を越えた接続を検証します。
たとえば、自社システムとサードパーティ決済 API の連携、他チームが開発したマイクロサービスとの結合などが対象です。
受入テスト(Acceptance Testing / UAT)
最終的にユーザーのビジネスニーズを満たしているか、デプロイ可能かを確認します。ユーザー視点での要件充足確認であり、リリース判定の基準となります。
テストタイプ — 何を目的にテストするか
テストレベルとは別の軸として、テストの目的別分類(Test Types) があります。どのテストレベルにおいても、以下の観点でテストを設計できます。
機能テスト(Functional Testing)
「何ができるか」に焦点を当て、仕様書通りの動作をするかを確認するテストです。
| テスト | 内容 |
|---|---|
| 機能テスト | 仕様通りに動作するかの確認 |
| リグレッションテスト(回帰テスト) | 変更により既存機能が壊れていないかの確認 |
| スモークテスト | ビルド直後・リリース前の基本動作確認 |
| サニティテスト | 特定の変更箇所が正常かの軽量確認 |
| エクスプロラトリーテスト | テスターの経験を活かし、学習・設計・実行を同時に行う探索的技法 |
| 確認テスト(再テスト) | 発見されたバグが正しく修正されたかの確認 |
特にリグレッションテストは、修正や機能追加のたびに繰り返し行われるため、自動化の最優先対象 となります。
非機能テスト(Non-functional Testing)
「どのように動くか」に焦点を当てるテストです。機能は正しく動いていても、パフォーマンスやセキュリティに問題があれば品質は不十分です。
| テスト | 内容 |
|---|---|
| パフォーマンステスト | レスポンス・スループットの検証 |
| 負荷テスト(Load Test) | 想定される負荷での動作確認 |
| ストレステスト(Stress Test) | 限界負荷での動作確認 |
| セキュリティテスト | 脆弱性・認証・認可の検証 |
| ユーザビリティテスト | UX 観点での使いやすさ検証 |
| アクセシビリティテスト | WCAG 準拠などの利用可能性検証 |
| 互換性テスト | ブラウザ・OS・デバイス間の動作確認 |
テスト設計技法 — どうテストを設計するか
テストケースをどのように作成するかの観点です。
ブラックボックステスト
内部構造を見ずに、入出力のみでソフトウェアの振る舞いを検証する手法です。以下のような技法が含まれます。
- 同値分割: 同じ挙動をする入力値をグループ化し、代表値でテスト
- 境界値分析: 境界条件(最小値、最大値、境界の前後)を重点的にテスト
- デシジョンテーブル: 条件の組み合わせを網羅的に整理してテスト
ホワイトボックステスト
コードの内部構造を知った上で、処理パスの網羅性(カバレッジ)を重視してテストする手法です。
- ステートメントカバレッジ: すべての文が実行されるか
- ブランチカバレッジ: すべての分岐が実行されるか
グレーボックステスト
ブラックボックスとホワイトボックスの中間的なアプローチです。内部構造の知識を一部活用しつつ、外部からの入出力でテストを行います。
テストピラミッド — テストのバランス
テストの種類を理解したら、次に重要なのが テストピラミッド の考え方です。Mike Cohn が『Succeeding with Agile』(2009) で提唱し、Martin Fowler の記事で広く知られるようになったこのモデルは、テストの量と種類のバランスを示しています。
少数・遅い・コスト高
多数・速い・コスト低
- ユニットテストを厚く: 実行が速く、問題の特定が容易。数百〜数千単位で書く
- 統合テストは中間: コンポーネント間の連携を適度にカバー
- E2E テストは薄く: 実行が遅くメンテナンスコストが高いため、重要なシナリオに絞る
このバランスを保つことで、高速なフィードバックループを維持しながら、十分なテストカバレッジを確保できます。
テスト手法 — TDD と BDD
テストの種類に加えて、テストを活用した開発手法も押さえておきましょう。
TDD(テスト駆動開発)
テストを先に書いてから実装を行う開発手法です。Red(失敗するテストを書く)→ Green(テストを通す最小の実装)→ Refactor(リファクタリング)のサイクルで開発を進めます。
BDD(振る舞い駆動開発)
Given / When / Then 形式で仕様とテストを統合する手法です。ビジネス要件をそのままテストケースとして表現できるため、開発者と非開発者の間のコミュニケーションギャップを埋めるのに有効です。
テスト体系の全体像
ここまでの内容を整理すると、ソフトウェアテストは以下のような体系になります。
mindmap
root((ソフトウェアテスト))
テストレベル
ユニットテスト
統合テスト
システムテスト
システム統合テスト
受入テスト
テストタイプ
機能テスト
リグレッションテスト
スモークテスト
エクスプロラトリーテスト
非機能テスト
パフォーマンステスト
セキュリティテスト
アクセシビリティテスト
テスト設計技法
ブラックボックス
ホワイトボックス
グレーボックス
テスト手法
TDD
BDD
まとめ
ソフトウェアテストの種類は多岐にわたりますが、テストレベル(粒度)・テストタイプ(目的)・テスト設計技法(手法) の3軸で整理すると、体系的に理解できます。
実務では、まず テストピラミッドのバランス を意識しながら、ユニットテストを中心に自動化を進め、リグレッションテストで品質を守り、必要に応じて非機能テスト(パフォーマンス・セキュリティ)を組み合わせるのが基本的なアプローチです。
以上、ソフトウェアテストの種類をISTQBベースで体系的に整理してみた、現場からお送りしました。
参考資料
| 資料 | URL |
|---|---|
| ISTQB 公式サイト | https://www.istqb.org/certifications/certified-tester-foundation-level |
| ISTQB Glossary(用語の公式定義) | https://glossary.istqb.org/ja_JP/ |
| JSTQB Foundation Level シラバス | https://jstqb.jp/dl/JSTQB-SyllabusFoundation_Version2018V31.J03.pdf |
| ISO/IEC/IEEE 29119(テスト国際規格) | https://www.iso.org/standard/81291.html |
| Atlassian — Types of Software Testing | https://www.atlassian.com/continuous-delivery/software-testing/types-of-software-testing |
| Martin Fowler — Practical Test Pyramid | https://martinfowler.com/articles/practical-test-pyramid.html |
| Google Testing Blog | https://testing.googleblog.com |
| OWASP Testing Guide | https://owasp.org/www-project-web-security-testing-guide/ |
| WCAG 2.1 | https://www.w3.org/TR/WCAG21/ |