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