Existem métricas para coesão e acoplamento?


Respostas:


29

Eu acho que a métrica que você está procurando é LCOM4, ​​embora se aplique mais às classes.

O sonar explica bem aqui :

... métrica: LCOM4 (Métodos de Falta de Coesão) para medir como as classes são coesas. A interpretação dessa métrica é bastante simples, pois o valor 1 significa que uma classe tem apenas uma responsabilidade (boa) e o valor X significa que uma classe provavelmente possui X responsabilidades (ruins) e deve ser refatorada / dividida.

Não há mágica aqui, apenas senso comum. Vamos dar um exemplo simples com a classe Driver. Essa classe possui dois campos: Car e Brain e cinco métodos: drive (), goTo (), stop (), getAngry () e drinkCoffee (). Aqui está o gráfico de dependência entre esses componentes. Existem três blocos de componentes relacionados, então LCOM4 = 3, então a classe parece ter três responsabilidades diferentes e quebra o Princípio de Responsabilidade Única. http://i.stack.imgur.com/2527G.png

...

É uma ótima ferramenta, se você pode usá-lo. :)


@OnorioCatenacci Sem problemas. :)
— Oleksi

Pena que eles não entendem como calculam a métrica.
— Onorio Catenacci


Por curiosidade, como você refatoraria esse diagrama para obedecer ao Princípio de Responsabilidade Única? brain.setAngry(driver)? car.applyBreaks(driver)?
— Phil

Duvido que métricas de coesão baseada em código pode realmente ser um indicativo de coesão nível de interface, e pode até promover a má programação: mortoray.com/2015/04/29/...
— EDA-qa mort-ora-y

16
  • Acoplamento aferente: Número de responsabilidades
  • Acoplamento eferente: Número de dependências
  • Instabilidade: razão de acoplamento eferente para acoplamento total (aferente + eferente).

A instabilidade é suportada em várias ferramentas de métrica de código.


Obrigado @ Brian - exatamente o tipo de coisa que eu esperava encontrar.
— Onorio Catenacci
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.