Complejidad ciclomática en pruebas de software (ejemplo)

¿Qué es la complejidad ciclomática de McCabe?

Complejidad ciclomática en 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 las rutas independientes en el código fuente de un programa de software. La complejidad ciclomática se puede calcular mediante 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 ha sido atravesado antes en ninguna otra ruta.

Esta métrica fue desarrollada por Thomas J. McCabe en 1976 y se basa en una representación del flujo de control del programa. El flujo de control representa un programa como un gráfico que consta de nodos y aristas.

En el gráfico, los nodos representan tareas de procesamiento, mientras que los bordes representan el flujo de control entre los nodos.

La complejidad ciclomática de McCabe

Notación de gráfico 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 diagramas de flujo para declaraciones como if-else, While, Until y la secuencia normal de flujo.

Notación de gráfico de flujo para un programa.

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 condición)

Ejemplo

i = 0;
n=4; //N-Number of nodes present in the graph

while (i<n-1) do
j = i + 1;

while (j<n) do

if A[i]<A[j] then
swap(A[i], A[j]);

end do;
j=j+1;

end do;

El gráfico de flujo para este programa será

Calcular la complejidad ciclomática

Calcular matemáticamente,

  • V(G) = 9 – 7 + 2 = 4
  • V(G) = 3 + 1 = 4 (Los nodos de condición son 1,2, 3 y XNUMX nodos)
  • Conjunto básico: un 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:

  1. V (G) es el número máximo de caminos independientes en el gráfico.
  2. V (G) >=1
  3. G tendrá un camino si V (G) = 1
  4. Minimizar la complejidad al 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 instrucció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):

  1. M puede ser el número de casos de prueba para lograr la cobertura de sucursales (límite superior)
  2. M puede ser el número de caminos a través de los gráficos. (Límite inferior)

Considere este ejemplo:

If (Condition 1)
Statement 1

Else
Statement 2

If (Condition 2)
Statement 3

Else
Statement 4

La complejidad ciclomática para este programa será 8-7+2=3.

Como la complejidad se ha calculado como 3, son necesarios tres casos de prueba para cubrir la 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 de grafo con nodos y aristas a partir del código.

Paso 2 – Identificación de caminos independientes

Paso 3 – Cálculo de complejidad ciclomática

Paso 4 – Diseño de Casos de Prueba

Una vez formado el conjunto básico, CASOS DE PRUEBA debe escribirse para ejecutar todas las rutas.

Más sobre V (G)

La complejidad ciclomática se puede calcular manualmente si el programa es pequeño. Si el programa es muy complejo, se deben utilizar herramientas automatizadas, ya que esto implica más gráficos de flujo. En función del número de complejidad, el equipo puede sacar conclusiones sobre las acciones que se deben tomar para medir el rendimiento.

La siguiente tabla ofrece una descripción general del número de complejidad y el significado correspondiente de v (G):

Número de complejidad Significado
1 - 10 Código estructurado y bien escrito.

Alta capacidad de prueba

El costo y el esfuerzo son menores

10 - 20 Código complejo

Capacidad de prueba media

El costo y el esfuerzo son medios.

20 - 40 Código muy complejo

Baja capacidad de prueba

El costo y el esfuerzo son altos

> 40 Nada comprobable

Costo y esfuerzo muy altos

Herramientas para el cálculo de la complejidad ciclomática:

Existen muchas herramientas disponibles para determinar la complejidad de una aplicación. Algunas herramientas de cálculo de complejidad se utilizan para tecnologías específicas. La complejidad se puede determinar por la cantidad de puntos de decisión en un programa. Los puntos de decisión son las instrucciones if, for, for-each, while, do, catch y case en un código fuente.

Ejemplos de herramientas son

  • OCLint – Analizador de código estático para C y lenguajes relacionados.
  • Complemento Reflector: métricas de código para ensamblados .NET
  • GMetrics – Encuentra métricas en Java aplicaciones relacionadas

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 han sido probadas 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 programa.
  • El uso de estas métricas al principio del ciclo reduce el riesgo del programa.

Conclusión

La complejidad ciclomática es una métrica de software útil para software estructurado o Blanco Box Pruebas Se utiliza principalmente para evaluar la complejidad de un programa. Si hay más puntos de decisión, la complejidad del programa es mayor. Si el programa tiene un número alto de complejidad, la probabilidad de error es alta y se requiere más tiempo para realizar tareas de mantenimiento y resolución de problemas.

Boletín diario de Guru99

Empieza el día con las últimas y más importantes noticias sobre IA, entregadas ahora mismo.