Domanda

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;
    }
}

Devo trovare la complessità ciclomatica per questo codice e quindi suggerisco alcuni casi di test white box e casi di test black box. Ma io sto avendo problemi a fare un CFG per il codice.

gradirebbe qualche aiuto su casi di test pure.

È stato utile?

Soluzione

Inizia numerando le dichiarazioni:

 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;
       }

Ora si può chiaramente vedere quale istruzione viene eseguita prima e che lo scorso ecc in modo da attirare l'CFG diventa semplice.

CFG

Ora, per calcolare la complessità ciclomatica di utilizzare uno dei tre metodi:

  1. Contare il numero di regioni del grafico: 4
  2. Nessun. di predicati (rosso su grafico) + 1: 3 + 1 = 4
  3. Nessun dei bordi - n. di nodi + 2:. 14-12 + 2 = 4

Altri suggerimenti

La complessità ciclomatica è 4.

1 per la procedura +1 per il ciclo +1 per il ciclo while +1 per se condizione del ciclo while.

È inoltre possibile utilizzare la formula McCabe M = E-N + 2C
    E = bordi
    N = nodi
    C = Components |     M = ciclomatica complessità

E = 14
N = 12
C = 1

M = 14-12 + 2*1 = 4

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top