Gibt es Metriken für Kohäsion und Kopplung?

Antworten:

29

Ich denke, die Metrik, nach der Sie suchen, ist LCOM4, ​​obwohl sie eher für Klassen gilt.

Sonar erklärt es hier schön :

... Metrik: LCOM4 (Mangelnde Kohäsionsmethoden) zur Messung der Kohäsionsklassen. Die Interpretation dieser Metrik ist ziemlich einfach, da Wert 1 bedeutet, dass eine Klasse nur eine Verantwortung (gut) hat und Wert X bedeutet, dass eine Klasse wahrscheinlich X Verantwortlichkeiten (schlecht) hat und überarbeitet / aufgeteilt werden sollte.

Hier gibt es keine Magie, nur gesunden Menschenverstand. Nehmen wir ein einfaches Beispiel mit der Klasse Driver. Diese Klasse hat zwei Felder: Auto und Gehirn und fünf Methoden: drive (), goTo (), stop (), getAngry () und drinkCoffee (). Hier ist das Abhängigkeitsdiagramm zwischen diesen Komponenten. Es gibt drei Blöcke verwandter Komponenten, also LCOM4 = 3, sodass die Klasse drei verschiedene Verantwortlichkeiten zu haben scheint und das Prinzip der Einzelverantwortung verletzt. http://i.stack.imgur.com/2527G.png

...

Es ist ein großartiges Werkzeug, wenn Sie es verwenden können. :)

Oleksi
quelle
@OnorioCatenacci Kein Problem. :)
Oleksi
Nur zu dumm, dass sie nicht wissen, wie sie die Metrik berechnen.
Onorio Catenacci
3
Dies könnte helfen mit , dass: aivosto.com/project/help/pm-oo-cohesion.html
Oleksi
Wie würden Sie aus Neugier das Diagramm umgestalten, um das Prinzip der Einzelverantwortung zu befolgen? brain.setAngry(driver)? car.applyBreaks(driver)?
Phil
Ich bezweifle , dass Code-basierte Zusammenhalt Metriken wirklich der Schnittstelle Ebene Zusammenhalt indikativ sein kann, und kann sogar schlechte Programmierung fördern: mortoray.com/2015/04/29/...
Eda-qa mort-ora-y
16
  • Afferente Kopplung: Anzahl der Verantwortlichkeiten
  • Efferente Kopplung: Anzahl der Abhängigkeiten
  • Instabilität: Verhältnis der efferenten Kopplung zur gesamten Kopplung (afferent + efferent).

Instabilität wird in verschiedenen Codemetriktools unterstützt.

Brian
quelle
Danke @ Brian - genau das, was ich mir erhofft hatte zu finden.
Onorio Catenacci