基本情報技術者 2016年 秋期 午前(科目A) 問49
問題文
階層構造のモジュール群から成るソフトウェアの結合テストを、上位のモジュールから行う。この場合に使用する、下位のモジュールの代替となるテスト用のモジュールはどれか。
選択肢
ア:エミュレータ
イ:シミュレータ
ウ:スタブ(正解)
エ:ドライバ
下位モジュールの代替となるテスト用モジュールはどれか【午前2 解説】
要点まとめ
- 結論:上位モジュールから行うトップダウン結合テストで下位モジュールの代替に使うのはスタブです。
- 根拠:スタブは下位モジュールの簡易実装で、上位からの呼び出しに対して固定応答や簡易処理を返すためテストが可能です。
- 差がつくポイント:ドライバは逆に下位モジュールを呼び出す補助で役割が違い、エミュレータ/シミュレータは環境模倣で用途が異なります。
正解の理由
正解は ウ(スタブ)です。
トップダウン結合テストでは上位モジュールを順にテストし、まだ完成していない下位モジュールの代わりに簡易的な実装(スタブ)を挿入して上位の動作を確認します。スタブは呼び出しを受けて固定値や簡単なロジックで応答するため、上位の処理フローや例外処理を検証できます。これに対してドライバは下位から上位へ呼び出す際に必要な補助モジュールであり、用途が逆です。
トップダウン結合テストでは上位モジュールを順にテストし、まだ完成していない下位モジュールの代わりに簡易的な実装(スタブ)を挿入して上位の動作を確認します。スタブは呼び出しを受けて固定値や簡単なロジックで応答するため、上位の処理フローや例外処理を検証できます。これに対してドライバは下位から上位へ呼び出す際に必要な補助モジュールであり、用途が逆です。
よくある誤解
- スタブとドライバを混同する:トップダウンではスタブ、ボトムアップではドライバを使う点を取り違えやすいです。
- スタブは完全実装だと思う:スタブはあくまで代替であり、詳細なロジックや境界条件は本実装で検証が必要です。
- エミュレータ/シミュレータと同義と考える:これらはハードウェアや環境を模倣するための道具で、結合テストにおける簡易代替とは目的が異なります。
解法ステップ
- 問題文からどの順序で結合テストを行うかを確認(今回は「上位のモジュールから行う」=トップダウン)。
- トップダウンで不足するのは「下位モジュールの代替」であることを把握する。
- 選択肢の役割を想起:スタブ=下位の代替、ドライバ=上位を呼ぶ補助、エミュレータ/シミュレータ=環境模倣。
- 最も適合する「スタブ」を選ぶ。
選択肢別の誤答解説
- ア: エミュレータ — ハードウェアや外部環境をソフトで再現するツールで、モジュール単位の下位代替として使う意図とは異なります。
- イ: シミュレータ — 挙動を模擬する点はあるが、結合テストで下位モジュールの簡易代替として用いる典型解ではありません。用途が主に環境/モデルの再現です。
- ウ: ウ(スタブ) — 正解。トップダウン結合テストで未完成の下位モジュールの代替として、上位の呼び出しに対して固定応答や簡易処理を返す役割を果たします。
- エ: ドライバ — ボトムアップ結合テストで上位モジュールの呼び出しを行うための補助モジュールで、今回の「下位の代替」とは役割が逆です。
補足コラム
- スタブの実装例(簡易):下位モジュールが本来データベースを問い合わせて値を返す関数の場合、スタブは固定値を返して上位ロジックを検証します。
- 長所:上位のロジックや例外処理の確認が容易になり、下位が未完成でもテストを進められます。短所:スタブは簡易実装のため本実装の振る舞いと差があり、最終的な統合時に追加の不具合が出る可能性があります。
- 実務上は自動化フレームワークやモックライブラリを用いてスタブを管理・再利用することが多いです。
例:Pythonでの簡単なスタブ例
# 本来はDBに問い合わせて金額を返す関数
def get_balance_from_db(user_id):
# 本実装ではDBアクセスがあるが、テストではスタブを使う
raise NotImplementedError
# スタブ実装
def stub_get_balance_from_db(user_id):
# 固定のテスト用値を返す
return 1000
# 上位モジュールのテスト時にスタブを差し替える
balance = stub_get_balance_from_db("user123")
assert balance == 1000
FAQ
Q1: スタブとモックの違いは何ですか?
A1: スタブは固定応答や簡易処理を返す代替実装、モックは期待される呼び出し回数や引数などの振る舞いを検証できる、より検証指向の代替です。
A1: スタブは固定応答や簡易処理を返す代替実装、モックは期待される呼び出し回数や引数などの振る舞いを検証できる、より検証指向の代替です。
Q2: トップダウンでドライバを使うケースはありますか?
A2: 基本的にトップダウンでは下位の代替にスタブを使い、ドライバはボトムアップで上位を呼び出す際に使用するため通常は使いません。
A2: 基本的にトップダウンでは下位の代替にスタブを使い、ドライバはボトムアップで上位を呼び出す際に使用するため通常は使いません。
Q3: エミュレータとシミュレータの選び方は?
A3: エミュレータは実機の振る舞いをソフトウェアで再現する場合、シミュレータはモデルに基づく振る舞い再現に使います。結合テストの代替としては目的に応じて選びます。
A3: エミュレータは実機の振る舞いをソフトウェアで再現する場合、シミュレータはモデルに基づく振る舞い再現に使います。結合テストの代替としては目的に応じて選びます。
Q4: スタブでカバーしきれない振る舞いはどう確認する?
A4: 本実装が完成した段階で行う統合テストやシステムテストで実際の振る舞いを検証します。スタブでは境界値・パフォーマンス等はカバーできません。
A4: 本実装が完成した段階で行う統合テストやシステムテストで実際の振る舞いを検証します。スタブでは境界値・パフォーマンス等はカバーできません。
関連キーワード: 結合テスト、スタブ、トップダウン、ドライバ、エミュレータ、シミュレータ、モジュールテスト、単体テスト

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

