FE EXAM

スタブ(下位モジュールの代役)

上位モジュールのテストで未完成の下位モジュールを代替する部品。

DIAGRAM
テスト対象(完成)
スタブ(代役)
トップダウンテスト:上位を先に作り、未完成の下位はスタブで代替上位モジュールこれがテスト対象(完成済み)呼び出す固定値を返すスタブ A未完成の下位の代役呼ばれたら決めた値を返すだけスタブ B未完成の下位の代役呼ばれたら決めた値を返すだけ下位がまだできていなくても、上位モジュールのテストを先に進められるスタブ=呼び出される側(下位)のダミー。決めた固定値を返すだけの簡単な部品上位は「ちゃんと呼び出せたか・戻り値を正しく扱えたか」の確認に集中できる
解説

📌
スタブとは

上位(テスト対象)呼び出す側スタブ(代役)スタブ(代役)

スタブとは、結合テストのときに上位モジュールをテストするため、まだできていない下位モジュールの代わりに置く部品です。プログラムは複数のモジュール(=処理のまとまりとなる部品)が呼び出し合って動きます。

上位モジュール(呼び出す側)をテストしたいのに、それが呼び出す下位モジュール(呼び出される側)がまだ完成していない──。そんなとき、本物の下位の代わりに「呼ばれたら決めた値を返すだけ」の簡単な部品を置きます。これがスタブです。

身近な例で考えると、映画撮影の「スタンドイン(代役)」に似ています。主役の照明合わせをしたいのに本人がまだ来ていないとき、立ち位置だけ代役に立ってもらえば撮影準備を進められます。スタブも同じで、下位の本物がなくても上位のテストを先に進めるための代役です。

📌
使う場面

トップダウン:上から下へ作りながらテスト上位(完成)スタブスタブ

スタブが活躍するのは、トップダウンテストのときです。トップダウンテストとは、プログラムの上位(呼び出す側)のモジュールから先に作り、テストしながら下へ進めていく手法です。

このとき問題になるのが、上位はできても下位がまだ完成していない状況です。上位は下位を呼び出さないと動かせないため、開発が止まってしまいます。そこで次のように対処します。
未完成の下位:本物の代わりにスタブを置く
スタブの中身:あらかじめ決めた固定の戻り値(ダミー)を返すだけ
狙い:上位が「正しく呼び出せるか」「戻り値を正しく扱えるか」を確認する

たとえば「商品価格を取得する下位」がまだなくても、スタブが必ず100円を返すようにしておけば、上位の「合計金額を計算する処理」のテストを先に進められます。下位が完成したら、スタブを本物に差し替えるだけです。

📌
ドライバとの違い

項目スタブドライバ
代役にするもの下位モジュール(呼び出される側)上位モジュール(呼び出す側)
テスト対象上位モジュール下位モジュール
使う手法トップダウンテストボトムアップテスト
主な働き呼ばれたら固定値を返す下位を呼び出し結果を受け取る

スタブとよく対比されるのがドライバです。どちらも「未完成のモジュールの代役」ですが、どちら側の代わりをするかが逆になります。

スタブは下位(呼び出される側)の代役で、上位をテストするときに使います。一方ドライバは上位(呼び出す側)の代役で、下位をテストするときに使います。テストしたい対象が上にあるか下にあるかで、必要な代役が決まると覚えると分かりやすいです。

覚え方のコツは、「スタブは下を埋める/ドライバは上から動かす」です。スタブは下位の「中身」を仮に埋める受け身の部品、ドライバは下位を呼び出して「動かす」運転手のような部品、とイメージすると混同しにくくなります。

💡
なぜスタブ(代役)が必要なのか

上位(テスト対象)完成済み下位(未完成)→ テスト止まるスタブ(代役)→ テスト進められる

なぜスタブが必要なのか?それは、上位と下位を並行して開発していると、上位が完成しても下位がまだできていないことがあるからです。

プログラム開発では、すべての部品が一斉に完成するわけではありません。上位の部品が先に完成したとき、下位がないと「呼び出し先がない」という状態になり、テストが止まってしまいます。
本物の下位がない場合:上位を動かせない→テストできない
スタブを置いた場合:「呼ばれたら決めた値を返す」だけのダミーが代わりを務める→上位のテストを先に進められる

スタブを使うことで、開発の待ち時間をなくし、上位と下位を並行して作りながらテストできます。下位が完成したら、スタブを本物に差し替えるだけです。スタブは「本物が来るまでの仮の代役」であり、開発を止めないための道具です。

🗺️
トップダウンとボトムアップの全体像

トップダウンテスト上位(完成)スタブスタブボトムアップテスト下位(完成)ドライバドライバ

結合テストには、モジュールをどの順番でつないでいくかによって大きく2つの進め方があります。スタブとドライバは、それぞれの進め方に対応した道具です。

トップダウンテスト=上位(全体を管理する部分)から先に作り、下へ進める方法。
・上位が先に完成→下位はまだない→スタブ(下位の代役)を使う
・メリット:全体の流れや画面の動きを早い段階で確認できる

ボトムアップテスト=下位(細かい計算・処理をする部分)から先に作り、上へ進める方法。
・下位が先に完成→上位はまだない→ドライバ(上位の代役)を使う
・メリット:個々の処理ロジックを先に確実に固められる

どちらの方法にも一長一短があります。現場では両方を組み合わせたサンドイッチテスト(両側から中間に向かって進める)も使われます。大切なのは「スタブ=下位の代役」「ドライバ=上位の代役」という役割の違いを押さえておくことです。

練習問題

🎯
基本情報技術者 練習問題

Q1.スタブの説明として最も適切なものはどれか。
A.上位モジュールのテストで、未完成の下位モジュールを代替する部品
B.下位モジュールのテストで、未完成の上位モジュールを代替する部品
C.システム全体の性能を測定する専用ツール
D.プログラムの誤りを自動で修正する仕組み
Q2.スタブが使われるテスト手法はどれか。
A.下位から先に作って上へ進めるボトムアップテスト
B.上位から先に作って下へ進めるトップダウンテスト
C.発注者が運用を想定して行う受入テスト
D.完成後に長時間連続稼働させる耐久テスト
Q3.スタブが返す値として一般的なものはどれか。
A.実際に計算した正確な処理結果
B.あらかじめ用意した固定の戻り値(ダミー)
C.ランダムに変化する予測不能な値
D.常にエラーだけを返す

関連コンテンツ