¿Existen métricas para la cohesión y el acoplamiento?


Respuestas:


29

Creo que la métrica que está buscando es LCOM4, ​​aunque se aplica más a las clases.

Sonar lo explica muy bien aquí :

... métrica: LCOM4 (métodos de falta de cohesión) para medir qué tan cohesivas son las clases. Interpretar esta métrica es bastante simple, ya que el valor 1 significa que una clase tiene una sola responsabilidad (buena) y el valor X significa que una clase tiene probablemente X responsabilidades (mala) y debe refactorizarse / dividirse.

Aquí no hay magia, solo sentido común. Tomemos un ejemplo simple con la clase Driver. Esta clase tiene dos campos: Car y Brain, y cinco métodos: drive (), goTo (), stop (), getAngry () y drinkCoffee (). Aquí está el gráfico de dependencia entre esos componentes. Hay tres bloques de componentes relacionados, por lo que LCOM4 = 3, por lo que la clase parece tener tres responsabilidades diferentes y rompe el Principio de responsabilidad única. http://i.stack.imgur.com/2527G.png

...

Es una gran herramienta, si puedes usarla. :)


@OnorioCatenacci No hay problema. :)
Oleksi

Lástima que no entiendan cómo calculan la métrica.
Onorio Catenacci

3
Esto podría ayudar con eso: aivosto.com/project/help/pm-oo-cohesion.html
Oleksi

Por curiosidad, ¿cómo refactorizaría ese diagrama para obedecer el Principio de responsabilidad única? brain.setAngry(driver)? car.applyBreaks(driver)?
Phil

Dudo que las métricas de cohesión basadas en código realmente puedan ser indicativas de la cohesión a nivel de interfaz e incluso pueden promover una mala programación: mortoray.com/2015/04/29/…
edA-qa mort-ora-y

16
  • Acoplamiento aferente: número de responsabilidades
  • Acoplamiento eferente: número de dependencias
  • Inestabilidad: relación de acoplamiento eferente a acoplamiento total (aferente + eferente).

La inestabilidad es compatible con varias herramientas de métricas de código.


Gracias @ Brian, exactamente el tipo de cosas que esperaba encontrar.
Onorio Catenacci
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.