上位モジュールのテストで未完成の下位モジュールを代替する部品。
スタブとは、結合テストのときに上位モジュールをテストするため、まだできていない下位モジュールの代わりに置く部品です。プログラムは複数のモジュール(=処理のまとまりとなる部品)が呼び出し合って動きます。
上位モジュール(呼び出す側)をテストしたいのに、それが呼び出す下位モジュール(呼び出される側)がまだ完成していない──。そんなとき、本物の下位の代わりに「呼ばれたら決めた値を返すだけ」の簡単な部品を置きます。これがスタブです。
身近な例で考えると、映画撮影の「スタンドイン(代役)」に似ています。主役の照明合わせをしたいのに本人がまだ来ていないとき、立ち位置だけ代役に立ってもらえば撮影準備を進められます。スタブも同じで、下位の本物がなくても上位のテストを先に進めるための代役です。
スタブが活躍するのは、トップダウンテストのときです。トップダウンテストとは、プログラムの上位(呼び出す側)のモジュールから先に作り、テストしながら下へ進めていく手法です。
このとき問題になるのが、上位はできても下位がまだ完成していない状況です。上位は下位を呼び出さないと動かせないため、開発が止まってしまいます。そこで次のように対処します。
・未完成の下位:本物の代わりにスタブを置く
・スタブの中身:あらかじめ決めた固定の戻り値(ダミー)を返すだけ
・狙い:上位が「正しく呼び出せるか」「戻り値を正しく扱えるか」を確認する
たとえば「商品価格を取得する下位」がまだなくても、スタブが必ず100円を返すようにしておけば、上位の「合計金額を計算する処理」のテストを先に進められます。下位が完成したら、スタブを本物に差し替えるだけです。
| 項目 | スタブ | ドライバ |
|---|---|---|
| 代役にするもの | 下位モジュール(呼び出される側) | 上位モジュール(呼び出す側) |
| テスト対象 | 上位モジュール | 下位モジュール |
| 使う手法 | トップダウンテスト | ボトムアップテスト |
| 主な働き | 呼ばれたら固定値を返す | 下位を呼び出し結果を受け取る |
スタブとよく対比されるのがドライバです。どちらも「未完成のモジュールの代役」ですが、どちら側の代わりをするかが逆になります。
スタブは下位(呼び出される側)の代役で、上位をテストするときに使います。一方ドライバは上位(呼び出す側)の代役で、下位をテストするときに使います。テストしたい対象が上にあるか下にあるかで、必要な代役が決まると覚えると分かりやすいです。
覚え方のコツは、「スタブは下を埋める/ドライバは上から動かす」です。スタブは下位の「中身」を仮に埋める受け身の部品、ドライバは下位を呼び出して「動かす」運転手のような部品、とイメージすると混同しにくくなります。
なぜスタブが必要なのか?それは、上位と下位を並行して開発していると、上位が完成しても下位がまだできていないことがあるからです。
プログラム開発では、すべての部品が一斉に完成するわけではありません。上位の部品が先に完成したとき、下位がないと「呼び出し先がない」という状態になり、テストが止まってしまいます。
・本物の下位がない場合:上位を動かせない→テストできない
・スタブを置いた場合:「呼ばれたら決めた値を返す」だけのダミーが代わりを務める→上位のテストを先に進められる
スタブを使うことで、開発の待ち時間をなくし、上位と下位を並行して作りながらテストできます。下位が完成したら、スタブを本物に差し替えるだけです。スタブは「本物が来るまでの仮の代役」であり、開発を止めないための道具です。
結合テストには、モジュールをどの順番でつないでいくかによって大きく2つの進め方があります。スタブとドライバは、それぞれの進め方に対応した道具です。
トップダウンテスト=上位(全体を管理する部分)から先に作り、下へ進める方法。
・上位が先に完成→下位はまだない→スタブ(下位の代役)を使う
・メリット:全体の流れや画面の動きを早い段階で確認できる
ボトムアップテスト=下位(細かい計算・処理をする部分)から先に作り、上へ進める方法。
・下位が先に完成→上位はまだない→ドライバ(上位の代役)を使う
・メリット:個々の処理ロジックを先に確実に固められる
どちらの方法にも一長一短があります。現場では両方を組み合わせたサンドイッチテスト(両側から中間に向かって進める)も使われます。大切なのは「スタブ=下位の代役」「ドライバ=上位の代役」という役割の違いを押さえておくことです。