Gráfico de fluxo de controle e complexidade ciclomática para o seguinte procedimento
-
28-09-2019 - |
Pergunta
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;
}
}
Eu tenho que encontrar complexidade ciclomática para este código e depois sugerir alguns casos de teste de caixa branca e casos de teste de caixa preta. Mas estou tendo problemas para fazer um CFG para o código.
Apreciaria alguma ajuda em casos de teste também.
Solução
Comece numerando as declarações:
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;
}
Agora você pode ver claramente qual declaração é executada primeiro e qual último etc., portanto, desenhar o CFG se torna simples.
Agora, para calcular a complexidade ciclomática, você usa um dos três métodos:
- Conte o número de regiões no gráfico: 4
- No. de predicados (vermelho no gráfico) + 1: 3 + 1 = 4
- Não de arestas - não. de nós + 2: 14 - 12 + 2 = 4.
Outras dicas
A complexidade ciclomática é 4.
1 para o procedimento +1 para o loop for +1 para o loop while +1 para a condição if do loop while.
Você também pode usar a fórmula mccabe M = E-N + 2C
E = arestas
N = nós
C = componentes
M = complexidade ciclomática
E = 14
N = 12
C = 1
M = 14-12 + 2*1 = 4