応用情報技術者 2009年 春期 午前2 問47
問題文
結合テストで用いられるスタブの役割はどれか。
選択肢
ア:テストが完了したモジュールの代わりに結合される。
イ:テスト対象のモジュールからの呼出し命令の条件に合わせて、値を返す。(正解)
ウ:テスト対象のモジュールからの呼出し命令の条件に合わせて、テストデータを自動生成する。
エ:テスト対象のモジュールを呼出し命令で呼び出す。
🔒 解説は解答すると表示されます
スタブの役割【午前2解説】
正解の理由
結合テストで使うスタブは、呼び出される側のコンポーネントを代替して、呼出しの条件に応じた戻り値や振る舞いを提供する役割を持ちます。したがって選択肢イ「テスト対象のモジュールからの呼出し命令の条件に合わせて、値を返す」が正しいです。スタブは単に固定値だけを返す場合もありますが、多くの場合は呼出し引数や呼出し順序などの条件に応じて想定される値を返すよう実装され、結合テストで上位/下位モジュールの連携を検証しやすくします。
解法ステップ
- 問題文のキーワードを確認:「結合テスト」「スタブ」。
- スタブの定義を思い出す:呼び出される側を代替し、予め定めた戻り値や振る舞いを提供するテストダブルであること。
- 各選択肢と定義を照合する:
- 呼び出し条件に合わせて値を返す → スタブに合致(イ)。
- その他の選択肢はドライバやモック、テストデータ生成といった別概念に該当するか誤りと判断する。
選択肢別の誤答解説
-
ア: 「テストが完了したモジュールの代わりに結合される。」
- 誤りです。スタブはまだ利用できない、または動作を制御したい呼び出される側を置き換えます。選択肢の表現は「テストが完了したモジュールの代わりに」とあり、意味が逆になっているか曖昧です。スタブは「未完成/未接続の呼び出し先を代替する」役割です。
-
イ: 「テスト対象のモジュールからの呼出し命令の条件に合わせて、値を返す。」
- 正解です。呼出し条件(引数、呼出し順序、状態など)に基づいて想定値を返し、結合テストでの振る舞い検証を容易にします。固定値だけでなく条件に応じた戻り値も実装可能である点を押さえてください。
-
ウ: 「テスト対象のモジュールからの呼出し命令の条件に合わせて、テストデータを自動生成する。」
- 誤りです。テストデータの自動生成は別の専用ツールやライブラリの役割であり、スタブ自体の本質的機能ではありません。モックやスタブは呼出しの振る舞いを模擬するためのテストダブルであり、モックは特に呼出し回数や引数などの振る舞い検証に使います。テストデータ生成と振る舞い検証は用途が異なる点を区別してください。
-
エ: 「テスト対象のモジュールを呼出し命令で呼び出す。」
- 誤りです。これはテストドライバ(テストハーネス、呼び出し側)に相当する説明で、スタブの説明ではありません。スタブは呼び出される側を代替する側の役割です。
よくある誤解
-
スタブは「必ず固定値しか返さない」と思い込む誤解
- 実際には引数や呼出し条件に応じて異なる値を返す設計が一般的で、テストの目的に応じて柔軟に振る舞いを設定できます。
-
モックとスタブを同義にする誤解
- 両者はともにテストダブルですが、一般的な区別は「スタブ:値を返す/振る舞いを模倣する」「モック:呼出しの検証(呼出回数、引数等)に重点を置く」です。どちらを使うかは検証したい観点によります。
-
モックがテストデータの自動生成も担うと考える誤解
- テストデータ自動生成は別種のツールやライブラリの機能であり、モックは主に振る舞い検証用です。
補足コラム
テストダブルの簡単な分類(覚え方)
- Dummy:引数として渡すが使われないオブジェクト
- Stub:呼び出されると決められた値や振る舞いを返す
- Fake:簡易実装(例:インメモリDB)で本物の代替
- Mock:呼出しの検証(回数・引数)に使う
- Spy:実行しつつ呼出し情報を記録する
簡単なスタブの例(Python)
# 本来は外部サービスに問い合わせる関数
def get_price_from_service(product_id):
raise NotImplementedError
# スタブで代替(引数に応じて値を返す)
def stub_get_price(product_id):
prices = {'A': 100, 'B': 200}
return prices.get(product_id, 0)
# テスト対象の関数は外部呼出しを使う
def calculate_total(product_id, quantity, price_getter):
price = price_getter(product_id)
return price * quantity
# 結合テストでは stub_get_price を渡して検証
assert calculate_total('A', 3, stub_get_price) == 300
この例のように、スタブは呼出し条件(product_id)に応じて値を返すことで結合テストを安定化させます。
FAQ
Q. スタブで呼出し回数や引数も検証できますか?
A. 基本的にはスタブは値を返す役割ですが、実装次第で呼出し情報を記録することは可能です。ただし「呼出しの検証」を主目的とする場合はモックやスパイを使う方が設計上明確です。
A. 基本的にはスタブは値を返す役割ですが、実装次第で呼出し情報を記録することは可能です。ただし「呼出しの検証」を主目的とする場合はモックやスパイを使う方が設計上明確です。
Q. いつスタブを使って、いつモックを使うべきですか?
A. 値の戻りを固定・制御して連携を検証したいならスタブ、呼出しの回数や引数など振る舞いを検証したいならモックを選びます。両方併用することも一般的です。
A. 値の戻りを固定・制御して連携を検証したいならスタブ、呼出しの回数や引数など振る舞いを検証したいならモックを選びます。両方併用することも一般的です。
Q. テストデータ自動生成ツールはスタブで代替できますか?
A. いいえ。テストデータ生成は大量・多様なデータを用意するツールの領域で、スタブは呼び出し先の振る舞いを制御する目的で使います。役割が異なるため使い分けが必要です。
A. いいえ。テストデータ生成は大量・多様なデータを用意するツールの領域で、スタブは呼び出し先の振る舞いを制御する目的で使います。役割が異なるため使い分けが必要です。
関連キーワード: スタブ, テストダブル, モック, 結合テスト, テストドライバ, テストデータ生成, スパイ

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

