基本情報技術者 2024年 科目A 問11
問題文
階層構造のモジュール群から成るソフトウェアの結合テストを、上位のモジュールから行う。この場合に使用する、下位のモジュールの代替となるテスト用のモジュールはどれか。
選択肢
ア:エミュレータ
イ:シミュレータ
ウ:スタブ(正解)
エ:ドライバ
🔒 解説は解答すると表示されます
スタブ【午前解説】
正解の理由
上位モジュールから結合テストを行う(トップダウン方式)際に、まだ実装されていないかテストしにくい下位モジュールの代替として用いるのがウの「スタブ」です。スタブは呼び出し元から見て必要十分なインタフェースを持ち、固定値や簡易な振る舞いを返すことで上位モジュールの動作確認を可能にします。ドライバは逆に下位モジュールを呼び出すための上位側の代替(ボトムアップ方式で使う)であり、エミュレータ/シミュレータはより広範な環境やハードウェアの模倣を意図するため目的が異なります。
解法ステップ
- 問題文から「上位モジュールから結合テストを行う(トップダウン)」を読み取る。
- トップダウンで必要なのは「下位モジュールの代替」であることを確認する。
- 各選択肢の定義を照らし合わせる:
- スタブ:下位を代替して簡易応答を返すモジュール(適合)
- ドライバ:上位モジュールの代替(不適)
- エミュレータ/シミュレータ:環境や振る舞い全体の模倣(目的が異なる)
- 最も該当するのはスタブであると判断する。
選択肢別の誤答解説
- ア: エミュレータ
- ハードウェアや別プラットフォームの振る舞いを再現するソフトウェア。テストで使うことはあるが、トップダウンで単に下位モジュールの振る舞いだけを置き換える「スタブ」とは用途が異なる。エミュレータはサイズや複雑さが大きく、単純な応答を返すための代替には過剰。
- イ: シミュレータ
- 実世界やシステムの挙動を模擬するためのツール。シミュレーション対象が大きく、結合試験で下位モジュールを単純に置換するという目的には直接合致しない。
- エ: ドライバ
- 下位モジュールをテストするために上位の呼び出しをエミュレートする「テストハーネス」。これはボトムアップ方式の結合テストで用いるため、トップダウンで下位を代替する目的とは逆である。
- ウ: スタブ(正解の意図)
- 上位→下位の順に結合テストする際、下位の代替として最も適切。インタフェースを満たしつつ簡易な戻り値やダミー処理を行う。
よくある誤解
- スタブとモックを混同する:スタブは返り値や簡単な処理を固定的に提供するのに対し、モックは呼び出し回数や順序などの振る舞い検証を行えることが多い。目的に応じて使い分ける必要があります。
- ドライバがスタブと同様に下位を置き換えると思う:ドライバは上位の代替で、テストの呼び出し役を務めます。方向(誰を代替するか)を間違えると誤答しやすいです。
- エミュレータ/シミュレータを「簡易な代替」と考える:これらは広範囲な振る舞い再現を目指すため、単純な下位モジュールの代替としては過剰で扱いが難しいことが多いです。
補足コラム
トップダウン結合テストでは、実装未完の下位モジュールがある場合にスタブを用いて上位モジュールのロジックやインタフェースを検証します。テスト段階に応じて以下を使い分けます。
- スタブ:下位を簡易に置換(トップダウン)
- ドライバ:上位を簡易に置換(ボトムアップ)
- モック:振る舞い検証を重視
- エミュレータ/シミュレータ:環境全体やハードの再現が必要なとき
例:Pythonで下位関数をスタブ化する簡単な例
# 本来の下位関数(未実装や呼び出しコストが高い)
def calc_tax(amount):
raise NotImplementedError
# テスト中のスタブ
def stub_calc_tax(amount):
# 簡易ルールで固定値を返す
return amount * 0.1
# 上位モジュールは同じインタフェースを利用できる
def process_payment(amount, tax_func):
tax = tax_func(amount)
return amount + tax
# テスト
assert process_payment(1000, stub_calc_tax) == 1100
FAQ
Q: スタブとモックはどちらを使うべきですか?
A: 単に上位モジュールを動かして戻り値での分岐を試したいならスタブで十分です。呼び出し回数や呼び出し順序などインタラクションを検証したい場合はモックが適します。
A: 単に上位モジュールを動かして戻り値での分岐を試したいならスタブで十分です。呼び出し回数や呼び出し順序などインタラクションを検証したい場合はモックが適します。
Q: スタブはどの程度まで本物の振る舞いを再現すべきですか?
A: テストの目的に依存します。上位のロジック検証が目的なら最低限の戻り値や簡易エラー応答を再現すれば良く、過度に本物に合わせるとメンテナンス負荷が増えます。
A: テストの目的に依存します。上位のロジック検証が目的なら最低限の戻り値や簡易エラー応答を再現すれば良く、過度に本物に合わせるとメンテナンス負荷が増えます。
関連キーワード: 結合テスト、トップダウン、スタブ、ドライバ、モック、テストハーネス、エミュレータ、シミュレータ、インタフェース検証

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

