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. :)


@ 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.


Merci @ Brian - c'est exactement le genre de chose que j'espérais trouver.
Onorio Catenacci
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.