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.