基本情報技術者 2019年 秋期 午前(科目A) 問46
問題文
モジュール結合度が最も弱くなるものはどれか。
選択肢
ア:一つのモジュールで、できるだけ多くの機能を実現する。
イ:二つのモジュール間で必要なデータ項目だけを引数として渡す。(正解)
ウ:他のモジュールとデータ項目を共有するためにグローバルな領域を使用する。
エ:他のモジュールを呼び出すときに、呼び出したモジュールの論理を制御するための引数を渡す。
##: モジュール結合度が最も弱くなるものはどれか。【午前2 解説】
要点まとめ
- 結論:モジュール間で必要なデータ項目だけを引数として渡す方式(データ結合)が最も結合度が弱く望ましい。
- 根拠:結合度の強さは「内容結合>共通結合>制御結合>スタンプ結合>データ結合>無結合」の順で,データ結合は必要最小限の情報共有で影響範囲を限定するため最も弱い。
- 差がつくポイント:選択肢の文言を「引数の内容が最小か」「グローバル共有か」「制御情報を渡しているか」で見分ければ正答に速く到達できる。
正解の理由
正解は イ です。これは「必要なデータ項目だけを引数として渡す」つまりデータ結合に該当します。データ結合はモジュール間で渡す情報を単純なデータ要素に限定するため、相互依存が最小になりモジュールの独立性が高まります。結合度の分類においてデータ結合は最も“弱い”結合に近く,モジュール変更時の影響範囲も小さく保守性・再利用性が向上します。
よくある誤解
- 「一つのモジュールにまとめれば結合度が弱くなる」という誤解:モジュールを大きくすることで外部との結合は減るが,内部の凝集性や保守性は悪化します。設計上は低結合・高凝集が理想です。
- 「グローバル変数を使えば簡単に連携できるからよい」という誤解:グローバル領域は共通結合で変更時の波及が大きく,強い結合になるため避けるべきです。
- 「引数で制御フラグを渡すのは安全だ」という誤解:制御情報を渡すと制御結合になり呼び出し側と呼び出される側の役割が曖昧になりやすいです。
解法ステップ
- 各選択肢がどの結合度の種類に対応するかを分類する(内容、共通、制御、スタンプ、データ等)。
- 結合度の強弱順(強→弱)を頭に入れて比較する。
- 「必要最小限のデータのみを渡す」形が最も弱いことを確認して回答する。
選択肢別の誤答解説
- ア: 一つのモジュールで多機能を実現する。
- 誤りの理由:モジュールを肥大化させることは外部とのインターフェースを減らすように見えるが,モジュールの凝集性や可読性・保守性を損ない,設計上望ましくない。結合度の観点では「無結合」に近づけるわけではなく,全体最適の観点で評価されない。
- イ: 二つのモジュール間で必要なデータ項目だけを引数として渡す。
- 正解の理由:モジュール間の依存は最小限のデータに限定され,データ結合に当たり最も弱い結合度となる。正解は イ。
- ウ: グローバルな領域でデータ項目を共有する。
- 誤りの理由:共通結合(global/common)は変更の波及が大きく強い結合であり,望ましくない。
- エ: 呼び出したモジュールの論理を制御する引数を渡す。
- 誤りの理由:これは制御結合に相当し,呼び出し側が被呼び出し側の処理詳細を知る必要が出てきて結合が強くなる。
補足コラム
- 結合度(Coupling)はモジュール間の依存関係の強さを示し,低結合はモジュールの独立性と変更容易性を高めます。
- 凝集度(Cohesion)はモジュール内部の関連性の高さを示し,高凝集はモジュールが単一責務を持つことを意味します。理想は「低結合・高凝集」です。
- 実務上は「構造体をまるごと渡す」場合はスタンプ結合(不要なフィールドまで渡される)になり,必要なフィールドだけを渡す方が望ましいです。
FAQ
Q1: データ結合とスタンプ結合の違いは何ですか?
A1: データ結合は必要な基本データ項目(スカラー変数など)だけを渡すこと。スタンプ結合は構造体など複合データを渡すが受け手がその一部しか使わない場合で,余分な依存を生みます。
A1: データ結合は必要な基本データ項目(スカラー変数など)だけを渡すこと。スタンプ結合は構造体など複合データを渡すが受け手がその一部しか使わない場合で,余分な依存を生みます。
Q2: 制御結合は必ず悪いですか?
A2: 必ず悪いわけではありませんが,呼び出し側が被呼び出し側の内部挙動を知る必要が出るため,可能な限り避けデータやインターフェース設計で分離するのが望ましいです。
A2: 必ず悪いわけではありませんが,呼び出し側が被呼び出し側の内部挙動を知る必要が出るため,可能な限り避けデータやインターフェース設計で分離するのが望ましいです。
Q3: 結合度を下げる具体的な手法は?
A3: APIを明確化してパラメータを最小化する,グローバル変数を廃し明示的な引数伝達や戻り値で通信する,責務を分割して高凝集にする,などです。
A3: APIを明確化してパラメータを最小化する,グローバル変数を廃し明示的な引数伝達や戻り値で通信する,責務を分割して高凝集にする,などです。
関連キーワード: モジュール結合度、データ結合、制御結合、共通結合、スタンプ結合、内容結合、高凝集、低結合、モジュール化、ソフトウェア設計

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

