web-dev-qa-db-ja.com

凝集度とカップリングの測定基準はありますか?

McCabe Complexity measure に類似したメトリックがあり、ルーチンの凝集度を測定し、ルーチンが同じコードベースの他のコードにどの程度緩く(または密に)結合しているかを測定しますか?

34

あなたが探しているメトリックはLCOM4だと思いますが、それはクラスにより多く適用されます。

ソナーはそれをうまく説明しています ここ

... metric:LCOM4(Lack Of Cohesion Methods)は、凝集性クラスの程度を測定します。この指標の解釈は非常に簡単です。値1はクラスに1つの責任(良好)しかないことを意味し、値XはクラスにおそらくXの責任(不良)があることを意味し、リファクタリング/分割する必要があります。

ここには魔法はなく、常識のみです。 Driverクラスの簡単な例を見てみましょう。このクラスには、CarとBrainの2つのフィールドと、drive()、goTo()、stop()、getAngry()、drinkCoffee()の5つのメソッドがあります。これらのコンポーネント間の依存関係グラフを次に示します。関連するコンポーネントには3つのブロックがあるため、LCOM4 = 3なので、クラスには3つの異なる責任があり、単一の責任の原則に違反しているようです。 http://i.stack.imgur.com/2527G.png

...

使えるなら素晴らしいツールです。 :)

29
Oleksi
  • 求心性結合:責任の数
  • 遠心結合:依存関係の数
  • 不安定性:全結合に対する遠心性結合の比率(求心性+遠心性)。

不安定性は、さまざまなコードメトリックツールでサポートされています。

16
Brian