Está en la página 1de 8

Complejidad Ciclomtica

Nuestro cdigo es fcil de mantener y probar?

La complejidad ciclomtica es una mtrica de calidad software basada


en el clculo del nmero de caminos independientes que tiene nuestro
cdigo.

Estos
caminos
se
identifican a partir de las
estructuras de control
(condicionales, bucles, )
incluidas en la mayora
de los lenguajes de
programacin, y ms
concretamente, a partir
del diagrama de flujo de
cada uno de nuestros
mtodos.

Para qu sirve la complejidad ciclomtica?


Esta mtrica fu propuesta por Thomas McCabe en 1976 y permite tomar
la temperatura de nuestro cdigo respecto su nivel de mantenibilidad, la
probabilidad de incluir fallos, o el esfuerzo necesario para poder probar
todos sus caminos.
La idea es sencilla, cuanto ms compleja sea la lgica de un cdigo, ms
difcil ser de entender, mantener y probar.

Y cmo se calcula?
Si nos atenemos a la definicin de complejidad ciclomtica, como
deteccin y recuento de caminos independientes, la idea ms purista
es acudir al diagrama de flujo, tratarlo como un grafo, con sus nodos y
aristas, y buscar cuntos caminos diferentes hay desde el nodo inicial al
final.
En el ejemplo anterior sobre calcular si un ao es bisiesto o no, habran
3 posibles caminos (SI, NO-SI, NO-NO).
Otra manera de calcular la complejidad ciclomtica sera con la frmula
(simplificada para un nico punto de entrada y salida)
v(G) = e n + 2, donde e representa el nmero de aristas y n el nmero
de nodos.

Si para nuestro ejemplo numeramos cada


instruccin (los nodos) y las transiciones
entre las mismas (las aristas) nos queda:
v(G) = 8 -7 + 2 = 3, siendo e = 8; n = 7
Por ltimo, otra alternativa para calcular
la complejidad ciclomtica utilizando el
grafo es:
v(G) = nmero de regiones cerradas en el
grafo + 1
Que en nuestro caso vuelvo a coincidir
con 3 (2 + 1), al haber 2 regiones cerradas

Valores de referencia
Como se puede intuir, una complejidad ciclomtica de 3 habla de
un mtodo sencillo, con poca lgica.
Thomas McCabe, establece en sus trabajos los siguientes valores de
referencia:

<= 10, mtodos sencillos, sin mucho riesgo.


> 10, <= 20, mtodos medianamente complejos, con riesgo moderado.
> 20, <= 50, mtodos complejos, con alto riesgo.
> 50, mtodos inestables, de altsimo riesgo.

Se puede marcar un valor de referencia de 20, como


mxima complejidad ciclomtica aceptable para un
mtodo, a partir de la cual hay que estudiar opciones
de optimizacin o refactorizacin.
Hay que tener en cuenta que existen mtodos de por
s complejos, que no admiten simplificacin, y que
refactorizarlos al extremo pueden introducir una
complejidad innecesaria en un sistema, perdindose
igualmente la mantenibilidad del cdigo.

Y cmo se calcula la complejidad ciclomtica


en la prctica?
Herramientas como SonarQube no se complican tanto la vida, y
hacen una simplificacin de esta mtrica, con un simple recuento de
estructuras de control en nuestro cdigo.
http://www.sonarqube.org/

También podría gustarte