凝集と結合の指標はありますか?


34

McCabe Complexityメジャーに類似したメトリックがあります。これは、ルーチンの凝集と、同じコードベース内の他のコードとの疎結合(または密結合)の度合い測定するためのものですか。


回答:


29

あなたが探しているメトリックは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

...

使用できるのであれば、それは素晴らしいツールです。:)


@OnorioCatenacci問題ありません。:)
Oleksi

残念なことに、彼らはメトリックの計算方法には入りません。
オノリオカテナッチ

3
それとこれかもしれないのヘルプ:aivosto.com/project/help/pm-oo-cohesion.html
Oleksi

好奇心から、その図をどのようにリファクタリングして単一責任原則に従うのですか?brain.setAngry(driver)car.applyBreaks(driver)
フィル

:私は、コードベースの凝集メトリックは真にインタフェースレベルの凝集を示すことができ、さらに悪いプログラミングを促進することができる疑いmortoray.com/2015/04/29/...
EDA-QA MORT-ORA-Y

16
  • 求心性結合:責任の数
  • 遠心性カップリング:依存関係の数
  • 不安定性:遠心性カップリングと総カップリングの比率(求心性+求心性)。

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


@Brianに感謝します。まさに私が見つけたいと思っていたものです。
オノリオカテナッチ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.