対象試験と出題頻度

スタブは、基本情報技術者・応用情報技術者で出題されるテーマです。

モジュール結合テスト(特にトップダウンテスト)の文脈で、ドライバとの役割の違いを問う形式で頻出します。

「上から下か、下から上か」を取り違えると一発で失点する典型的なひっかけポイントです。

詳細をクリックして確認
対象試験:
基本情報技術者
応用情報技術者
出題頻度:
★★★☆☆
ランクB(標準)覚えておくと有利

用語の定義

情報処理試験を勉強していると、「スタブって結局なんの代わり?ドライバとどっちが上?」と混乱しがちです。ここだけは確実に押さえてください。

スタブ(Stub)とは、一言で言うと

 「上位モジュールをテストするときに、まだ未完成の下位モジュールの代わりを務める仮の部品

のことです。

イメージとしては、舞台稽古で本番の小道具がまだ届かないとき、段ボールで作った代用品です。

段ボールの剣でも「主役が剣を抜くシーン」のリハーサルはできます。本物の剣の完成を待たなくても、主役の演技確認は先に進められるわけです。

スタブもこれと同じで、下位モジュールが未完成でも上位モジュールの動作確認を先行させるための「中身は空っぽでもいい代用品」です。

📊 スタブの基本情報

項目 内容
英語名 Stub
使われる工程 モジュール結合テスト(トップダウンテスト)
代わりを務める対象 未完成の下位モジュール
対になる用語 ドライバ(Driver)

解説

大規模なソフトウェアは、複数のモジュールが上下の階層構造でつながっています。上位モジュールが下位モジュールを呼び出して結果を受け取る、という関係です。

ここで問題になるのが、すべてのモジュールが同時に完成するわけではないという現実です。上位から先に作る方針のチームでは、上位を試そうとした瞬間に「呼び出し先がまだ無い」という壁にぶつかります。

この空白を埋める仮部品こそがスタブです。呼び出されたら決め打ちの値を返すだけの単純な実装で構いません。

図解:トップダウンテストにおけるスタブの位置

トップダウンテスト:上位は本物、下位はスタブで代用

A:上位モジュール(テスト対象・本物)
↓ 呼び出し ↓
B:スタブ(仮)
C:スタブ(仮)

▲ 本物のB・Cが未完成でも、Aの動作確認を先行できる

スタブとドライバの役割分担

結合テストの仮部品にはスタブとドライバの2種類があり、テストの進め方で使い分けます。

仮部品 代わりを務める対象 使われるテスト方式
スタブ 下位モジュール トップダウンテスト(上から順にテスト)
ドライバ 上位モジュール ボトムアップテスト(下から順にテスト)

覚え方:「スタブは下(した)」「ライバはうやって動かすか上から命令」

スタブの中身はこんなコード

スタブの実装は驚くほどシンプルです。本物の処理を一切せず、想定通りの戻り値を返すだけで済みます。

# 本物の下位モジュール(未完成)の代わりに用意するスタブ

def get_user_balance(user_id):

# 本来はDBから残高を取得する処理だが、まだ未実装

# テストを進めるため、固定値を返すだけにする

return 10000 # 常に10000円を返す

呼び出し元(上位モジュール)から見れば、本物のDB処理が完成していなくても「残高1万円」という応答が返ってくるので、その後の判定ロジックを動かして検証できます。

💡 スタブの核心を3行で

・上位モジュールのテスト時に、未完成の下位モジュールの代役を務める仮部品
・トップダウンテストで使われる(ボトムアップで使うのはドライバ)
・実装は固定値を返すだけのシンプルなものでよい

では、この用語が試験でどのように出題されるか見ていきましょう。


試験ではこう出る!

スタブは、FE・APの午前問題でドライバとの対比形式で繰り返し出題されてきました。出題パターンはほぼ一択で、「どちらが上位/下位の代わりか」を入れ替えたひっかけです。

📊 過去問での出題実績

試験回 出題内容 問われたポイント
FE H30秋
午前 問49
トップダウンテストで使うテスト用モジュールの説明として正しいものを選ぶ。 ・正解は「上位モジュールから呼び出される下位モジュールの代替」
・ドライバの説明文がひっかけ
AP H29春
午前 問47
スタブを使うテスト方式を選ぶ問題。 ・正解は「トップダウンテスト」
・ボトムアップ・ビッグバン・サンドイッチ法がひっかけ
FE R元秋
午前 問46
スタブとドライバの役割を入れ替えた選択肢から正しいものを選ぶ。 ・「スタブ=下位の代わり」が定型キーワード
・主語の入れ替えに注意

