Escolar Documentos
Profissional Documentos
Cultura Documentos
Ciclomática
Engenharia de Software
Prof. Dr. Fábio Aiub Sperotto
fabio.sperotto@ifsc.edu.br
Introdução
●
Os testes caixa-branca são testes onde podemos verificar as
implementações;
●
Os primeiros testes que realizamos nesta categoria são os testes unitários;
●
Mais conceitos de testes na caixa-branca podem auxiliar numa métrica de
compreensão sobre o código, além de evidenciar que mais erros podem
acontecer (e os testes unitários ainda não serem suficientes). Podemos
garantir também que cada comando e condição da nossa aplicação, seja
executada pelo menos uma vez.
2
Complexidade Ciclomática - CC
●
A diferença com a cobertura de testes fica no contexto, isto é, aqui vamos
calcular caminhos independentes.
●
A CC É uma medida de complexidade de programa baseada no número de
estruturas de controle e repetição. Proposta originalmente por McCabe, em
1976 com revisões em 1996.
●
Não é relacionado a qualidade de código e sim da complexidade do mesmo.
●
Indica o número máximo de execuções necessárias para testar ou exercitar
todas as instruções do programa. É aplicada em cada função mas pode ser
aplicada por toda uma classe.
●
Formas de cálculo:
– Simplificada;
●
Para determinação do cálculo CC Simplificado, podemos contabilizar as
estruturas de controle/decisão. Cada uma recebe 1 ponto:
– IF-THEN: 1 ponto;
– IF-THEN-ELSE: 1 ponto;
– FOR: 1 ponto;
– WHILE: 1 ponto;
4
Complexidade Ciclomática - Simplificado
6
Qual o CCS?
7
Complexidade Ciclomática - Simplificado
●
Exemplo:
●
CCS = 1 (IF) + 1;
●
CCS = 2;
8
Complexidade Ciclomática - Simplificado
●
Exemplo:
●
CCS = 1 (FOR) + 1 (IF) + 1 = 3;
9
Complexidade Ciclomática - Simplificado
●
Exemplo:
Fonte
●
CCS = x + 1 = ?
10
Complexidade Ciclomática - Fluxograma
●
A forma completa de cálculo ciclomático define a execução do código
no formato de fluxograma.
●
v(G) = e - n + 2, onde e e n são os números de arestas e nós, no
fluxograma de instruções. O 2 tem relação a componentes conectados,
subgrafo específico do contexto a ser calculado.
– v → número ciclomático;
●
Estruturas de controle são representadas em nós distintos que
indiquem a decisão e a repetição.
11
Complexidade Ciclomática - Fluxograma
12
Complexidade Ciclomática - Fluxograma
13
Complexidade Ciclomática - Fluxograma
14
Complexidade Ciclomática - Fluxograma
15
Complexidade Ciclomática - Fluxograma
16
Complexidade Ciclomática - Fluxograma
●
Exemplo:
●
CCS = 1 (IF) + 1 = 2;
●
v(G) = e - n + 2 => 4 arestas – 4 nós + 2 = 2;
17
Complexidade Ciclomática - Fluxograma
●
Exemplo:
●
CCS = 1 (FOR) + 1 = 2;
●
v(G) = e - n + 2 => 3 arestas - 3 nós + 2 = 2;
18
Complexidade Ciclomática - Fluxograma
●
Exemplo:
●
CCS = estruturas + 1 = ?;
●
v(G) = e - n + 2 => ? arestas - ? nós + 2 = ?;
19
Complexidade Ciclomática - Fluxograma
●
Exemplo:
●
CCS = 1 (FOR) + 1 (IF) + 1 = 3;
●
v(G) = e - n + 2 => 7 arestas - 6 nós + 2 = 3;
20
Complexidade Ciclomática - Fluxograma
●
Exemplo:
●
CCS = 1 (FOR) + 1 (IF) + 1 (AND) + 1 = 4;
●
v(G) = e - n + 2 => 9 arestas - 7 nós + 2 = 4;
21
Complexidade Ciclomática - Fluxograma
●
É possível utilizar ferramentas que geram fluxogramas das
implementações. Só tenha cuidado que nem sempre é gerado um
fluxograma correto baseado na contabilidade de CC.
●
Exemplo: utilize aplicações como https://app.code2flow.com e verifique o
cálculo para o algoritmo não recursivo de Euclides (verifica o maior
divisor entre dois números inteiros positivos), no slide a seguir.
●
Qual o v(G) que pode ser calculado?
22
Complexidade Ciclomática - Fluxograma
int euclidiano(int i, int j){
int small, large, remainder;
if (i <= j){
small = i;
}else{
small = j;
}
if (i <= j){
large = j;
}else{
large = i;
}
return large;
}
23
Complexidade Ciclomática - Fluxograma
●
Os estudos originais delimitam como ótimo a questão da CC manter-se
no máximo em 10. Podem existir implementações que até 15 ainda
demonstram boa CC:
26