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.

¿Fue útil?

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.

CFG

Ahora, para calcular la complejidad ciclomática utiliza uno de tres métodos:

  1. Contar el número de regiones en el gráfico: 4
  2. No. de predicados (rojo en el gráfico) + 1: 3 + 1 = 4
  3. 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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top