fbpx
Wikipedia

Complejidad ciclomática

La Complejidad Ciclomática (en inglés, Cyclomatic Complexity) es una métrica del software en ingeniería del software que proporciona una medición cuantitativa de la complejidad lógica de un programa. Es una de las métricas de software de mayor aceptación, ya que ha sido concebida para ser independiente del lenguaje.

Origen

Esta métrica, propuesta por Thomas McCabe en 1976, se basa en el diagrama de flujo determinado por las estructuras de control de un determinado código. De dicho análisis se puede obtener una medida cuantitativa de la dificultad de crear pruebas automáticas del código y también es una medición orientativa de la fiabilidad del mismo.

El nombre “Complejidad Ciclomática” puede resultar engañoso para un programador ya que la idea de esta métrica no es contar los bucles (for, while, do…) en el código de un programa sino en el resultado de contar el número de ciclos diferentes que se siguen en un fragmento de código 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 código. Un nombre más adecuado podría ser Complejidad condicional ya que el cálculo de esta métrica se ajusta más al hecho de buscar condiciones que contar ejecuciones de predicados dentro de bucles.

Significado

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.

La medida resultante puede ser utilizada en el desarrollo, mantenimiento y reingeniería para estimar el riesgo, costo y estabilidad. Algunos estudios experimentales indican la existencia de distintas relaciones entre la métrica de McCabe y el número de errores existentes en el código fuente, así como el tiempo requerido para encontrar y corregir esos errores.

Riesgo

Una vez calculada la complejidad ciclomática de un fragmento de código, se puede determinar el riesgo que supone utilizando los rangos definidos en la siguiente tabla:

Complejidad Ciclomática Evaluación del Riesgo
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

A partir del análisis de muchos proyectos McCabe encontró que un valor 10 es un límite superior práctico para el tamaño de un módulo[cita requerida]. Cuando la complejidad supera dicho valor se hace muy difícil probarlo, entenderlo y modificarlo. La limitación deliberada de la complejidad en todas las fases del desarrollo ayuda a evitar los problemas asociados a proyectos de alta complejidad. El límite propuesto por McCabe sin embargo es fuente de controversias. Algunas organizaciones han utilizado el valor 15 con bastante éxito[cita requerida].

Cálculo de la Complejidad Ciclomática

 
Ejemplo de grafo de flujo de control. El programa empieza ejecutándose en el nodo rojo y sale en el azul. Este grafo tiene 9 aristas, 8 nodos y un componente conexo. Por lo que la complejidad ciclomática es 9-8+2*1=3

Primero introducir una sencilla notación para la representación del flujo de control, denominada grafo de flujo de control de un programa.

  • M = Complejidad ciclomática.
  • E = Número de aristas del grafo. Una arista conecta dos vértices si una sentencia puede ser ejecutada inmediatamente después de la primera.
  • N = Número de nodos del grafo correspondientes a sentencias del programa.
  • P = Número de componentes conexos, nodos de salida.

Definidos estos conceptos, la Complejidad Ciclomática puede calcularse de la siguiente manera:

 M = E − N + 2P 

Una versión simplificada para el cálculo de la Complejidad Ciclomática es la siguiente:

 M = Número de condiciones + 1 

Esta última fórmula hay que retocarla si el código a analizar presenta varios puntos de salida o "returns", pasando a ser:

M = Número de condiciones + Número de retornos o salidas 

donde el número de salidas nunca descenderá de 1.

Ámbito de utilización de la Complejidad Ciclomática

La complejidad ciclomática puede ser aplicada en varias áreas incluyendo:

  • Análisis de riesgo en desarrollo de código: Mientras el código está en desarrollo, su complejidad puede ser medida para estimar el riesgo inherente.
  • Análisis de riesgo de cambio durante la fase de mantenimiento: La complejidad del código tiende a incrementarse a medida que es mantenido durante el tiempo. Midiendo la complejidad antes y después de un cambio propuesto, puede ayudar a decidir cómo minimizar el riesgo del cambio.
  • Planificación de Pruebas: El análisis matemático ha demostrado que la complejidad ciclomática indica el número máximo de casos de prueba necesarios para probar cada punto de decisión en un programa.
  • Reingeniería: Provee conocimiento de la estructura del código operacional de un sistema. El riesgo involucrado en la reingeniería de una pieza de código está relacionado con su complejidad.

Referencias

  • Artículo original de McCabe (1976)

Véase también

Enlaces externos

Software

  • Cobertura Muestra la Complejidad Ciclomática en Java para cada clase y la media de Complejidad Ciclomática para cada paquete y para todo el proyecto.
    • El plug-in PMD para eclipse también puede analizar la complejidad ciclomática del código
  • PEAR::CodeSniffer Comprobador de código PHP para la verificación de varios estándares que incluye comprobación de Complejidad Ciclomática.
  • Perl::Metrics::Simple Analizador de código fuente Perl que comprueba varias métricas, entre ellas, la Complejidad Ciclomática de cada subrutina/método.
  • complexity.py Script en Python para comprobar la Complejidad Ciclomática en programas realizados en este lenguaje.

Blogs

  • Javier Garzás
  •   Datos: Q867330

