2
Universidad Autónoma de Aguascalientes Centro de Ciencias Básicas Título: Complejidad Ciclomática Alumno: Luis Fernando Mira Rosillo Materia: Procesos y Métodos Arquitectónicos de Software

COMPLEJIDAD CICLOMÁTICA

Embed Size (px)

Citation preview

Page 1: COMPLEJIDAD CICLOMÁTICA

Universidad Autónoma de Aguascalientes

Centro de Ciencias Básicas

Título: Complejidad Ciclomática

Alumno: Luis Fernando Mira Rosillo

Materia: Procesos y Métodos Arquitectónicos de

Software

Page 2: COMPLEJIDAD CICLOMÁTICA

COMPLEJIDAD CICLOMÁTICA

La Complejidad Ciclomática es una métrica del software que proporciona una medición cuantitativa de la complejidad lógica de un programa. Cuando se utiliza en el contexto del método de prueba del camino básico, el valor calculado como complejidad ciclomática define el número de caminos independientes del conjunto básico de un programa y nos da el límite superior para el número de pruebas que se deben realizar para asegurar que se ejecuta cada sentencia al menos una vez. La complejidad ciclomática puede ser aplicada en varias áreas incluyendo: • Análisis de Riesgo en desarrollo de código: Mientras el código esta 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 exacto 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.

La palabra "ciclomática" proviene del número de caminos independientes encontrados dentro de grafos "fuertemente conectados". Un grafo "fuertemente conectado" es aquel en el cual cada nodo puede ser alcanzado desde cualquier otro nodo siguiendo las aristas. En teoría de grafos, el número ciclomático, se define como A – N + 1. Sucede que los grafos de control de flujo no son "fuertemente conectados", pero se pueden convertir cuando se agrega una "arista virtual" que conecta el nodo de salida con el de entrada. Entonces la definición de complejidad ciclomática para grafos de control de flujo de programa se deriva de la fórmula del número ciclomático simplemente sumando 1 para representar la contribución de la arista virtual. Dicha arista virtual no es solo una conveniencia matemática. Intuitivamente representa el flujo de control a través del resto del programa en el cuál el módulo es utilizado. El cálculo del flujo a través de la arista virtual nos indicará el número de veces que el módulo ha sido ejecutado. Su presencia o ausencia no marcará diferencia en la determinación del número de caminos independientes dentro del módulo, por lo tanto se obviará en el resto del presente documento.

La Aplicación de la fórmula A-N+2 en forma manual es tediosa y pasible de errores. Afortunadamente existen varias maneras sencillas de calcular la complejidad en la práctica, que van desde la cuenta de predicados de decisión hasta el uso de herramientas automatizadas. Conteo de Predicados: Si todas las decisiones son binarias y hay p decisiones binarias entonces V(G) = p + 1 El predicado es binario cuando el nodo que lo representa tiene dos aristas que salen de él. Conteo de Regiones: Cuando el grafo es planar (no hay aristas cruzadas) y el plano se divide en R regiones (incluyendo la región infinita fuera del grafo) la fórmula simplificada para complejidad ciclomática es justamente R. Esto da una rápida y visual manera de determinar la complejidad. Uso de Herramientas automatizadas La manera mas eficiente y confiable de determinar la complejidad es mediante el uso de herramientas automatizadas. En pocos minutos se puede calcular la complejidad de cientos de módulos con miles de líneas de código. Sin embargo tiene sus aspectos negativos. La realimentación de una herramienta automática llega tarde para una tarea de desarrollo efectiva. Una vez que el código es terminado es procesado por la herramienta, retrabajarlo para reducir la complejidad es mas costoso y pasible de errores que desarrollar el módulo con el concepto de complejidad en mente desde el inicio.