基本情報技術者 2019年 秋期 午前(科目A) 問48
問題文
テストで使用するスタブ又はドライバの説明のうち、適切なものはどれか。
選択肢
ア:スタブは、テスト対象モジュールからの戻り値の表示・印刷を行う。
イ:スタブは、テスト対象モジュールを呼び出すモジュールである。
ウ:ドライバは、テスト対象モジュールから呼び出されるモジュールである。
エ:ドライバは、引数を渡してテスト対象モジュールを呼び出す。(正解)
##: テストで使用するスタブ又はドライバの説明【午前2 解説】
要点まとめ
- 結論:単体テストで使用するドライバは、テスト対象モジュールを引数を渡して実行する呼び出し側の簡易コードである。
- 根拠:スタブとドライバは呼び出し方向が逆で、スタブは被呼び出しの代替、ドライバは呼び出し元の代替という役割の差がある。
- 差がつくポイント:問題文の「呼び出す/呼び出される」のどちらを問うているかを見分ければ、ドライバ=呼び出す側、スタブ=呼び出される側と即答できる。
正解の理由
正解は エ です。ドライバ(driver)は、テスト対象モジュールを単独で実行・検証するために、テスト入力(引数)を与えてそのモジュールを呼び出す「呼び出し側」の簡易プログラムです。選択肢エは「引数を渡してテスト対象モジュールを呼び出す」と明確に記述しており、ドライバの定義に合致します。
よくある誤解
- 「スタブは結果を表示するためのもの」と誤解する人がいるが、スタブは表示用ではなく被呼び出しモジュールの代替として固定の応答や簡易動作を返す。
- 「ドライバとモックを同じもの」と混同しやすいが、モックは振る舞い検証を行うオブジェクト、ドライバは対象モジュールを呼び出すテスト用の呼び出し側で目的が異なる。
- 設問の語尾に注意せず「呼び出す/呼び出される」を取り違えるミスが頻出するため文意確認が重要。
解法ステップ
- 問題文で「スタブ」「ドライバ」のどちらが問われているか(説明対象)を確認する。
- 定義を思い出す:スタブ=被呼び出しの代替、ドライバ=呼び出し側の代替。
- 各選択肢の「呼び出す/呼び出される」「表示する/引数を渡す」などの動詞を当てはめて整合性を確認する。
- 矛盾がある選択肢を除外し、最も定義に一致するものを選ぶ。
選択肢別の誤答解説
- ア: スタブは、テスト対象モジュールからの戻り値の表示・印刷を行う。
- 誤り。スタブは表示目的ではなく、テスト対象が呼び出す依存モジュールの代替として固定応答や簡易動作を提供するものであり、戻り値の「表示・印刷」は役割に含まれない。
- イ: スタブは、テスト対象モジュールを呼び出すモジュールである。
- 誤り。呼び出すモジュール(呼び出し側)の役割はドライバであり、スタブは逆にテスト対象から呼び出される側の代替である。
- ウ: ドライバは、テスト対象モジュールから呼び出されるモジュールである。
- 誤り。これはスタブの説明に該当する。ドライバは呼び出し側(テスト対象を呼ぶ)であり、呼び出される側ではない。
- エ: ドライバは、引数を渡してテスト対象モジュールを呼び出す。
- 正しい。ドライバはテスト対象を実行するための呼び出し側の簡易プログラムで、引数を与えてモジュールの挙動を検証する。
補足コラム
- スタブ/ドライバは「テストダブル(Test Double)」の一種です。テストの方向性によって使い分けます。トップダウン統合テストでは下位モジュールが未実装でも上位をテストするためにスタブを使い、ボトムアップ統合テストでは上位モジュールが未実装でも下位をテストするためにドライバを用います。
- 実務ではモックフレームワークを使ってスタブ的な振る舞いや期待呼び出しの検証を行うことが多く、名称に混乱が生じやすい点に注意してください。
例:Pythonでの簡易スタブとドライバ
# 被呼び出しモジュールの代替(スタブ)
def dependency_stub(x):
return 42 # 固定の応答を返す
# テスト対象モジュール(実際は外部依存を呼ぶ)
def module_under_test(x, dep):
return dep(x) + 1
# ドライバ:テスト対象を呼び出す側(引数を渡す)
def driver():
result = module_under_test(5, dependency_stub)
print("テスト結果:", result)
if __name__ == "__main__":
driver()
FAQ
Q1: スタブとモックの違いは何ですか?
A1: スタブは固定応答や簡易処理を返す代替実装で、呼び出しの副作用や戻り値を提供します。モックは呼び出し自体が期待通りに行われたか(呼び出し回数や引数)を検証できるオブジェクトです。
A1: スタブは固定応答や簡易処理を返す代替実装で、呼び出しの副作用や戻り値を提供します。モックは呼び出し自体が期待通りに行われたか(呼び出し回数や引数)を検証できるオブジェクトです。
Q2: いつドライバを使いますか?
A2: テスト対象モジュールが上位から呼び出される想定で、上位モジュールが未実装・未結合の場合に、テスト対象を単独で実行するためにドライバを作成します(ボトムアップテスト時など)。
A2: テスト対象モジュールが上位から呼び出される想定で、上位モジュールが未実装・未結合の場合に、テスト対象を単独で実行するためにドライバを作成します(ボトムアップテスト時など)。
Q3: ドライバとスタブを同時に使うことはありますか?
A3: はい。統合テストや複雑な単体テストでは、上位側をドライバで呼び出しつつ、下位依存をスタブで置き換えることで対象範囲を限定して検証します。
A3: はい。統合テストや複雑な単体テストでは、上位側をドライバで呼び出しつつ、下位依存をスタブで置き換えることで対象範囲を限定して検証します。
関連キーワード: 単体テスト、スタブ、ドライバ、結合テスト、トップダウン、ボトムアップ、テストダブル、モック、テスト設計

\ せっかくなら /
基本情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

