Explicando la complejidad ciclomática mediante gráficos

Como una imagen vale más que mil palabras, esta es la mejor forma que he encontrado de  explicar a mis compañeros que es al complejidad ciclomática de forma rápida,concisa y sobre todo impactante.

En primer lugar, una pequeña introducción

La Complejidad Ciclomática (en inglés, Cyclomatic Complexity) es una métrica del software que proporciona una medición cuantitativa de la complejidad lógica de un programa.

El resultado obtenido en el cálculo de la complejidad ciclomática define el número de caminos independientes dentro de un fragmento de código y determina la cota superior del número de pruebas que se deben realizar para asegurar que se ejecuta cada sentencia al menos una vez, (es decir, mira if, else, for, while, etc)

En segundo lugar donde la pueden visualizarla en el Sonar

En el Sonar esto se puede ver en el cuadrado denominado «Complexity«:


Donde podemos observar que tenemos 2.6 de media por método y 9.9 de media por clase (cifras ambas muy engañosas). Ya que si pulsamos sobre métodos (por ejemplo) podemos ver que hay métodos que suben hasta un valor de 61 en la complejidad ciclomática.

Explico un poco lo que significan esas cifras

Si tenemos en cuenta el siguiente ranking:

  • 1-10       Programa Simple, sin mucho riesgo.
  • 11-20     Más complejo, riesgo moderado.
  • 21-50     Complejo, Programa de alto riesgo.
  • 50           Programa no testeable, Muy alto riesgo.

Pues podemos ver que hay métodos que superan el «peor escenario imaginable». Supongo que los números os indican poco, pero si miráis este gráfico en el que se pinta el flujo de un método con una complejidad ciclomática de 48, pues acojona un poco (ojo, insisto que es flujo de un solo método):

Y en último lugar una imagen (el incentivo definitivo) que muestra gráficamente que puede significar ese número

 

 

NOTA:

La imagen ha sido creada a partir del programa Understand una aplicación de SciTools que nos permite realizar un análisis estático del código. No es gratuita, es de pago, pero tiene una versión de pruebas de 15 días. ¿conocéis de alguna otra herramienta que permita realizar este tipo de gráficos?.

Un saludo.

Explicando la complejidad ciclomática mediante gráficos