Complexidade Ciclomática em Teste de Software (Exemplo)

Qual é a complexidade ciclomática de McCabe?

Complexidade Ciclomática em Teste de Software é uma métrica de teste usada para medir a complexidade de um programa de software. É uma medida quantitativa de caminhos independentes no código-fonte de um programa de software. A complexidade ciclomática pode ser calculada usando gráficos de fluxo de controle ou em relação a funções, módulos, métodos ou classes dentro de um programa de software.

Caminho independente é definido como um caminho que possui pelo menos uma aresta que não foi percorrida antes em nenhum outro caminho.

Esta métrica foi desenvolvida por Thomas J. McCabe em 1976 e é baseada em uma representação do fluxo de controle do programa. O fluxo de controle descreve um programa como um gráfico que consiste em nós e arestas.

No gráfico, os nós representam tarefas de processamento enquanto as arestas representam o fluxo de controle entre os nós.

Complexidade ciclomática de McCabe

Notação de gráfico de fluxo para um programa

A notação Flow Graph para um programa define vários nós conectados pelas arestas. Abaixo estão diagramas de fluxo para instruções como if-else, While, Until e sequência normal de fluxo.

Notação de gráfico de fluxo para um programa

Como calcular a complexidade ciclomática

Representação matemática:

Matematicamente, é um conjunto de caminhos independentes através do diagrama gráfico. A complexidade do código do programa pode ser definida usando a fórmula –

V(G) = E - N + 2

Onde,

E – Número de arestas

N – Número de nós

V (G) = P + 1

Onde P = Número de nós predicados (nó que contém condição)

Exemplo -

i = 0;
n=4; //N-Number of nodes present in the graph

while (i<n-1) do
j = i + 1;

while (j<n) do

if A[i]<A[j] then
swap(A[i], A[j]);

end do;
j=j+1;

end do;

O gráfico de fluxo para este programa será

Calcule a complexidade ciclomática

Computando matematicamente,

  • V(G) = 9 – 7 + 2 = 4
  • V(G) = 3 + 1 = 4 (os nós de condição são 1,2 e 3 nós)
  • Conjunto Base – Um conjunto de possíveis caminhos de execução de um programa
  • 1, 7
  • 1, 2, 6, 1, 7
  • 1, 2, 3, 4, 5, 2, 6, 1, 7
  • 1, 2, 3, 5, 2, 6, 1, 7

Propriedades da complexidade ciclomática

A seguir estão as propriedades da complexidade ciclomática:

  1. V (G) é o número máximo de caminhos independentes no gráfico
  2. V(G) >=1
  3. G terá um caminho se V (G) = 1
  4. Minimize a complexidade para 10

Como essa métrica é útil para testes de software?

O teste do caminho básico é uma técnica de caixa branca e garante a execução de pelo menos uma instrução durante o teste. Ele verifica cada caminho linearmente independente através do programa, que significa número de casos de teste, será equivalente à complexidade ciclomática do programa.

Esta métrica é útil devido às propriedades da complexidade ciclomática (M) –

  1. M pode ser o número de casos de teste para obter cobertura de filial (limite superior)
  2. M pode ser o número de caminhos através dos gráficos. (Limite inferior)

Considere este exemplo -

If (Condition 1)
Statement 1

Else
Statement 2

If (Condition 2)
Statement 3

Else
Statement 4

A complexidade ciclomática para este programa será 8-7+2=3.

Como a complexidade foi calculada como 3, três casos de teste são necessários para a cobertura completa do caminho do exemplo acima.

Passos a serem seguidos:

As etapas a seguir devem ser seguidas para calcular a complexidade do Ciclomático e projetar casos de teste.

1º Passo – Construção de gráfico com nós e arestas do código

2º Passo – Identificação de caminhos independentes

3º Passo – Cálculo da Complexidade Ciclomática

4º Passo – Desenho de Casos de Teste

Uma vez formado o conjunto básico, CASOS DE TESTE deve ser escrito para executar todos os caminhos.

Mais sobre V (G)

A complexidade ciclomática pode ser calculada manualmente se o programa for pequeno. Ferramentas automatizadas precisam ser usadas se o programa for muito complexo, pois envolve mais gráficos de fluxo. Com base no número de complexidade, a equipe pode concluir sobre as ações que precisam ser tomadas para mensuração.

A tabela a seguir fornece uma visão geral do número de complexidade e do significado correspondente de v (G):

Número de complexidade Significado
1-10 Código estruturado e bem escrito

Alta testabilidade

Custo e esforço são menores

10-20 Código Complexo

Testabilidade média

Custo e esforço são médios

20-40 Código muito complexo

Baixa testabilidade

Custo e esforço são altos

> 40 Nem um pouco testável

Custo e esforço muito altos

Ferramentas para cálculo de complexidade ciclomática:

Muitas ferramentas estão disponíveis para determinar a complexidade do aplicativo. Algumas ferramentas de cálculo de complexidade são utilizadas para tecnologias específicas. A complexidade pode ser encontrada pelo número de pontos de decisão em um programa. Os pontos de decisão são instruções if, for, for-each, while, do, catch, case em um código-fonte.

Exemplos de ferramentas são

  • OCLint – Analisador de código estático para C e linguagens relacionadas
  • Suplemento Reflector – Métricas de código para montagens .NET
  • Métricas – Encontre métricas em Java aplicativos relacionados

Usos da Complexidade Ciclomática:

A Complexidade Ciclomática pode ser muito útil em

  • Ajuda desenvolvedores e testadores a determinar execuções de caminhos independentes
  • Os desenvolvedores podem garantir que todos os caminhos foram testados pelo menos uma vez
  • Ajuda-nos a focar mais nos caminhos descobertos
  • Melhore a cobertura do código em Engenharia de Software
  • Avalie o risco associado ao aplicativo ou programa
  • Usar essas métricas no início do ciclo reduz mais riscos do programa

Conclusão

Complexidade Ciclomática é uma métrica de software útil para aplicações estruturadas ou Branco Box Ensaios. É usado principalmente para avaliar a complexidade de um programa. Se os pontos de decisão forem maiores, a complexidade do programa será maior. Se o programa tiver um número de alta complexidade, a probabilidade de erro será alta, com maior tempo para manutenção e solução de problemas.