---
title: "トップダウンテストとボトムアップテストの違いとは？スタブとドライバの切り分け【基本情報技術者試験】"
description: "トップダウンテストとボトムアップテストの違いを、スタブとドライバの役割、上位・下位モジュールの関係、試験での判断基準とともに整理します。"
last_modified_at: "2026-08-01"
canonical_url: "https://stemtazoo.github.io/fe/top-down-bottom-up-test/"
section: "fe"
---

## まず結論

**トップダウンテストは上位モジュールから、ボトムアップテストは下位モジュールから結合して確認するテスト方法です。**

試験では、次の対応を最初に押さえます。

| テスト方法 | テストを始める側 | 未完成部分の代用品 |
|---|---|---|
| トップダウンテスト | 上位モジュール | スタブ |
| ボトムアップテスト | 下位モジュール | ドライバ |

判断基準は次のとおりです。

```text
トップダウン
→ 下位モジュールが未完成
→ スタブを使う

ボトムアップ
→ 上位モジュールが未完成
→ ドライバを使う
```

## 直感的な説明

モジュール構造を、上司と担当者の関係に置き換えるとイメージしやすくなります。

```text
上位モジュール
↓ 呼び出す
下位モジュール
```

### トップダウンテスト

上位モジュールから確認します。

しかし、呼び出される下位モジュールがまだ完成していないことがあります。そこで、下位モジュールの代わりに簡単な応答を返す**スタブ**を置きます。

```text
上位モジュール
↓
スタブ
```

### ボトムアップテスト

下位モジュールから確認します。

しかし、その下位モジュールを本来呼び出す上位モジュールがまだ完成していないことがあります。そこで、上位モジュールの代わりに下位モジュールを呼び出す**ドライバ**を使います。

```text
ドライバ
↓
下位モジュール
```

覚え方は次のとおりです。

```text
スタブ
→ 呼び出される代用品

ドライバ
→ テスト対象を呼び出す代用品
```

## 定義・仕組み

### 結合テストとは

結合テストは、単体テストを終えた複数のモジュールを組み合わせ、モジュール間の受け渡しや呼出しが正しく動作するかを確認するテストです。

例えば、次のような構造を考えます。

```text
上位モジュールA
├─ 下位モジュールB
└─ 下位モジュールC
```

確認する内容には、次のようなものがあります。

- 上位モジュールから正しい引数が渡されるか
- 下位モジュールが正しい値を返すか
- 呼出し順序が正しいか
- エラー時に適切な処理へ移るか

### トップダウンテスト

トップダウンテストは、上位モジュールから下位モジュールへ順番に結合していく方法です。

```text
上位モジュール
↓
中位モジュール
↓
下位モジュール
```

開発初期でも、システム全体の制御や主要な処理の流れを確認しやすいのが特徴です。

一方、下位モジュールが未完成の場合は、代わりにスタブが必要です。

### スタブ

スタブは、未完成の下位モジュールの代わりになるテスト用モジュールです。

例えば、本来の下位モジュールが次の値を返す予定だとします。

```text
在庫確認結果
→ 在庫あり
```

下位モジュールが未完成なら、スタブが固定値を返します。

```text
スタブ
→ 「在庫あり」を返す
```

スタブは簡単な応答しか返さないことが多いため、下位モジュール内部の詳しい処理確認には向きません。

### ボトムアップテスト

ボトムアップテストは、下位モジュールから上位モジュールへ順番に結合していく方法です。

```text
下位モジュール
↓
中位モジュール
↓
上位モジュール
```

下位の共通機能や部品を早い段階で確認できます。また、複数の下位モジュールを並行して開発・テストしやすいという特徴があります。

一方、下位モジュールを呼び出す上位モジュールが未完成の場合は、ドライバが必要です。

### ドライバ

ドライバは、未完成の上位モジュールの代わりに、テスト対象の下位モジュールを呼び出すテスト用モジュールです。

```text
ドライバ
↓ 引数を渡す
下位モジュール
↓ 戻り値を返す
ドライバ
```

ドライバは、次の役割を担います。

- テスト用の引数を渡す
- 下位モジュールを呼び出す
- 戻り値を表示・確認する

## どんな場面で使う？

### トップダウンテストが向く場面

- システム全体の制御の流れを早く確認したい
- 主要な画面遷移や業務フローを優先して確認したい
- 上位モジュールの設計リスクが高い

ただし、下位モジュールの詳細確認は後になりやすく、多数のスタブを作る手間がかかることがあります。

### ボトムアップテストが向く場面

- 共通部品や下位機能を先に固めたい
- 下位モジュールを複数人で並行開発したい
- 基盤機能や計算処理を早く確認したい

ただし、システム全体の処理の流れを確認できるのは比較的遅くなります。また、必要に応じてドライバを作成します。

### 両方を組み合わせる場合

実際の開発では、トップダウンとボトムアップを組み合わせることもあります。

上位側と下位側から同時にテストを進め、中間部分で結合する方法は、**サンドイッチテスト**と呼ばれることがあります。

```text
上位から下へ
＋
下位から上へ
↓
中間で結合
```

## よくある誤解・混同

### 誤解1：トップダウンではドライバを使う

違います。

トップダウンでは上位モジュールがすでにテスト対象として存在し、未完成なのは下位側です。

```text
トップダウン
→ 下位の代用品
→ スタブ
```

### 誤解2：ボトムアップではスタブを使う

違います。

ボトムアップでは下位モジュールを先にテストするため、それを呼び出す上位側の代用品が必要です。

```text
ボトムアップ
→ 上位の代用品
→ ドライバ
```

### 誤解3：ドライバはテスト対象から呼び出される

ドライバは、テスト対象を**呼び出す側**です。

```text
ドライバ
→ 下位モジュールを呼ぶ
```

反対に、スタブは上位モジュールから**呼び出される側**です。

```text
上位モジュール
→ スタブを呼ぶ
```

### 誤解4：ボトムアップでは上位モジュールが完成している必要がある

上位モジュールが未完成でも、ドライバを使えば下位モジュールのテストを進められます。

```text
上位が未完成
→ ドライバで代用
→ 下位をテスト
```

### 誤解5：ボトムアップは開発初期の並行作業が難しい

一般に、下位モジュールを独立して開発・テストできるため、並行作業を進めやすい方法です。

### 試験での選択肢の切り方

| 問題文の表現 | 判断 |
|---|---|
| 上位モジュールから順に確認 | トップダウン |
| 下位モジュールから順に確認 | ボトムアップ |
| 未完成の下位モジュールを代用 | スタブ |
| 下位モジュールを呼び出す | ドライバ |
| 開発初期に全体の流れを確認 | トップダウン |
| 下位モジュールを並行して確認 | ボトムアップ |

## まとめ（試験直前用）

```text
トップダウン
→ 上位から下位へ
→ 下位が未完成
→ スタブ
```

```text
ボトムアップ
→ 下位から上位へ
→ 上位が未完成
→ ドライバ
```

最も大切な切り分けは、次の2点です。

- **スタブは呼び出される下位側の代用品**
- **ドライバはテスト対象を呼び出す上位側の代用品**

一言で覚えるなら、

> **下から試すなら、上から呼ぶドライバが必要。**

です。
