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.