情報処理安全確保支援士 2018年 秋期 午前2 問22
問題文
図のような階層構造で設計及び実装した組込みシステムがある。このシステムの開発プロジェクトにおいて、デバイスドライバ層の単体テスト工程が未終了で、アプリケーション層及びミドルウェア層の単体テストが先に終了した。この段階で行うソフトウェア結合テストの方式として、適切なものはどれか。

選択肢
ア:サンドイッチテスト
イ:トップダウンテスト(正解)
ウ:ビッグバンテスト
エ:ボトムアップテスト
🔒 解説は解答すると表示されます
トップダウンテスト【午前2解説】
正解の理由
アプリケーション層とミドルウェア層の単体テストが完了し、下位のデバイスドライバ層が未完了である状況では、上位から順に結合していく方式が合理的です。上位が既に検証済みであり、下位(未完成部分)をスタブやシミュレータで代替しながら統合を進められるため、インタフェースの誤りや上位ロジックの結合不具合を早期に発見できます。したがって選択肢のうちイ(トップダウンテスト)が妥当です。
解法ステップ
- 層ごとの単体テスト完了状況を確認する(上位完了/下位未完了)。
- 「上位が動作確認済みで下位が未完成」のパターンなら、トップダウンを採用することを判断する。
- 未完成の下位モジュールをスタブまたはハードウェアシミュレータで置き換え、上位から順に結合してテストを実行する。
- 下位モジュールが完成したらスタブを実モジュールに差し替え、再結合/回帰テストを行う。
選択肢別の誤答解説
-
ア: サンドイッチテスト
上位と下位の双方から同時に統合を進める混合方式。上位が検証済みで下位が未完成な本問の状況では、下位主導の作業(ボトム側)を同時に回す余地がないため最適とは言えません。テスト資源やドライバ/スタブの準備負荷が増す点に注意。 -
イ: トップダウンテスト(正解)
上位から順に統合していく方式。上位が完成している場合、未完成の下位部分をスタブやシミュレータで代替可能なので、上位ロジックの結合不具合を早期に検出でき、今回の開発進行に最も適合します。 -
ウ: ビッグバンテスト
すべてのモジュールが揃ってから一度に結合してテストする方式。未完成のデバイスドライバがある時点では実行不能で、欠陥局所化も困難になるため不適切です。 -
エ: ボトムアップテスト
下位から順に統合する方式。下位(デバイスドライバ)が未完成であれば開始できないため、今回の状況には合いません。ボトムアップは下位が先に完成している場合に有効です。
よくある誤解
- トップダウンは「上位だけテストする」わけではない:未完成の下位はスタブで代替し、結合インタフェースや上位の振る舞いを検証するための手法です。
- ビッグバンは時間短縮になると思い込みがち:一度に結合すると不具合の原因追跡が難しく、結局手戻りが増えることが多いです。
- サンドイッチ=万能と思わないこと:両方向から進めるため管理・テスト環境の準備が複雑になりやすく、状況に応じて使い分ける必要があります。
補足コラム
組込み開発でトップダウン結合を行う際の実務ポイント:
- スタブ(下位機能の簡易実装)を用意して返値や例外を制御しやすくする。
- 実機が必要な場合はハードウェアシミュレータやハードウェア抽象化層(HAL)を活用してテストを継続する。
- テストハーネスでログを詳細に取り、上位→下位のインタフェース仕様(API呼出し、メッセージ形式、エラーコード)を重点的に検証する。
- 下位モジュールが完成したら、スタブから実モジュールへ段階的に置換して回帰テストを実行する。
簡単なスタブ例(C言語、デバイス読み取り関数の代替):
// 実デバイスが未実装のためテスト用スタブを作成
int device_read(char *buf, int len) {
// 固定データを返すことで上位の処理を検証
const char *sim = "SIM_DATA";
int n = strlen(sim);
if (len < n) return -1;
memcpy(buf, sim, n);
return n;
}
FAQ
Q: 下位が未完成でもトップダウンで完全な結合テストは可能ですか?
A: 完全な実機動作検証は下位実装が必要ですが、トップダウンではインタフェースの整合性や上位ロジックの結合不具合を十分に検出できます。実機固有のタイミングや例外は下位完成後に追加検証します。
A: 完全な実機動作検証は下位実装が必要ですが、トップダウンではインタフェースの整合性や上位ロジックの結合不具合を十分に検出できます。実機固有のタイミングや例外は下位完成後に追加検証します。
Q: スタブとドライバの違いは何ですか?
A: スタブはテスト時に下位機能を模擬する簡易実装で、ドライバは実際のデバイス制御を行う実装です。トップダウンでは下位が未完成なときにスタブを使います。
A: スタブはテスト時に下位機能を模擬する簡易実装で、ドライバは実際のデバイス制御を行う実装です。トップダウンでは下位が未完成なときにスタブを使います。
Q: サンドイッチテストを選ぶべき場面は?
A: 上位と下位の両方が並行して進行し、双方の主要部分が早期に検証される必要があるときに有効です。ただし管理や環境準備は複雑になります。
A: 上位と下位の両方が並行して進行し、双方の主要部分が早期に検証される必要があるときに有効です。ただし管理や環境準備は複雑になります。
関連キーワード: 結合テスト、トップダウンテスト、スタブ、シミュレータ、段階的統合、組込みソフトウェア、テストハーネス、ドライバ代替

\ せっかくなら /
情報処理安全確保支援士を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

