Control de flujo gráfico y la complejidad ciclomática para procedimiento siguiente
-
28-09-2019 - |
Pregunta
insertion_procedure (int a[], int p [], int N)
{
int i,j,k;
for (i=0; i<=N; i++) p[i] = i;
for (i=2; i<=N; i++)
{
k = p[i];
j = 1;
while (a[p[j-1]] > a[k]) {p[j] = p[j-1]; j--}
p[j] = k;
}
}
Tengo que encontrar la complejidad ciclomática para este código y luego sugerir algunos casos de prueba de caja blanca y casos de prueba de recuadro negro. Pero estoy teniendo problemas para hacer una CFG para el código.
agradecería un poco de ayuda en casos de prueba también.
Solución
Para comenzar, la numeración de las declaraciones:
insertion_procedure (int a[], int p [], int N)
{
(1) Int i,j,k;
(2) for ((2a)i=0; (2b)i<=N; (2c)i++)
(3) p[i] = i;
(4) for ((4a)i=2; (4b)i<=N; (4c)i++)
{
(5) k=p[i];j=1;
(6) while (a[p[j-1]] > a[k]) {
(7) p[j] = p[j-1];
(8) j--
}
(9) p[j] = k;
}
Ahora se puede ver claramente qué instrucción se ejecuta primero y que el pasado etc por lo que dibujar la CFG se vuelve simple.
Ahora, para calcular la complejidad ciclomática utiliza uno de tres métodos:
- Contar el número de regiones en el gráfico: 4
- No. de predicados (rojo en el gráfico) + 1: 3 + 1 = 4
- No de bordes - no. de nodos + 2.: 14 - 12 + 2 = 4
Otros consejos
La complejidad ciclomática es 4.
1 para el procedimiento 1 para el bucle 1 para el bucle while 1 para la si la condición del bucle while.
También puede utilizar McCabe fórmula M = E-N + 2C
E = bordes
N = nodos
C = componentes
M = ciclomática complejidad
E = 14
N = 12
C = 1
M = 14-12 + 2*1 = 4