34

Is there a metric analogous to the McCabe Complexity measure to measure how cohesive a routine is and also how loosely (or tightly) coupled the routine is to other code in the same code base?

29

I think the metric you are looking for is LCOM4, although it applies more to classes.

Sonar explains it nicely here:

...metric : LCOM4 (Lack Of Cohesion Methods) to measure how cohesive classes are. Interpreting this metric is pretty simple as value 1 means that a class has only one responsibility (good) and value X means that a class has probably X responsibilities (bad) and should be refactored/split.

There is not any magic here, only common sense. Let’s take a simple example with class Driver. This class has two fields : Car and Brain, and five methods : drive(), goTo(), stop(), getAngry() and drinkCoffee(). Here is the dependency graph between those components. There are three blocks of related components, so LCOM4 = 3, so the class seems to have three different responsibilities and breaks the Single Responsibility Principle. http://i.stack.imgur.com/2527G.png

...

It's a great tool, if you can use it. :)

  • @OnorioCatenacci No problem. :) – Oleksi May 31 '12 at 15:40
  • Just too bad they don't go into how they calculate the metric. – Onorio Catenacci May 31 '12 at 15:44
  • 3
    This might help with that: aivosto.com/project/help/pm-oo-cohesion.html – Oleksi May 31 '12 at 15:46
  • Out of curiosity, how would you refactor that diagram to obey the Single Responsibility Principle? brain.setAngry(driver)? car.applyBreaks(driver)? – Phil Nov 21 '13 at 20:24
  • I doubt that code-based cohesion metrics can truly be indicative of interface level cohesion, and may even promote bad programming: mortoray.com/2015/04/29/… – edA-qa mort-ora-y May 4 '15 at 8:23
16
  • Afferent coupling: Number of responsibilities
  • Efferent coupling: Number of dependencies
  • Instability: Ratio of efferent coupling to total coupling (Afferent + Efferent).

Instability is supported in various code metric tools.

  • Thanks @Brian--exactly the sort of thing I was hoping to find. – Onorio Catenacci May 31 '12 at 15:05

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.