基本情報技術者 2013年 秋期 午前(科目A) 問50
問題文
トップダウン方式で結合テストを行うとき、特に必要となるものはどれか。
選択肢
ア:エミュレータ
イ:スタブ(正解)
ウ:デバッガ
エ:ドライバ
トップダウン方式で結合テストを行うとき、特に必要となるものはどれか。【午前2 解説】
要点まとめ
- 結論→トップダウン方式の結合テストでは、上位モジュールから呼び出される下位機能を代替するスタブが特に必要である。
- 根拠→上位から順に統合・検証するため、下位モジュールが未実装や未接続でも上位の振る舞いを確認するには代替実装が必須である。
- 差がつくポイント→スタブは呼び出し応答を簡易に返すことで早期検証を可能にし、ドライバはボトムアップで用いる点を押さえること。
正解の理由
正解: イ(スタブ)
トップダウン方式は上位モジュールから順に統合していく方法です。上位が呼び出す下位モジュールがまだ実装されていない場合や外部接続ができない場合でも、上位のロジックや制御フローを検証する必要があります。スタブは下位モジュールのインタフェースを模擬し、期待される戻り値や簡易の振る舞いを返すことで上位のテストを可能にします。したがって、トップダウンにおいてはスタブが特に重要です。
トップダウン方式は上位モジュールから順に統合していく方法です。上位が呼び出す下位モジュールがまだ実装されていない場合や外部接続ができない場合でも、上位のロジックや制御フローを検証する必要があります。スタブは下位モジュールのインタフェースを模擬し、期待される戻り値や簡易の振る舞いを返すことで上位のテストを可能にします。したがって、トップダウンにおいてはスタブが特に重要です。
よくある誤解
- 「ドライバが必要」と誤解する人が多いが、ドライバは下位モジュールを呼び出す上位の役割を模擬するため、ボトムアップ方式で主に使われる。
- 「エミュレータやデバッガがないとテストできない」と考えがちだが、これらは環境依存の問題解決や解析ツールであり、統合順序に応じた代替モジュール(スタブ/ドライバ)とは目的が異なる。
解法ステップ
- 問題文で「トップダウン方式」とある点を確認する。
- トップダウン方式の統合順序(上位→下位)と、その際に起こる下位モジュール未実装の状況を想起する。
- 代替してテストを続行できるのはスタブ(下位の代替実装)かドライバ(上位の代替実装)かを判定する。
- 上位から統合するので下位の代替が必要=スタブを選ぶ。
選択肢別の誤答解説
- ア: エミュレータ
エミュレータはハードウェアや環境を模倣して実機の代替となることがあるが、統合の順序に直接関係する「下位モジュールの代替」を指すものではない。必須とは限らない。 - イ: スタブ
正解。トップダウンでは下位機能が未実装でも上位の検証を行うため、下位を模擬するスタブが必要である。 - ウ: デバッガ
デバッガは実行時の解析やバグ発見に有用だが、統合のために下位モジュールを代替する役割は持たない。 - エ: ドライバ
ドライバは上位モジュールが未実装のときに下位を呼び出す側を模擬するもので、ボトムアップ方式で使うのが一般的であるためトップダウンでは誤り。
補足コラム
トップダウン方式とボトムアップ方式の使い分けはプロジェクトの進行状況や目的によります。トップダウンはユーザインタフェースや制御ロジックを早期に検証できる利点があり、スタブを使って下位機能を簡易に置き換えます。ボトムアップは基盤となる下位コンポーネントの安定化に向き、ドライバで上位の振る舞いを模擬します。両者を組み合わせた「サンドイッチ(ハイブリッド)方式」も実務ではよく用いられます。スタブは単に固定値を返すだけでなく、異常応答や遅延を模擬して異常系のテストにも使えます。
FAQ
Q1: スタブとモックは同じものですか?
A1: 似ていますが区別されることが多いです。スタブは固定の応答を返す簡易代替で、モックは呼び出しの検証(呼ばれ方の検証)や振る舞いの設定まで行えるテストダブルです。用途に応じて使い分けます。
A1: 似ていますが区別されることが多いです。スタブは固定の応答を返す簡易代替で、モックは呼び出しの検証(呼ばれ方の検証)や振る舞いの設定まで行えるテストダブルです。用途に応じて使い分けます。
Q2: 実務でのスタブ実装例はありますか?
A2: 単純な例は下位APIの戻り値を固定する関数を用意することです。例えばPythonでは次のようになります。
A2: 単純な例は下位APIの戻り値を固定する関数を用意することです。例えばPythonでは次のようになります。
# 下位モジュールのスタブ例
def get_user_profile_stub(user_id):
# 本来はDBや外部APIを呼ぶ処理を模擬して固定の応答を返す
return {"id": user_id, "name": "テスト太郎", "age": 30}
Q3: スタブは本番に残してはいけませんか?
A3: 原則としてテスト用の代替実装は本番に残さず、テストコードやテスト環境のみで使用するべきです。本番では実装済みの本来のモジュールに差し替えます。
A3: 原則としてテスト用の代替実装は本番に残さず、テストコードやテスト環境のみで使用するべきです。本番では実装済みの本来のモジュールに差し替えます。
関連キーワード: トップダウン、結合テスト、スタブ、ドライバ、エミュレータ、デバッガ、インテグレーションテスト、テストハーネス、モック、サンドイッチ方式

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

