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. :)

Oleksi
fonte
@OnorioCatenacci Sem problemas. :)
Oleksi
Pena que eles não entendem como calculam a métrica.
Onorio Catenacci
3
Isso pode ajudar com isso: aivosto.com/project/help/pm-oo-cohesion.html
Oleksi
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.

Brian
fonte
Obrigado @ Brian - exatamente o tipo de coisa que eu esperava encontrar.
Onorio Catenacci