基本情報 2022 サンプル問題 問39:テクノロジ系に関する問題
モジュール結合度が最も弱くなるものはどれか。
- a一つのモジュールで,できるだけ多くの機能を実現する。
- b二つのモジュール間で必要なデータ項目だけを引数として渡す。正答
- c他のモジュールとデータ項目を共有するためにグローバルな領域を使用する。
- d他のモジュールを呼び出すときに,呼び出したモジュールの論理を制御するため の引数を渡す。 - 21 -
AI解説(初心者・標準・上級)
理解度に合わせて3レベルの解説を無料で読めます。
答えは b です。
「結合度」は、モジュール(部品)同士がどれだけ 強くくっついて依存しているか の度合い。
- 弱い結合 = 良い(独立性が高く、変更しても他に影響しにくい)
- 強い結合 = 悪い(1ヶ所いじると他もバグる)
弱くするコツは「必要なデータだけ最小限を渡す」こと。b はまさにそれ。
👉 覚え方:結合度は弱いほうが良い。データだけ最小限に渡せ!
ほかの選択肢:a 1モジュールに機能を詰め込む=凝集度の話(しかも悪い設計)/c グローバル変数で共有=強い結合(共通結合)/d 制御フラグを渡す=制御結合(中くらい)。全部 b より結合度が強い。
なぜこれが正解か
正解は b。モジュール結合度(coupling)は弱いほど良い設計とされ、強さの順に 内容結合 > 共通結合 > 外部結合 > 制御結合 > スタンプ結合 > データ結合(一部教科書はメッセージ結合を最弱と追加)。b は必要なデータ項目だけを引数で受け渡す データ結合 に該当し、最も弱い結合となる。
各選択肢の解説
- a:1モジュールに多機能詰め込みは 凝集度 の話(モジュール強度)であり、結合度の論点ではない。
- b:必要データのみを引数で渡す=データ結合(最弱)。正解。
- c:グローバル領域共有=共通結合(強い)。
- d:制御用の引数で他モジュールの論理を制御=制御結合(中程度)。
覚え方・ひっかけ注意
「内・共・外・制・ス・デ」(強→弱)で語呂暗記。結合度は弱く、凝集度は強く が良い設計の合言葉。同一問題でよく凝集度(機能的凝集が最強)と混同するので分けて覚える。
理論的背景
Myers/Constantine による構造化設計の中心概念。結合度6分類(強→弱):
1. 内容結合:他モジュールの内部に直接ジャンプ/参照(gotoで他関数中に飛ぶ等、最悪)
2. 共通結合:共通領域(グローバル変数)でデータ共有
3. 外部結合:外部宣言された単純変数を共有
4. 制御結合:相手の処理を選択するフラグを渡す
5. スタンプ結合:必要以上のデータ構造(レコード全体)を渡す
6. データ結合:必要最小限のスカラ値だけを渡す(最弱)
対をなす凝集度(機能的>情報的>連絡的>手順的>時間的>論理的>暗合的)と組合せて設計品質を評価する。
現代的拡張
オブジェクト指向では Martin の Afferent/Efferent Coupling や Instability = Ce/(Ca+Ce) で定量化、SOLIDの DIP で抽象に依存させ結合を弱める。マイクロサービスでは コレオグラフィ vs オーケストレーション、イベント駆動アーキテクチャ(EDA)で疎結合化、Bounded Context間の Anti-Corruption Layer で結合悪化を防ぐ。
実務での使われ方
静的解析ツール(SonarQube、NDepend、jdepend)が結合度・凝集度メトリクスを自動計測。リファクタリング(Fowler)の動機づけとして「Feature Envy」「Inappropriate Intimacy」スメル検出が結合度悪化を示唆。コードレビューやアーキテクチャ判定で必修知識。
試験での位置づけ
基本情報では6分類の名称・強弱順・例示の識別が定番。応用情報では凝集度との組合せ評価、レガシーシステム分析でのリファクタリング判断に発展。情報処理技術者試験では「データ結合が最弱」「機能的凝集が最強」を確実に。
選択肢の発展補足
c グローバル変数(共通結合)の弊害:影響範囲不明・並行処理での競合・テスタビリティ低下。代替策はDI(依存性注入)コンテナで明示的依存を可視化。d 制御結合の代替はStrategy パターン等でポリモーフィズム化し、フラグ分岐を消す。
出典:IPA(情報処理推進機構)公式 基本情報技術者試験 2022 サンプル問題 問39/ 公的機関配布資料につき出典明記の上引用。解説は合格ナビによる独自AI解説です。