Para comprender la Complejidad Ciclomática, primero entendamos:
¿Qué es la métrica de software?
La medición no es más que una indicación cuantitativa del tamaño / dimensión / capacidad de un atributo de un producto / proceso. La métrica de software se define como una medida cuantitativa de un atributo que posee un sistema de software con respecto al costo, la calidad, el tamaño y el cronograma.
Ejemplo-
Medida - No. de erroresMétricas: número de errores encontrados por persona
En este tutorial, aprenderá:
- ¿Qué es la métrica de software?
- ¿Qué es la Complejidad Ciclomática?
- Notación de diagrama de flujo para un programa:
- Cómo calcular la complejidad ciclomática
- Propiedades de la complejidad ciclomática:
- ¿Cómo es útil esta métrica para las pruebas de software?
- Más sobre V (G):
- Herramientas para el cálculo de la complejidad ciclomática:
- Usos de la complejidad ciclomática:
Complejidad ciclomática en las pruebas de software
La complejidad ciclomática en las pruebas de software es una métrica de prueba que se utiliza para medir la complejidad de un programa de software. Es una medida cuantitativa de rutas independientes en el código fuente de un programa de software. La complejidad ciclomática se puede calcular utilizando gráficos de flujo de control o con respecto a funciones, módulos, métodos o clases dentro de un programa de software.
La ruta independiente se define como una ruta que tiene al menos un borde que no se ha atravesado antes en ninguna otra ruta.
Esta métrica fue desarrollada por Thomas J. McCabe en 1976 y se basa en una representación de flujo de control del programa. El flujo de control representa un programa como un gráfico que consta de nodos y bordes.
En el gráfico, los nodos representan tareas de procesamiento, mientras que los bordes representan el flujo de control entre los nodos.
Notación de diagrama de flujo para un programa:
La notación de gráfico de flujo para un programa define varios nodos conectados a través de los bordes. A continuación se muestran los diagramas de flujo para declaraciones como if-else, While, until y la secuencia normal de flujo.
Cómo calcular la complejidad ciclomática
Representación matemática:
Matemáticamente, es un conjunto de caminos independientes a través del diagrama gráfico. La complejidad del código del programa se puede definir mediante la fórmula:
V (G) = E - N + 2
Dónde,
E - Número de aristas
N - Número de nodos
V (G) = P + 1
Donde P = Número de nodos predicados (nodo que contiene la condición)
Ejemplo -
i = 0;n = 4; // N-Número de nodos presentes en el gráficomientras que (iEl diagrama de flujo de este programa será
Computación matemática,
- V (G) = 9 - 7 + 2 = 4
- V (G) = 3 + 1 = 4 (Los nodos de condición son 1,2 y 3 nodos)
- Conjunto básico: conjunto de posibles rutas de ejecución de un programa.
- 1, 7
- 1, 2, 6, 1, 7
- 1, 2, 3, 4, 5, 2, 6, 1, 7
- 1, 2, 3, 5, 2, 6, 1, 7
Propiedades de la complejidad ciclomática:
Las siguientes son las propiedades de la complejidad ciclomática:
- V (G) es el número máximo de caminos independientes en el gráfico
- V (G)> = 1
- G tendrá una ruta si V (G) = 1
- Minimiza la complejidad a 10
¿Cómo es útil esta métrica para las pruebas de software?
La prueba de ruta básica es una técnica de caja blanca y garantiza la ejecución de al menos una declaración durante la prueba. Comprueba cada ruta linealmente independiente a través del programa, lo que significa que el número de casos de prueba será equivalente a la complejidad ciclomática del programa.
Esta métrica es útil debido a las propiedades de la complejidad ciclomática (M) -
- M puede ser el número de casos de prueba para lograr la cobertura de sucursales (límite superior)
- M puede ser el número de trayectorias a través de los gráficos. (Límite inferior)
Considere este ejemplo:
Si (condición 1)Declaración 1DemásDeclaración 2Si (condición 2)Declaración 3DemásDeclaración 4La Complejidad Ciclomática para este programa será 8-7 + 2 = 3.
Como la complejidad se ha calculado como 3, se necesitan tres casos de prueba para la cobertura de ruta completa para el ejemplo anterior.
Pasos a seguir:
Se deben seguir los siguientes pasos para calcular la complejidad ciclomática y el diseño de casos de prueba.
Paso 1 : construcción del gráfico con nodos y aristas del código
Paso 2 : identificación de caminos independientes
Paso 3 - Cálculo de la complejidad ciclomática
Paso 4 : diseño de casos de prueba
Una vez que se forma el conjunto básico, se deben escribir TEST CASES para ejecutar todas las rutas.
Más sobre V (G):
La complejidad ciclomática se puede calcular manualmente si el programa es pequeño. Es necesario utilizar herramientas automatizadas si el programa es muy complejo, ya que implica más gráficos de flujo. Según el número de complejidad, el equipo puede llegar a una conclusión sobre las acciones que deben tomarse como medida.
La siguiente tabla ofrece una descripción general del número de complejidad y el significado correspondiente de v (G):
Número de complejidad Sentido 1-10 Código estructurado y bien escrito El costo y el esfuerzo de alta testabilidad son menores 10-20 El costo y el esfuerzo de testabilidad media de código complejo es medio 20-40 Código muy complejo Bajo costo y esfuerzo de probabilidad son altos > 40 Nada comprobable Costo y esfuerzo muy altos Herramientas para el cálculo de la complejidad ciclomática:
Hay muchas herramientas disponibles para determinar la complejidad de la aplicación. Algunas herramientas de cálculo de complejidad se utilizan para tecnologías específicas. La complejidad se puede encontrar por el número de puntos de decisión en un programa. Los puntos de decisión son if, for, for-each, while, do, catch, case declaraciones en un código fuente.
Ejemplos de herramientas son
- OCLint: analizador de código estático para C y lenguajes relacionados
- Reflector Add In: métricas de código para ensamblados .NET
- GMetrics: encuentre métricas en aplicaciones relacionadas con Java
Usos de la complejidad ciclomática:
La Complejidad Ciclomática puede resultar muy útil en
- Ayuda a los desarrolladores y evaluadores a determinar ejecuciones de rutas independientes
- Los desarrolladores pueden asegurar que todas las rutas se hayan probado al menos una vez
- Nos ayuda a centrarnos más en los caminos descubiertos.
- Mejorar la cobertura del código en ingeniería de software
- Evaluar el riesgo asociado con la aplicación o el programa.
- El uso de estas métricas al principio del ciclo reduce un mayor riesgo del programa.
Conclusión:
Cyclomatic Complexity es una métrica de software útil para pruebas estructuradas o de caja blanca. Se utiliza principalmente para evaluar la complejidad de un programa. Si los puntos de decisión son más, la complejidad del programa es mayor. Si el programa tiene un número de complejidad alto, la probabilidad de error es alta y aumenta el tiempo de mantenimiento y resolución de problemas.