Olá a todos, preparados para o post de hoje sobre Questões de Certificação do CTFL?
Hoje estudaremos um assunto que cai bastante no teste de Certificação, porém é um assunto que poucos conhecem e que até mesmo o Syllabus não menciona, "Complexidade Ciclomática", assunto que por sinal só é possível ter uma teoria no Glossário de Termos de Teste da ISTQB.
A questão que iremos comentar foi retirada do Simulado nº 5 (disponínel em nosso blog, na área de download). Bons estudos.
S5Q7. Ainda com base no pseudocódigo apresentado na questão 5 (segue abaixo), qual a complexidade ciclomática do código?
a) 2
b) 3
c) 4
d) 5
Pseudocódigo da questão 05:
READ A
READ B
IF B > A THEN
MIN = A
IF B = 2*A THEN
PRINT “Bingo!”
ENDIF
ELSE
MIN = B
ENDIF
PRINT MIN
READ B
IF B > A THEN
MIN = A
IF B = 2*A THEN
PRINT “Bingo!”
ENDIF
ELSE
MIN = B
ENDIF
PRINT MIN
Comentários:
Complexidade ciclomática é uma métrica de software, desenvolvida por Thomas J. McCabe em 1976, que determina a complexidade de um programa estruturado (cíclico).
A complexidade ciclomática mede a quantidade de caminhos de execução independentes de um código fonte. Por exemplo, se o código fonte não contém estruturas de controle a complexidade é 1, já que há somente caminho válido através do código. Se o código tiver uma estrutura de seleção contendo uma condição (IF), então há dois caminhos possíveis, uma para quando a condição foi verdadeira e outra para quando a condição for falsa.
A forma mais prática de se avaliar a complexidade ciclomática de um código é convertendo-o a um grafo de fluxo de controle, onde os nós do grafo serão correspondidos a grupos indivisíveis de comando, e as aresta direcionada conecta dois nós (se o segundo comando poder ser executado imediatamente após o primeiro).
Matematicamente, a complexidade ciclomática é definida com referência ao grafo. Ela é definida pela seguinte formula:
CC = (A - N) + 2 x C
Onde,
- CC é a Complexidade Ciclomática
- A é o número de arestas do grafo
- N é o número de nós do grafo
- C é o número de componentes conectados
Iremos então converter esse nosso código para uma forma de grafo de fluxo de controle.
Com o grafo pronto fica bem mais fácil de resolver a questão. Temos duas maneiras de resolvé-la. Fazendo o fluxo de caminhos lógicos possíveis, ou usando a fórmula matemática da complexidade ciclomática.
Vamos primeiro pelo modo mais difícil (pelo menos de se entender), usando a fórmula matemática.
Analisando o grafo contamos que o mesmo tem 8 nós e 9 arestas (ligações entre os nós). Entendemos como componentes conectados a quantidade de entradas do grafo, como esse é um grafo simpes (com apenas um único ponto de entrada e saída) o número de componentes conectados é 1.
Com isso já podemos montar a nossa fórmula:
CC = (A - N) + 2 x C
CC = (9 -8) + 2 x 1
CC = 1 +2
CC = 3
Vamos agora pelo modo mais fácil de se encontrar a Complexidade Ciclomática, usando o grafo de fluxo.
Como vimos, a complexidade ciclomática medi o número de caminhos de uma determinada função.
Acima podemos visualizar que o código apresentado, possui 3 caminhos lógicos possíveis.
VERDE: Onde B é maior que A e 2xA é diferente de B (Exemplo: A=2 e B=3)
AZUL: Onde B é maior que A e 2xA é igual a B (Exemplo: A=1 e B=2)
VERMELHO: Onde B é menou ou igual a A (Exemplo: A=2 e B=1)
Logo a Complexidade Ciclomática é 3.
Como podemos ver, essa segunda forma é bem mais fácil, pois visualmente já temos como resolver a questão, além de que não será preciso decorrar a fórmula para que possamos resolver. Como temos muito assunto para estudar para a prova, uma Formula para decorrar não é uma boa solução, não acham?
Resposta: "B"
Fontes de Pesquisa:









Gostaria de ver um exemplo com mais de 1 componente conectado... Os nós e arestas desse outro componente seriam contados também?
ResponderExcluir