基本情報技術者試験(令和6年)科目A 問11:結合テストにおけるスタブとドライバの役割

FE対策

はじめに

ソフトウェア開発では、個々のモジュールが正しく動作するかを確認する単体テストの後、それらを組み合わせて動作を確認する結合テストが行われる。
結合テストの際、まだ完成していないモジュールの代わりに、仮のテスト用モジュールを用いることがある。

本記事では、基本情報技術者試験(令和6年)科目A 問11 の問題を通じて、結合テストにおけるスタブとドライバの役割を詳しく解説する。


スポンサーリンク
スポンサーリンク

基本情報技術者試験(科目A)問11の問題

試験問題

階層構造のモジュール群から成るソフトウェアの結合テストを,上位のモジュールから行う。この場合に使用する,下位のモジュールの代替となるテスト用のモジュールはどれか。
ア. エミュレーター
イ. シミュレーター
ウ. スタブ
エ. ドライバ


解答と解説

この問題の正解は 「**ウ. スタブ **」 である。では、それぞれの選択肢が何を意味するのか詳しく見ていこう。


1. スタブ(Stub)

スタブ(Stub) は、結合テストにおいて未完成の下位モジュールの代わりとして使用される仮のモジュール である。

スタブの役割

  • トップダウンテスト で使用される。
  • 上位モジュールが下位モジュールを呼び出す場合、まだ開発が完了していない下位モジュールの代わりを務める。
  • 上位モジュールからの呼び出しに対して、適切な戻り値を返す ように設計される。

例えば、顧客情報管理システム を開発中だとしよう。

[顧客管理モジュール] → [データベースアクセスモジュール]
  • 顧客管理モジュール は、データベースアクセスモジュール を通じて顧客情報を取得する。
  • しかし、開発の進行上、まだデータベースアクセスモジュールが未完成 である場合がある。
  • このとき、データベースの代わりに仮のデータを返すスタブ を用意し、顧客管理モジュールの動作をテストする。
public class CustomerDBStub {
    public String getCustomerName(int customerId) {
        return "仮の顧客データ"; // 実際のデータベースアクセスなしで仮の値を返す
    }
}

このように、スタブは下位モジュールの代替となるため、正解は「」 である。


2. 各選択肢の説明

ア. エミュレーター(Emulator)

エミュレーターは、所定のコンピュータや機械装置を模倣するシミュレーターの一種である。

エミュレーター は、あるシステムの動作を他の環境で再現するためのソフトウェアやハードウェア である。

エミュレーターの用途

  • 異なるプラットフォーム上でのソフトウェア実行(例:Windows上でAndroidアプリを動作させるAndroidエミュレーター)
  • 古いシステムの動作環境を再現(例:レガシーシステムを新しい環境で再現)

エミュレーターは結合テストとは関係がないため、誤り である。


イ. シミュレーター(Simulator)

シミュレーターは、現実の事象や業務をモデル化して模擬試験を行う装置やプログラムである。

シミュレーター は、システムやプロセスを模擬し、実際の環境を再現せずに動作をシミュレーションするためのツール である。

シミュレーターの用途

  • 航空機のパイロット訓練(フライトシミュレーター)
  • 自動車の運転訓練(ドライビングシミュレーター)
  • 工場の生産ラインのシミュレーション

ソフトウェアテストの分野では、特定の条件下での動作をシミュレーションする際に使用されるが、結合テストで未完成のモジュールを代替するものではない ため、誤り である。


エ. ドライバ(Driver)

ドライバは、上位モジュールの代替となるテスト用モジュールである。

ドライバ(Driver) は、ボトムアップテスト において、未完成の上位モジュールの代わりを務める仮のモジュール である。

ドライバの役割

  • ボトムアップテスト で使用される。
  • 下位モジュールの動作をテストするために、上位モジュールの代わりを務める。
  • 下位モジュールにテストデータを提供し、動作確認を行う。

例えば、データベースアクセスモジュールのテストを行いたいが、その上位モジュールが未完成の場合、仮の入力を提供するドライバを用意する。

public class TestDriver {
    public static void main(String[] args) {
        CustomerDB db = new CustomerDB();
        System.out.println(db.getCustomerName(1)); // 下位モジュールのテスト
    }
}

このように、ドライバは上位モジュールの代替であり、本問の「下位モジュールの代替」とは異なるため、誤り である。


結合テストにおけるスタブとドライバの違い

テスト手法 役割 使用するモジュール 適用する結合テスト
スタブ(Stub) 下位モジュールの代替 上位モジュールからの呼び出しに応答する トップダウンテスト
ドライバ(Driver) 上位モジュールの代替 下位モジュールをテストするためにデータを提供する ボトムアップテスト

まとめ

今回の試験問題では、「階層構造のモジュール群から成るソフトウェアの結合テストを,上位のモジュールから行う。
この場合に使用する,下位のモジュールの代替となるテスト用のモジュール
」として、「スタブ」(ウ) が正解だった。

ポイントの整理

✔ トップダウンテスト では、下位モジュールの代わりに スタブ を使用する。
✔ ボトムアップテスト では、上位モジュールの代わりに ドライバ を使用する。
✔ エミュレーターやシミュレーターは、ハードウェアやシステムの模擬を目的とするものであり、結合テストには直接関係しない。

これらの違いを理解することで、ソフトウェアテストの概念をより深く理解できるだろう。

コメント