7️⃣

凝集度の7つのレベルって何よ

2023/02/07に公開

凝集度とは

モジュールのまとまり具合に関する指標

※ちなみに凝集度の読み方は「ぎょうしゅうど」です

英名

Cohesion (コヒージョン)

凝集度が高いと?

メンテナンス性が高くなります。
一つのモジュールの中で複数の機能が混在しているより、分割されて機能とモジュールが1対1になっている方がコードは理解しやすく保守しやすいですよね。
また、修正の際に他の部分に影響を与える可能性も減ります。

凝集度の7つの段階(レベル)とは

凝集度は7段階で表すことが出来ます

これを知ることで自分がコードを書く時はもちろん、
コードレビューでも用いる事ができると思います。

各段階をみていこう

凝集度が低い、つまり悪いコードから紹介していきます。

1️⃣暗号的/偶発的凝集 (最悪の状態😈❌)

適当(無作為)に集められたものがモジュールとなっている。
モジュール内の各部分には特に関連性はない

function doAnything() {
    ケーキを焼く;
    犬と散歩をする;
    顔を洗う;
}

2️⃣論理的凝集

論理的に似たようなことをするものを集めたモジュール
または、お互いに関係ない機能の一つを実行するモジュール

function transport() {
    if (晴れ) {
        徒歩で移動;
    } else {
       車で移動;
    }
}

3️⃣時間的凝集

同じようなタイミングで発生する、関係ない機能を集めたモジュール
実行順序を入れ替えても問題ないという特徴があります。

function 寝る前の支度() {
    テレビを消す;
    洗顔をする;
    歯を磨く;
}

4️⃣手続き的凝集 (許容範囲)

処理の流れをそのまま詰め込んだようなモジュール
順番に実行する必要があるという特徴があります。

function 何かを買う() {
    財布を出す;
    残高を確認;
    支払う;
}

5️⃣通信的凝集

同じデータを扱う部分を集めたモジュール

function 本に関することを調べる() {
    本のタイトルを検索;
    本の値段を検索;
    本の著者を検索;
}

6️⃣逐次的凝集

ある部分の出力が別の部分の入力となるような部分を集めたモジュール。
一つのモジュールの中に2つ以上の機能が含まれているが、二つの機能は関連性が高く、その順に処理していくことに意味があるため、一つの関数の中に収まっている状態

function ファイルの処理() {
    ファイルを取得;
    ファイルを変換;
    変換したファイルを保存;
}

7️⃣機能的凝集 (最善の選択👼🌟)

単一のうまく定義されたタスクを実現するモジュール

function 長方形の面積計算() {
    たて ✖️ よこ;
}

まとめ

暗号的/偶発的凝集だけは絶対に避けましょう。
論理的凝集もやってしまいがちなパターンなので要注意です。
凝集度の段階を意識して、保守性の高いコードを書いていきましょう。

参照

https://ja.wikipedia.org/wiki/凝集度

https://embeddedsoftwaremanufactory.blogspot.com/2019/05/

https://note.com/cyberz_cto/n/n26f535d6c575

https://qiita.com/uesho/items/59845b4891e12dfb3def#:~:text=凝集度の種類,表すことが出来ます。&text=1が最も凝集度,なり、低凝集となる。

Discussion