基本情報技術者 2017年 秋期 午前(科目A) 問48
問題文
モジュール結合度が最も弱くなるものはどれか。
選択肢
ア:一つのモジュールで、できるだけ多くの機能を実現する。
イ:二つのモジュール間で必要なデータ項目だけを引数として渡す。(正解)
ウ:他のモジュールとデータ項目を共有するためにグローバルな領域を使用する。
エ:他のモジュールを呼び出すときに、呼び出したモジュールの論理を制御するための引数を渡す。
モジュール結合度が最も弱くなるものはどれか。【午前2 解説】
要点まとめ
- 結論→モジュール結合度が最も弱いのは「必要なデータ項目だけを引数として渡す」データ結合で、依存が最小化されます。
- 根拠→引数で必要最小限のプリミティブ(個々のデータ項目)だけを渡すと実装の詳細が隠蔽され変更影響が局所化されます。
- 差がつくポイント→構造体やグローバル、制御フラグを渡すと結合が強くなり、保守性・テスト容易性で差が出ます。
正解の理由
正解: イ
選択肢イは「二つのモジュール間で必要なデータ項目だけを引数として渡す」ことを示しており、これは「データ結合」に相当します。データ結合はモジュール間で渡される情報が最小限かつ明確であり、モジュール内部の実装に対する依存度が最小化されるため、結合度が最も弱い(望ましい)形式です。よってモジュールの独立性・保守性が高くなり正解となります。
選択肢イは「二つのモジュール間で必要なデータ項目だけを引数として渡す」ことを示しており、これは「データ結合」に相当します。データ結合はモジュール間で渡される情報が最小限かつ明確であり、モジュール内部の実装に対する依存度が最小化されるため、結合度が最も弱い(望ましい)形式です。よってモジュールの独立性・保守性が高くなり正解となります。
よくある誤解
- 「引数を渡す=良い」と単純に考え、何でもまとめて構造体やオブジェクトを渡すとスタンプ結合になり結合度が強くなる点を見落とす。
- グローバル変数は「共有すれば簡単」と誤認しがちだが、共通結合は変更時の影響範囲が広がり欠陥追跡が困難になる。
- 制御フラグを引数に渡すと「ただのデータ」と思い込み、実際は制御結合となってモジュール間の挙動依存が発生することを見落とす。
解法ステップ
- 各選択肢が示すやり方を「どの結合タイプ」に対応するかに読み替える(データ結合・スタンプ結合・共通結合・制御結合など)。
- 結合度の強弱の一般的順序(弱い→強い)を思い出す:データ結合 < スタンプ結合 < 制御結合 < 共通結合 < 内容結合(最強) 。
- 最も弱い(依存が少ない)ものがあればそれを選ぶ。ここでは必要最小限のデータ渡し=データ結合が最適。
選択肢別の誤答解説
- ア: 一つのモジュールで多機能を実現する。
- モジュール分割が不十分で内部結合や責務の肥大化を招き、結果として変更時の影響範囲が大きくなり結合度は低くならない。
- イ: 二つのモジュール間で必要なデータ項目だけを引数として渡す。
- 必要最小限の情報交換により、データ結合となり結合度が最も弱くなるため正解。
- ウ: 他のモジュールとデータ項目を共有するためにグローバルな領域を使用する。
- これは共通結合(global/common coupling)に該当し、複数モジュールが同じ領域に依存するため変更影響が広がり強い結合となる。
- エ: 呼び出すモジュールの論理を制御するための引数を渡す。
- 制御フラグなどを渡すと制御結合となり、呼び出し側が被呼び出し側の内部の振る舞いを制御するため結合が強くなる。
補足コラム
- データ結合 vs スタンプ結合の違い:
- データ結合は個々の必要項目(例えば int x, int y)を渡す。
- スタンプ結合はレコードや構造体を丸ごと渡すことで、必要でないフィールドまで依存してしまい結合がやや強くなる。
- 実装例(Pythonでのイメージ)
# データ結合(好ましい)
def add(x, y):
return x + y
# スタンプ結合(構造体/辞書を渡す)
def process(point):
# point は {'x':..., 'y':..., 'label':...} 等を含む可能性がある
return point['x'] + point['y']
# 共通結合(グローバル)
GLOBAL_CONFIG = {'threshold': 10}
def check(v):
return v > GLOBAL_CONFIG['threshold']
実務的には「必要最小限のデータを明確なインタフェースで渡す」設計を心がけ、グローバル共有や制御フラグの多用は避けます。
FAQ
Q1: スタンプ結合は悪い結合ですか?
A1: 絶対に悪いわけではありませんが、必要でないフィールドまで依存を生むためデータ結合より保守性が劣ります。設計次第で許容されます。
A1: 絶対に悪いわけではありませんが、必要でないフィールドまで依存を生むためデータ結合より保守性が劣ります。設計次第で許容されます。
Q2: 引数にオブジェクトを渡すと常にスタンプ結合ですか?
A2: オブジェクトの中身すべてに依存する場合はスタンプ結合ですが、メソッド呼び出しや明確なDTOを使って必要データだけを抽象化すればデータ結合に近づけられます。
A2: オブジェクトの中身すべてに依存する場合はスタンプ結合ですが、メソッド呼び出しや明確なDTOを使って必要データだけを抽象化すればデータ結合に近づけられます。
Q3: 制御フラグを使うなと言われますが、どう代替すればよいですか?
A3: フラグで挙動を切り替える代わりに別の関数/メソッドを用意する、または戦略パターンなどで振る舞いを分離するとよいです。
A3: フラグで挙動を切り替える代わりに別の関数/メソッドを用意する、または戦略パターンなどで振る舞いを分離するとよいです。
関連キーワード: 結合度、データ結合、スタンプ結合、制御結合、共通結合、グローバル変数、引数設計、モジュール設計、ソフトウェア保守性、インタフェース設計

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

