domingo, 20 de enero de 2013

Complejidad ciclomática

Artículo perteneciente a la sección de calidad del código
Artículo íntimamente relacionado con : Que es la calidad de código?



Hola a todos,
Como supongo que habréis visto ya llevo unos cuantos posts relacionados con temas de mantenibilidad y calidad del código. La herramienta más utilizada (y a mi parecer fiable) para medir la mantenibilidad y calidad de un código es la complejidad ciclomática.

Definición:

La complejidad ciclomática es un concepto que se inventó Thomas McCabe en 1976 que se basa en contar el número de caminos independientes que hay un trozo de código. Cuantos más caminos, mas testeos se tienen que hacer para asegurar que funciona correctamente y más posibilidades hay que el lector de código se confunda. Esta medida tiene la gracia que es totalmente objetiva y por lo tanto puede realizarla un ordenador de forma repetitiva, no depende de la experiencia del programador ni de los gustos de la persona que hace la revisión de código.

Por si alguien todavía tiene dudas ya se han realizado unos cuantos estudios que demuestran que la complejidad ciclomática está íntimamente relacionada con el número de errores y la facilidad para detectarlos y resolverlos.  Con esto no estamos diciendo que un código con un alto valor de complejidad sea "malo", "ineficiente" o que no cumpla con los requisitos pedidos, sencillamente estamos diciendo que con un alto nivel de probabilidad ese código va a ser inmantenible.


Cuantificación de la calidad:

Ya sabemos que una complejidad alta es mala... pero... que significa alta? 10, 20, 100??
Depende de la experiencia, del tipo de producto, de las veces que se va a tocar a posteriori o del nivel de fiabilidad que se desee. Normalmente se establecen un conjunto de tramos para clasificar los programas.

Complejidad     Clasificación
1-10                Programa simple. Fácil de mantener
11-20              Programa medio. Algo más caro para mantener.
21-50              Programa complicado. El coste de mantenimiento puede ser muy elevado. Es                         recomendable refactorizar el código para bajarlo por debajo de 20.
50+                 Programa horrible. Borralo todo y vuelve a empezar. En serio, saldrás ganando dinero.


Como se calcula la complejidad?
La forma más fácil de calcular la complejidad ciclomática (es solo una aproximación, pero bastante buena) es sumar el número de condiciones del programa y el número de returns de la función. En el fondo es una medida muy próxima al número de caminos diferentes que tendrá nuestro software.


Ya para finalizar , para muestra un botón, no se si os acordareis de mi proyecto inicial LPGameEngine, pues bien, en su momento lo dejé medio abandonado por que me quitaba mucho tiempo implementar nuevas características. Ahora ya he visto que uno de los problemas que tenía es que la complejidad ciclomática se me disparaba (aparte de defectos en el diseño). A ver si puedo montarme una plataforma de desarrollo que me permita que el código sea más mantenible y me puedo volver a poner con el tema. Os mantendré informados.

Espero que os haya gustado

Si quereís profundizar un poco más sobre el tema de la complejidad ciclomática y del software en general tal vez os interese echarle un ojo a alguno de estos libros:

Nos vemos

LordPakusBlog


0 comentarios :

Publicar un comentario

Entradas populares