モジュール分割とは
モジュール分割とは、ひとつの大きなプログラムを、特定の機能や役割を持った小さくて独立した部品(モジュール)に細かく分ける設計手法のことです。これにより、プログラムの構造が整理され、開発、テスト、修正が格段に行いやすくなります。
モジュール分割を上手に行うための評価基準として、「結合度」と「凝集度(ぎょうしゅうど)」があります。
- 結合度(低い方が良い):モジュール同士の結びつきの強さです。これが低いほど、一つの部品を直したときに他の部品が壊れる連鎖反応を防げます。
- 凝集度(高い方が良い):一つのモジュールの中身が、どれだけ一つの目的に集中しているかです。目的がシンプルなほど、再利用しやすくなります。
つまり、理想の設計は「お互いの依存度は低く(疎結合)、個々の専門性は高い(高凝集)」状態になります。
具体例
家計簿アプリを作る際、すべての処理を1枚のファイルに書くのではなく、以下のように機能別にモジュール(ファイル)を分ける例です。
📁 プログラム全体
├── 📄 db_manager.py # データの保存・読み込みだけを行うモジュール (高凝集)
├── 📄 calculator.py # 合計金額の計算ロジックだけを行うモジュール (高凝集)
└── 📄 main_view.py # 画面を表示するモジュール
※計算モジュールは画面のデザインに依存しないため、他のアプリでも使い回すことができます。(疎結合)
もう少し詳しく
モジュール分割は、大規模で複雑なソフトウェアシステムを、理解しやすく管理しやすい小さなモジュール(独立した処理ブロック)に分割・構成する設計技法です。
モジュール設計の品質を評価するために、以下の2つの特性(メトリクス)が用いられます。
- モジュール結合度(低い方が良い:疎結合): モジュール同士がどれだけ依存し合っているかを示す指標です。結合度が低いと、あるモジュールを変更した際の影響が他のモジュールに及びにくくなり、モジュールの再利用性が高まります。結合度には、引数でデータのみを受け渡す「データ結合(最良)」から、共通のグローバル変数を参照し合う「共通結合」、相手の内部ロジックを直接制御する「内容結合(最悪)」などがあります。
- モジュール凝集度(高い方が良い:高凝集): モジュール内の各処理が、どれだけ一つの共通目的のために集中して関連し合っているかを示す指標です。凝集度が高いほど、そのモジュールの目的が明確になり、バグが入りにくく保守しやすくなります。凝集度には、単一の機能のみを実行する「機能的凝集(最良)」から、同じタイミングで実行する処理をまとめた「時間的凝集」、関連のない処理をただ集めた「暗黙的凝集(最悪)」などがあります。
試験でのポイント
試験では、優れたモジュール設計の条件である「結合度は低く、凝集度は高くする(疎結合・高凝集)」という原則が選択式や正誤問題で非常によく問われます。
また、具体的な結合度のレベル(データ結合、スタンプ結合、制御結合など)や、凝集度のレベル(機能的、情報的、連絡的など)の強弱の順番や、それぞれの定義について正しく理解しているかを判定する問題が出題されます。特に「データ結合は最も望ましい」「共通結合はグローバル変数を使うため好ましくない」といった判断ができるように整理しておきましょう。
関連する用語
関連する用語には、モジュール間の結合度を高める原因となる「グローバル変数」、オブジェクト指向において関連するデータと処理を一つにまとめる「カプセル化」、およびモジュール単位での整合性を検証する「単体テスト」があります。