📝 IPA試験での出題パターン

パターン1:「役割の説明を選べ」
「上位モジュールから呼び出される未完成の下位モジュールの代わり」が正解。ひっかけは「下位から呼ばれる上位の代わり」(これはドライバ)。主語と目的語を入れ替えただけの選択肢が並ぶので、落ち着いて方向を確認すること。

 

パターン2:「使われるテスト方式を選べ」
正解は「トップダウンテスト」。ボトムアップテストはドライバを使う方式なので即除外。「ビッグバンテスト」「サンドイッチテスト」も選択肢に並ぶことがあるが、仮部品を使うのは前2者の組み合わせだけと押さえれば迷わない。

 

出題範囲はここまででOKです。スタブの内部実装の詳細やモック(Mock)との違いは試験では深追いされないため、深入りは不要です。


【確認テスト】理解度チェック

ここまでの内容を理解できたか、簡単なクイズで確認してみましょう。


Q. ソフトウェアの結合テストで使われる「スタブ」の説明として、最も適切なものはどれでしょうか?

  • A. トップダウンテストで、テスト対象の上位モジュールから呼び出される、未完成の下位モジュールの代わりとなる仮のモジュール。
  • B. ボトムアップテストで、テスト対象の下位モジュールを呼び出す、未完成の上位モジュールの代わりとなる仮のモジュール。
  • C. すべてのモジュールを一度に結合してテストする際に、入出力の境界を仮想化するためのテストデータ生成ツール。

正解と解説を見る

正解:A

解説:
スタブは、上位モジュールから呼び出される下位モジュールが未完成のときに、その代役として用意される仮のモジュールです。トップダウンテストとセットで使われる点が最大のキーワードです。

選択肢Bはドライバの説明です。下位モジュールを呼び出す上位の代役で、ボトムアップテストで使う仮部品なので、スタブとは役割の方向が真逆です。選択肢Cはビッグバンテストとも異なる、実在しない作り話の説明です。スタブはテストデータ生成ツールではなく、呼び出されたら決め打ちの値を返すモジュールそのものです。


よくある質問(FAQ)

Q. スタブとモック(Mock)はどう違いますか?

どちらもテスト用の代用品ですが、目的が異なります。スタブは「呼び出されたら決まった値を返す」ことだけを担う受け身の代用品です。一方モックは「どう呼び出されたか(引数や回数)を記録し、想定通りの呼び出しが行われたかを検証する」役割まで持ちます。IPA試験ではこの区別までは問われないため、「スタブは値を返すだけのシンプル版」と覚えておけば十分です。

Q. 「サンドイッチテスト」では仮部品はどう使い分けますか?

サンドイッチテスト(折衷テスト)はトップダウンとボトムアップを並行して進める方式で、両方の仮部品を併用します。中間層から上をテストするときは下位の代役を、中間層から下をテストするときは上位の代役を用意し、両側から中央へ寄っていくイメージです。実務では大規模システムで採用されることがあります。

Q. RPC(遠隔手続呼出し)の文脈で出てくる「スタブ」は同じものですか?

名前は同じですが意味が異なります。RPCにおけるスタブは、ネットワーク越しのリモート呼び出しをローカル関数呼び出しのように見せかける橋渡し役のコードを指します。テスト用の仮部品とは別概念なので、文脈で判別してください。基本情報・応用情報の開発技術分野で「スタブ」と出てきた場合は、ほぼテスト用の代役を指していると判断して問題ありません。

Q. なぜわざわざスタブを作るのでしょうか?本物が完成するまで待てばいいのでは?

下位モジュールの完成を待つと、上位の不具合発見が遅れます。テストは早く回すほど修正コストが下がる(シフトレフト)ため、未完成部分を仮部品で埋めてでも上位を検証する価値があります。また、外部API・決済システムなど「実際には呼び出したくない処理」を持つ下位モジュールでは、スタブで代替することで安全かつ高速にテストを反復できます。