Вы находитесь на странице: 1из 4

Complejidad ciclomtica

La Complejidad Ciclomtica (en ingls, Cyclomatic Complexity) es una mtrica del software que proporciona una medicin cuantitativa de la complejidad lgica de un programa. Es una de las mtricas de software de mayor aceptacin, ya que ha sido concebida para ser independiente del lenguaje.
Contenido
[ocultar]

1 Origen 2 Significado 3 Riesgo 4 Clculo de la Complejidad Ciclomtica 5 mbito de utilizacin de la Complejidad Ciclomtica 6 Referencias 7 Vase tambin 8 Enlaces externos

o o

8.1 Software 8.2 Blogs

[editar]Origen
Esta mtrica, propuesta por Thomas McCabe en 1976, se basa en el diagrama de flujo determinado por las estructuras de control de un determinado cdigo. De dicho anlisis se puede obtener una medida cuantitativa de la dificultad de crear pruebas automticas del cdigo y tambin es una medicin orientativa de la fiabilidad del mismo. El nombre Complejidad Ciclomtica puede resultar engaoso para un programador ya que la idea de esta mtrica no es contar los bucles (for, while, do) en el cdigo de un programa sino en el resultado de contar el nmero de ciclos diferentes que se siguen en un fragmento de cdigo de un programa habiendo creado una rama imaginaria desde el nodo de salida al nodo de entrada del diagrama de flujo correspondiente a este fragmento de cdigo. Un nombre ms adecuado podra ser Complejidad condicional ya que el clculo de esta mtrica se ajusta ms al hecho de buscar condiciones que contar ejecuciones de predicados dentro de bucles.

[editar]Significado

El resultado obtenido en el clculo de la complejidad ciclomtica define el nmero de caminos independientes dentro de un fragmento de cdigo y determina la cota superior del nmero de pruebas que se deben realizar para asegurar que se ejecuta cada sentencia al menos una vez. La medida resultante puede ser utilizada en el desarrollo, mantenimiento y reingeniera para estimar el riesgo, costo y estabilidad. Algunos estudios experimentales indican la existencia de distintas relaciones entre la mtrica de McCabe y el nmero de errores existentes en el cdigo fuente, as como el tiempo requerido para encontrar y corregir esos errores.

[editar]Riesgo
Una vez calculada la complejidad ciclomtica de un fragmento de cdigo, se puede determinar el riesgo que supone utilizando los rangos definidos en la siguiente tabla:

Complejidad Ciclomtica 1-10 11-20 21-50 50

Evaluacin del Riesgo Programa Simple, sin mucho riesgo Ms complejo, riesgo moderado Complejo, Programa de alto riesgo Programa no testeable, Muy alto riesgo

A partir del anlisis de muchos proyectos McCabe encontr que un valor 10 es un lmite superior prctico para el tamao de un mdulo. Cuando la complejidad supera dicho valor se hace muy difcil probarlo, entenderlo y modificarlo. La limitacin deliberada de la complejidad en todas las fases del desarrollo ayuda a evitar los problemas asociados a proyectos de alta complejidad. El lmite propuesto por McCabe sin embargo es fuente de controversias. Algunas organizaciones han utilizado el valor 15 con bastante xito.

[editar]Clculo

de la Complejidad Ciclomtica

Primero introducir una sencilla notacin para la representacin del flujo de control, denominada Grafos de Flujo de Control de un programa.

M = Complejidad ciclomtica. E = Nmero de aristas del grafo. Una arista conecta dos vrtices si una sentencia puede ser ejecutada inmediatamente despus de la primera.

N = Nmero de nodos del grafo correspondientes a sentencias del programa. P = Nmero de componentes conexos correspondientes a las diferentes subrutinas, funciones o mtodos.

Definidos estos conceptos, la Complejidad Ciclomtica puede calcularse de la siguiente manera:

M = E N + P

Una versin simplificada para el clculo de la Complejidad Ciclomtica es la siguiente:

M = Nmero de condiciones + 1

Esta ltima frmula hay que retocarla si el cdigo a analizar presenta varios puntos de salida o "returns", pasando a ser:

M = Nmero de condiciones + Nmero de retornos o salidas

donde el nmero de salidas nunca descender de 1.

[editar]mbito

de utilizacin de la Complejidad Ciclomtica

La complejidad ciclomtica puede ser aplicada en varias reas incluyendo:

Anlisis de riesgo en desarrollo de cdigo: Mientras el cdigo est en desarrollo, su complejidad puede ser medida para estimar el riesgo inherente.

Anlisis de riesgo de cambio durante la fase de mantenimiento: La complejidad del cdigo tiende a incrementarse a medida que es mantenido durante el tiempo. Midiendo la complejidad antes y despus de un cambio propuesto, puede ayudar a decidir cmo minimizar el riesgo del cambio.

Planificacin de Pruebas: El anlisis matemtico ha demostrado que la complejidad ciclomtica indica el nmero exacto de casos de prueba necesarios para probar cada punto de decisin en un programa.

Reingeniera: Provee conocimiento de la estructura del cdigo operacional de un sistema. El riesgo involucrado en la reingeniera de una pieza de cdigo est relacionado con su complejidad.

[editar]Referencias

Artculo original de McCabe (1976) Tsis sobre la complejidad ciclomtica

[editar]Vase

tambin

Problemas no resueltos de la ingeniera de software

Protocolo de Control de Congestin de Datagramas Sistema de control de calidad de software

[editar]Enlaces [editar]Software

externos

Cobertura Muestra la Complejidad Ciclomtica en Java para cada clase y la media de Complejidad Ciclomtica para cada paquete y para todo el proyecto.

El plug-in PMD para eclipse tambin puede analizar la complejidad ciclomtica del cdigo

PEAR::CodeSniffer Comprobador de cdigo PHP para la verificacin de varios estndares que incluye comprobacin de Complejidad Ciclomtica.

Perl::Metrics::Simple Analizador de cdigo fuente Perl que comprueba varias mtricas, entre ellas, la Complejidad Ciclomtica de cada subrutina/mtodo.

complexity.py Script en Python para comprobar la Complejidad Ciclomtica en programas realizados en este lenguaje.

Вам также может понравиться