Existe-t-il des métriques pour la cohésion et le couplage?

Réponses:

29

Je pense que la métrique que vous recherchez est LCOM4, ​​bien qu’elle s’applique davantage aux classes.

Sonar l'explique bien ici :

... métrique: LCOM4 (Manque de méthodes de cohésion) pour mesurer le degré de cohésion des classes. L'interprétation de cette métrique est assez simple car la valeur 1 signifie qu'une classe n'a qu'une seule responsabilité (bien) et que la valeur X signifie qu'une classe a probablement X responsabilités (mauvaise) et qu'elle doit être refactorisée / divisée.

Il n'y a pas de magie ici, seulement du bon sens. Prenons un exemple simple avec la classe Driver. Cette classe comporte deux champs: Car et Brain, et cinq méthodes: drive (), goTo (), stop (), getAngry () et drinkCoffee (). Voici le graphe de dépendance entre ces composants. Il existe trois blocs de composants liés, donc LCOM4 = 3, de sorte que la classe semble avoir trois responsabilités différentes et enfreint le principe de responsabilité unique. http://i.stack.imgur.com/2527G.png

...

C'est un excellent outil, si vous pouvez l'utiliser. :)

Oleksi
la source
@ OnorioCatenacci Pas de problème. :)
Oleksi
Dommage qu'ils n'entrent pas dans la façon dont ils calculent la métrique.
Onorio Catenacci
3
Cela pourrait aider avec ça: aivosto.com/project/help/pm-oo-cohesion.html
Oleksi
Par curiosité, comment remanieriez-vous ce diagramme pour respecter le principe de responsabilité unique? brain.setAngry(driver)? car.applyBreaks(driver)?
Phil
Je doute que les métriques de cohésion basées sur du code puissent vraiment indiquer une cohésion au niveau de l'interface et même promouvoir une mauvaise programmation: mortoray.com/2015/04/29/…
edA-qa mort-ora-y
16
  • Couplage afférent: Nombre de responsabilités
  • Couplage efférent: Nombre de dépendances
  • Instabilité: Rapport couplage efférent / couplage total (afférent + efférent).

L'instabilité est prise en charge dans divers outils de métrique de code.

Brian
la source
Merci @ Brian - c'est exactement le genre de chose que j'espérais trouver.
Onorio Catenacci