モジュール分割
プログラムを開発する際、一部の機能を部品として切り出したり関連する機能を同じ部品にまとめることがあります。この部品をモジュールと呼び、モジュールに分けることをモジュール分割やモジュール化といいます。
モジュール分割をすることでモジュール単位での設計や実装、機能の共有ができるので開発効率を上げたり、修正や影響範囲の管理がしやすくなり保守性が上がります。一方でモジュール間の連携が重要になるのでモジュールのまとめ方によって設計の良し悪しも変わります。
モジュール分割技法は複数あり、大きくデータの流れで分割する技法とデータの構造で分割する技法の2種類に分かれます。データ処理の流れに基づく分割技法にはSTS 分割TR 分割共通機能分割、データ構造に基づく分割技法にはジャクソン法ワーニエ法があります。
どのようなモジュール分割が良いのかとモジュール分割技法を紹介します。
モジュールの強度と結合度
モジュール分割において重要なのは各モジュールの独立性です。独立性とはモジュールが他のモジュールに依存したり影響を受けないかという度合いです。独立性が高くなれば他のモジュールの修正の影響が少なくなるので保守性が高くなります。
モジュールの独立性はモジュール強度とモジュール結合度から見ることができます。
モジュール強度はモジュール内の構成要素の関連性の強さを表すもので、凝集度ともいいます。
分類 | 説明 | 強度 |
---|---|---|
機能的強度 | 単一の機能だけを持つモジュールです。 | 強 |
情報的強度 | 同一のデータを扱う機能だけをまとめたモジュールです。 | |
連絡的強度 | モジュール内の機能間でデータの受け渡しが発生するモジュールです。 | |
手順的強度 | モジュール内の機能が必ず決められた順番で実行されるモジュールです。 | |
時間的強度 | 処理の開始時や終了時等の特定の時点で必要となる機能をまとめたモジュールです。 | |
論理的強度 | 関連する複数の機能を持ち、引数により実行する機能が選択されるモジュールです。 | |
暗号的強度 | 関連性のない機能をまとめたモジュールです。 | 弱 |
上記の強度の分類では上の機能的強度が最も強度が強く独立性が高く、下の暗号的強度が最も強度が弱く独立性が低いです。
強度が強いモジュールは特定の機能に特化した役割の明確なモジュールになり、強度が弱いモジュールはただファイルサイズを小さくする為に分割したような役割がわかりにくい可読性の低い暗号的なモジュールになります。
モジュール結合度は各モジュール間の関連性の強さを表します。
分類 | 説明 | 結合度 |
---|---|---|
データ結合 | メソッドの引数として文字列や数値のような単純なデータを渡す結合です。 | 低 |
スタンプ結合 | メソッドの引数としてオブジェクトのような構造物を渡す結合です。 | |
制御結合 | メソッドの引数の内容により処理が変わる結合です。 | |
外部結合 | メソッド内でグローバルなデータを1つ参照する結合です。 | |
共通結合 | メソッド内でグローバルなデータを複数参照する結合です。 | |
内容結合 | 他のモジュールの内部情報や処理結果を直接参照する結合です。 | 高 |
上記の結合度の分類では上のデータ結合が最も結合度が低く独立性が高く、下の内容結合が最も結合度が高く独立性が低いです。
グローバルなデータとはどのモジュールからでも参照できる共通のデータです。結合度が低いモジュールはデータの受け渡しが容易で呼び出しやすく、結合度が高いモジュールは他のモジュールや処理に依存しモジュール外の変更の影響を受けやすくなります。
モジュール強度が高くモジュール結合度が低い独立性の高いモジュールは呼び出しやすく修正時の保守性も高く好ましい設計になります。
STS 分割
STS 分割はデータ処理の流れでモジュールを分割する技法です。
プログラムの処理は入力、変換、出力から構成されると考え、入力は源泉 (Source)、変換は変換 (Transform)、出力は吸収 (Sink)として分割します。分割の基準は最大抽象入力点という入力データといえない点まで抽象化される地点と最大抽象出力点という初めて出力データといえる形になる地点で、この2点で分割したモジュールを上位に制御モジュールを配置して管理します。
TR 分割
TR 分割はトランザクション毎にモジュールを分割する技法です。トランザクションとはプログラム内の関連する一連の処理のまとまりを表し、一連の処理の流れ毎にモジュールに分割します。
共通機能分割
共通機能分割はプログラム内の複数箇所から利用する機能を共通のモジュールとして分割する技法です。はじめに他の技法でモジュール分割し、複数モジュールに共通する処理を共通モジュールとしてまとめ、プログラム内の様々な場所から呼び出せるようにします。
ジャクソン法
ジャクソン法 (JSP) はデータ構造でモジュール分割する技法です。
入力データと出力データの構造が明確になれば必然的にプログラム全体の構造が決まるという考えを基にモジュール分割します。ジャクソン法ではデータ構造とプログラム構造を階層的木構造 (JSP 木) で表現し基本連続繰返し選択の要素を組み合わせて表現します。
ワーニエ法
ワーニエ法はデータ構造でモジュールを分割する技法です。入力データ構造とデータをどのように扱うかを分析しプログラム構造を決めてモジュール分割します。
データをいつ、どこで、何回、扱うかに着目し順序選択繰返しの制御構造を組み合わせて表現します。プログラムの基本論理構造はスタート部、処理部、エンド部から成り立ちます。