FE EXAM

モジュール強度(凝集度)の7段階

1つのモジュール内の機能のまとまりの強さを示す尺度。

FIGURE
強い(良い)
弱い
強い(良い)弱い7機能的強度1つの機能だけを実行Functional6情報的強度同じデータを扱う複数機能をまとめるInformational5連絡的強度同じデータを使う処理を順に実行Communicational4手順的強度決まった手順で複数処理を実行Procedural3時間的強度同じ時期に行う処理を集めるTemporal2論理的強度似た種類の処理を引数で切り替えLogical1暗号的強度関係のない処理がたまたま同居Coincidental
解説

📌
モジュール強度とは

強い強度中の機能がまとまる弱い強度バラバラに同居

モジュール強度(凝集度)とは、1つのモジュール内の機能のまとまりの強さを示す尺度です。モジュール(=機能ごとに分けたプログラムの部品)の中身が、どれだけ1つの目的に向かってまとまっているかを表します。

中の機能が「同じ目的のためにまとまっている」ほど強度は強く(良く)、「関係のない処理が寄せ集められている」ほど強度は弱く(悪く)なります。凝集度という別名のとおり、中身がどれだけ凝り固まっているか、と考えると分かりやすいです。

身近な例で考えると、引き出しの整理に似ています。1つの引き出しに「文房具だけ」が入っていれば探しやすい(強い強度)のに対し、文房具・薬・電池がごちゃ混ぜだと使いにくい(弱い強度)です。上の図解では、強い順に7段階を並べています。一番上の機能的強度が最も良い状態です。

📌
7段階の意味

モジュール強度は、強い順に7段階に分類されます。上ほど良く、下ほど避けたい状態です。

順位名称意味評価
7機能的強度1つの機能だけを実行良い
6情報的強度同じデータを扱う複数機能をまとめる良い
5連絡的強度同じデータを使う処理を順に実行良い
4手順的強度決まった手順で複数処理を実行避けたい
3時間的強度同じ時期に行う処理を集める避けたい
2論理的強度似た種類の処理を引数で切り替え避けたい
1暗号的強度関係のない処理がたまたま同居避けたい

それぞれの段階を具体的に見ると次のようになります。
機能的強度:たった1つの機能だけを実行する理想形(例:消費税を計算する)
情報的強度:同じデータを扱う複数の機能を1つにまとめたもの
連絡的強度:同じデータを使う処理を順番に実行する
手順的強度:決まった手順で複数の処理を続けて実行する
時間的強度:「起動時」など同じ時期に行う処理を集める(例:初期化処理)
論理的強度:似た種類の処理を引数(=渡す値)で切り替える
暗号的強度:関係のない処理がたまたま同居する最も悪い状態

📌
強い方が良い理由

強い強度役割が明確直しやすい弱い強度役割が曖昧直すと壊れる

モジュール強度は強い方が良いとされます。その理由は、強度が強いモジュールほど次の利点があるからです。
役割が明確:1つの目的に絞られているので、何をする部品か一目で分かる
影響範囲が限定的:修正してもその機能の中で完結し、他に波及しにくい
再利用しやすい:単機能なので別のプログラムでもそのまま使える
テストしやすい:確認すべき動作が1つに絞られる

逆に強度が弱いモジュールは、関係のない処理が同居しているため、1か所直すと無関係な機能まで壊れる恐れがあり、理解も再利用も難しくなります。だからモジュール設計では「できるだけ機能的強度に近づける」ことを目指します。

次のテーマである結合度とセットで「強度は強く、結合度は弱く」が良い設計の合言葉です。強度は強いほど良い、結合度は弱いほど良いと、向きが逆である点に注意しましょう。

📌
凝集度が低いと何が起こるか

暗号的強度(弱い)修正したい箇所他の処理も壊れる無関係な処理まで影響を受ける

凝集度が低いモジュール(弱い強度)には、関係のない処理が同居しています。そこで1か所を直すと、なぜ他も壊れてしまうのか。それは同じモジュール内に混在しているため、変数やデータが意図せず共有されているからです。

身近な例で考えると、ごちゃ混ぜの引き出しから1つ取り出そうとすると他のものも引っかかって出てきてしまう状態です。
修正コストが増える:1か所を直すために他の処理も全部理解し直す必要がある
バグが隠れやすい:どの処理が何に影響しているか把握しにくい
再利用できない:使いたい機能だけ切り出せず、不要な処理まで一緒に持ち込まれる

なぜ機能的強度が理想なのか。それは「1つの機能だけ」を担うモジュールは、修正の影響がそのモジュール内で完結するからです。直したいことだけを安心して直せる。それが保守しやすいプログラムの姿です。

📌
凝集度と結合度は対の概念

モジュールA凝集度:強い(良い)モジュールB凝集度:強い(良い)結合度:弱い(良い)

凝集度(モジュール強度)結合度(モジュール結合度)は、プログラムの設計品質を表す対になる2つの指標です。どちらも「モジュール」という部品の良し悪しを測りますが、見ている場所が違います。

凝集度モジュールの中身のまとまり。「1つの部品の内部がどれだけ1つの目的に統一されているか」
結合度モジュール同士の間のつながり。「2つの部品がどれだけお互いに依存し合っているか」

良い設計の合言葉は「凝集度は強く、結合度は弱く」です。凝集度は強いほど良い(まとまりが高い)、結合度は弱いほど良い(独立性が高い)と、向きが逆であることに注意してください。上の図のように、各モジュールの中身がまとまっていて(凝集度:強い)、かつモジュール同士のつながりが最小限(結合度:弱い)になっている状態が理想です。

練習問題

🎯
基本情報技術者 練習問題

Q1.モジュール強度(凝集度)の説明として最も適切なものはどれか。
A.1つのモジュール内の機能のまとまりの強さを示す尺度
B.モジュール同士の依存の強さを示す尺度
C.モジュールの大きさ(行数)を示す尺度
D.モジュールの実行速度を示す尺度
Q2.最も強度(凝集度)が強いモジュールはどれか。
A.暗号的強度のモジュール
B.論理的強度のモジュール
C.機能的強度のモジュール
D.時間的強度のモジュール
Q3.強度(凝集度)は強い方が良いとされる理由として正しいものはどれか。
A.モジュールの行数を増やせるから
B.モジュールの役割が明確で、保守や再利用がしやすくなるから
C.モジュール同士のつながりを増やせるから
D.実行速度が必ず速くなるから

関連コンテンツ