モジュール強度・モジュール結合度の違い。

モジュール強度とモジュール結合度、名前は似ていますが全く別もので、混ざって覚えてしまうと悲惨なことになってしまいます。

本記事では、2つの違い・詳細について解説して行きます。

モジュール強度・モジュール結合度の概要・違い

まず、それぞれの概要と違いについて説明していきます。

名称説明設計
モジュール強度モジュール内の機能がどれだけ独立しているかを示す強いほど良い
モジュール結合度モジュール間の結合度を示す弱いほど良い

名前は似ていても似て非なるものなので、しっかり確認して勘違いをしないようにしましょう。

モジュール強度

モジュール強度とは、上記の表に記載しているように、モジュール内の機能がどれだけ独立しているかを示す指標です。

凝縮度や結束性とも言います。

モジュール強度が高いとメンテナンス性が向上する、再利用可能な部分が増えるなどのメリットがあります。

モジュール強度は下記の7つの指標があり、機能的強度が最も強度が強く、暗号的強度が最も強度が弱い状態になります。

機能的強度 モジュールと機能が1対1になっている状態。
情報的強度特定のデータ構造と、その操作が1つにまとめられている状態。
連絡的強度連続した機能がまとめられている状態。
手順的強度順番通りに実行される複数の機能がまとめられている状態。
時間的強度実行タイミングが近い複数の機能がまとめられている状態。
論理的強度関係のある複数の機能がまとめられ、引数によってどの機能に分岐されるかが決定する状態。
暗号的強度関連のない複数の機能がまとめれた状態。

それぞれ詳しく説明していきます。

機能的強度

モジュールと機能が1対1になっている状態のもののことを指します。
例えば、計算などの処理を一つにまとめ、モジュール外から見れないようにすることなどが、これに当たります。

機能が中心となり、抽象性が高くなるので独立性が上がります。
※最も強度が強い状態になります。

情報的強度

特定のデータ構造と、その操作が1つにまとめられている状態のことを指します。
例えば、商品と在庫を扱うデータ構造と、商品名の変更・在庫の増減などの操作を一つにまとめること。などがこれに当たります。

データとデータ操作を、独立したものとして捉えることが出来るので、サブプログラムの独立性が上がります。

連絡的強度

連続した機能がまとめられている状態のことを指します。
処理①で使用したデータを、処理②で参照するなど、データの受け渡しや参照を行うものがこれに当たります。

手順的強度

順番通りに実行される複数の機能がまとめられている状態のことを指します。
①の次は②の処理を必ず行うような時に、①②を1つにまとめた時のものがこれに当たります。

時間的強度

実行タイミングが近い複数の機能がまとめられている状態のことを指します。
全く関係の無いAとBの機能があった時に、実行タイミングが近いという理由だけでまとめられたものがこれに当たります。

機能としては全く関係の無いものなので、他のプログラムで再利用することが出来ません。

論理的強度

関係のある複数の機能がまとめられ、引数によってどの機能に分岐されるかが決定する状態のことを指します。
どの機能が呼ばれるかを引数によって判断するので、モジュール単体としての独立性はあまり高くありません。

暗号的強度

関連のない複数の機能がまとめれた状態のことを指します。
この暗号(暗合)は「他人には理解がしにくい」といったマイナスの意味で使われています。

関連のない処理を一つにまとめているので、なにをするモジュールなのか判断がつきません。

モジュール結合度

複数のモジュールの間の結びつきの強さを表す指標になります。
モジュール結合度が弱いほど、モジュール単体の独立性が高くなるので良い状態と言えます。

モジュール結合度には、6つの指標があり、データ結合が最も結合度が弱く、内部結合が最も結合度が強い状態になります。

データ結合引数で単純なデータを渡す。
スタンプ結合引数で構造体などオブジェクトを渡す。
制御結合引数の内容で処理が変わる。
外部結合単一のグローバルデータを参照する。
共通結合 複数のグローバルデータを参照する。
内部結合他のオブジェクトの内部を参照する。

それぞれ詳しく説明していきます。

データ結合

引数で単純なデータを渡す結合方法のことを指します。
例えば、数値、文字列などの単純かつ、単一のデータを受け渡す方法のことです。

単一データなので、他モジュールを意識することなく使用することが出来ます。
これが最も結合度の弱い状態になります。

スタンプ結合

引数で構造体などオブジェクトを渡す結合方法のことを指します。
例えば、商品名と在庫数をまとめたデータ構造を受け渡すなどがこれに当たります。

データ結合と同様に他モジュールを意識することが無いので、結合度が弱くなります。

制御結合

引数の内容で処理が変わるもののことを指します。
データ結合、スタンプ結合と同様に、引数を渡す方式ではありますが、引数の値によって処理が大きく変わってしまうので、結合度が強くなってしまいます。

外部結合

単一のグローバルデータを参照するもののことを指します。
外部で宣言されたグローバル変数を参照するので、他の処理の影響を受けやすくなり、モジュール間の結合度が強くなります。

共通結合

複数のグローバルデータを参照するもののことを指します。
外部結合では、単一のデータを参照していましたが、共通結合は複数のグローバル変数を参照します。
参照する箇所が増えるので、モジュール間の結合度は強くなります。

内部結合

他のオブジェクトの内部を参照するもののことを指します。
グローバル変数や引数を考えす、勝手にアクセスしデータを参照するものになります。

データの受け渡しの概念すら無いので、他のモジュールの影響をもろに受け、モジュール間の結合度が強くなります。
これが最も結合度が強い状態になります。

まとめ

モジュール強度、モジュール結合度それぞれをしっかり理解すれば、名前が似てても間違うことはありません。

どちらもモジュールの独立性に関わる内容ではありますが、独立性を示す指標が違うのでしっかりと覚えておきましょう。

コメント

タイトルとURLをコピーしました