Quiero pasarles un truco muy rápido que uso para rapidamente darme una
idea de cuán "cochino" es un código legado, en cualquier lenguaje de
programación. Sirve en cualquier lenguaje porque está basado en el
número de circuitos linearmente interdependientes en el grafo de
control de un módulo.
Si encuentro consistentemente que hay métodos con una complejidad
ciclómática de más de 10, me preparo a enfrentar a un código que tiene
una deuda técnica muy alta (a veces tan alta que merece una
declaración de "banca rota") que requiere diferentes técnicas de
refactoring. Es como un smell de smells.
[Si tiene un proveedor de servicios de software que afirma hacer
desarrollo de software ágil, pidale los la complejidad ciclomática de
los proyectos de desarrollo que ha realizado, y de paso exija una
complejidad ciclomática de 10 o menos, si el proveedor no sabe qué es
CC, huya! ]
Una muy buena noticia es que se puede establecer un servidor de
continuous integration (ese que cuando alguien hace check-in, se
dispara el build automáticamente, se corren todos los Unit Tests, se
confirma que que los Unit Tests pasen y logren una cobertura de código
de al menos 95% [por ejemplo] y luego haga deployment) que permiten
chequeos de la complejidad ciclómática de los métodos agregados, de
manera que si por ejemplo se pasan de CC 10 entonces falle el build.
Referencias:
What's your/a good limit for cyclomatic complexity?
http://bit.ly/dAmcjB
How to compute McCabe's Cyclomatic Complexity in Java methods
http://bit.ly/cvN1st
Structured Testing: A Testing Methodology Using the Cyclomatic
Complexity Metric
http://www.mccabe.com/pdf/nist235r.pdf