complejidad, ciclomática, complejidad, ciclomática, inglés, cyclomatic, complexity, métrica, software, ingeniería, software, proporciona, medición, cuantitativa, complejidad, lógica, programa, métricas, software, mayor, aceptación, sido, concebida, para, indep. La Complejidad Ciclomatica en ingles Cyclomatic Complexity es una metrica del software en ingenieria del software que proporciona una medicion cuantitativa de la complejidad logica de un programa Es una de las metricas de software de mayor aceptacion ya que ha sido concebida para ser independiente del lenguaje Indice 1 Origen 2 Significado 3 Riesgo 4 Calculo de la Complejidad Ciclomatica 5 Ambito de utilizacion de la Complejidad Ciclomatica 6 Referencias 7 Vease tambien 8 Enlaces externos 8 1 Software 8 2 BlogsOrigen EditarEsta metrica propuesta por Thomas McCabe en 1976 se basa en el diagrama de flujo determinado por las estructuras de control de un determinado codigo De dicho analisis se puede obtener una medida cuantitativa de la dificultad de crear pruebas automaticas del codigo y tambien es una medicion orientativa de la fiabilidad del mismo El nombre Complejidad Ciclomatica puede resultar enganoso para un programador ya que la idea de esta metrica no es contar los bucles for while do en el codigo de un programa sino en el resultado de contar el numero de ciclos diferentes que se siguen en un fragmento de codigo 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 codigo Un nombre mas adecuado podria ser Complejidad condicional ya que el calculo de esta metrica se ajusta mas al hecho de buscar condiciones que contar ejecuciones de predicados dentro de bucles Significado EditarEl resultado obtenido en el calculo de la complejidad ciclomatica define el numero de caminos independientes dentro de un fragmento de codigo y determina la cota superior del numero 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 reingenieria para estimar el riesgo costo y estabilidad Algunos estudios experimentales indican la existencia de distintas relaciones entre la metrica de McCabe y el numero de errores existentes en el codigo fuente asi como el tiempo requerido para encontrar y corregir esos errores Riesgo EditarUna vez calculada la complejidad ciclomatica de un fragmento de codigo se puede determinar el riesgo que supone utilizando los rangos definidos en la siguiente tabla Complejidad Ciclomatica Evaluacion del Riesgo1 10 Programa Simple sin mucho riesgo11 20 Mas complejo riesgo moderado21 50 Complejo Programa de alto riesgo50 Programa no testeable Muy alto riesgoA partir del analisis de muchos proyectos McCabe encontro que un valor 10 es un limite superior practico para el tamano de un modulo cita requerida Cuando la complejidad supera dicho valor se hace muy dificil probarlo entenderlo y modificarlo La limitacion deliberada de la complejidad en todas las fases del desarrollo ayuda a evitar los problemas asociados a proyectos de alta complejidad El limite propuesto por McCabe sin embargo es fuente de controversias Algunas organizaciones han utilizado el valor 15 con bastante exito cita requerida Calculo de la Complejidad Ciclomatica Editar Ejemplo de grafo de flujo de control El programa empieza ejecutandose en el nodo rojo y sale en el azul Este grafo tiene 9 aristas 8 nodos y un componente conexo Por lo que la complejidad ciclomatica es 9 8 2 1 3 Primero introducir una sencilla notacion para la representacion del flujo de control denominada grafo de flujo de control de un programa M Complejidad ciclomatica E Numero de aristas del grafo Una arista conecta dos vertices si una sentencia puede ser ejecutada inmediatamente despues de la primera N Numero de nodos del grafo correspondientes a sentencias del programa P Numero de componentes conexos nodos de salida Definidos estos conceptos la Complejidad Ciclomatica puede calcularse de la siguiente manera M E N 2P Una version simplificada para el calculo de la Complejidad Ciclomatica es la siguiente M Numero de condiciones 1 Esta ultima formula hay que retocarla si el codigo a analizar presenta varios puntos de salida o returns pasando a ser M Numero de condiciones Numero de retornos o salidas donde el numero de salidas nunca descendera de 1 Ambito de utilizacion de la Complejidad Ciclomatica EditarLa complejidad ciclomatica puede ser aplicada en varias areas incluyendo Analisis de riesgo en desarrollo de codigo Mientras el codigo esta en desarrollo su complejidad puede ser medida para estimar el riesgo inherente Analisis de riesgo de cambio durante la fase de mantenimiento La complejidad del codigo tiende a incrementarse a medida que es mantenido durante el tiempo Midiendo la complejidad antes y despues de un cambio propuesto puede ayudar a decidir como minimizar el riesgo del cambio Planificacion de Pruebas El analisis matematico ha demostrado que la complejidad ciclomatica indica el numero maximo de casos de prueba necesarios para probar cada punto de decision en un programa Reingenieria Provee conocimiento de la estructura del codigo operacional de un sistema El riesgo involucrado en la reingenieria de una pieza de codigo esta relacionado con su complejidad Referencias EditarArticulo original de McCabe 1976 Vease tambien EditarProblemas no resueltos de la ingenieria de software Protocolo de Control de Congestion de Datagramas Sistema de control de calidad de softwareEnlaces externos EditarSoftware Editar Cobertura Muestra la Complejidad Ciclomatica en Java para cada clase y la media de Complejidad Ciclomatica para cada paquete y para todo el proyecto El plug in PMD para eclipse tambien puede analizar la complejidad ciclomatica del codigo PEAR CodeSniffer Comprobador de codigo PHP para la verificacion de varios estandares que incluye comprobacion de Complejidad Ciclomatica Perl Metrics Simple Analizador de codigo fuente Perl que comprueba varias metricas entre ellas la Complejidad Ciclomatica de cada subrutina metodo complexity py Script en Python para comprobar la Complejidad Ciclomatica en programas realizados en este lenguaje Blogs Editar Javier Callon Javier Garzas Luis Aldazabal Gil Datos Q867330Obtenido de https es wikipedia org w index php title Complejidad ciclomatica amp oldid 131480514, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos