Tutorial de cobertura de código: testes de ramificação, declaração e decisão

O que é a cobertura do Código?

A cobertura de código é uma medida que descreve o grau em que o código-fonte do programa foi testado. É uma forma de teste de caixa branca que encontra áreas do programa não exercidas por um conjunto de casos de teste. Também cria alguns casos de teste para aumentar a cobertura e determinar uma medida quantitativa de cobertura de código.

Na maioria dos casos, o sistema de cobertura de código reúne informações sobre o programa em execução. Ele também combina isso com informações de código-fonte para gerar um relatório sobre a cobertura de código do conjunto de testes.

Por que usar o teste de cobertura de código?

Aqui estão alguns motivos principais para usar a cobertura de código:

  • Ajuda você a medir a eficiência da implementação do teste
  • Ele oferece uma medição quantitativa.
  • Ele define o grau em que o código-fonte foi testado.

Métodos de cobertura de código

A seguir estão os principais métodos de cobertura de código

  • Cobertura da declaração
  • Cobertura de decisão
  • Cobertura de Filial
  • Toggle Cobertura
  • Cobertura FSM

Cobertura do extrato

Cobertura do extrato é uma técnica de teste de caixa branca na qual todas as instruções executáveis ​​no código-fonte são executadas pelo menos uma vez. É usado para calcular o número de instruções no código-fonte que foram executadas. O principal objetivo do Statement Coverage é cobrir todos os caminhos, linhas e instruções possíveis no código-fonte.

A cobertura de instrução é usada para derivar o cenário com base na estrutura do código em teste.

Cobertura do extrato

In Branco Box Ensaios, o testador está se concentrando em como o software funciona. Em outras palavras, o testador se concentrará no funcionamento interno do código-fonte em relação aos gráficos de fluxo de controle ou fluxogramas.

Geralmente, em qualquer software, se olharmos para o código-fonte, haverá uma grande variedade de elementos como operadores, funções, looping, manipuladores excepcionais, etc. Com base na entrada do programa, algumas das instruções do código podem não ser executadas . O objetivo da cobertura da instrução é cobrir todos os caminhos, linhas e instruções possíveis no código.

Vamos entender isso com um exemplo de como calcular a cobertura do extrato.

Cenário para calcular a cobertura da instrução para determinado código-fonte. Aqui estamos considerando dois cenários diferentes para verificar o percentual de cobertura do extrato para cada cenário.

Código fonte:

Prints (int a, int b) {                       ------------  Printsum is a function 
    int result = a+ b; 
    If (result> 0)
    	Print ("Positive", result)
    Else
    	Print ("Negative", result)
    }                                        -----------   End of the source code 

Cenário 1:

Se A = 3, B = 9

Cobertura do extrato

As instruções marcadas em amarelo são aquelas que são executadas conforme o cenário

Número de instruções executadas = 5, Número total de instruções = 7

Cobertura do extrato: 5/7 = 71%

Cobertura do extrato

Da mesma forma, veremos o cenário 2,

Cenário 2:

Se A = -3, B = -9

Cobertura do extrato

As instruções marcadas em amarelo são aquelas que são executadas conforme o cenário.

Número de instruções executadas = 6

Número total de declarações = 7

Cobertura do extrato

Cobertura do extrato: 6/7 = 85%

Cobertura do extrato

Mas no geral, se você observar, todas as afirmações estão sendo cobertas por ambos os cenários. Portanto, podemos concluir que a cobertura geral das demonstrações é de 100%.

Cobertura do extrato

O que é coberto pela Cobertura da Declaração?

  1. Declarações não utilizadas
  2. Código morto
  3. Ramos não utilizados
  4. Declarações ausentes

Teste de cobertura de decisão

Cobertura de decisão é uma técnica de teste de caixa branca que relata os resultados verdadeiros ou falsos de cada expressão booleana do código-fonte. O objetivo do teste de cobertura de decisão é cobrir e validar todo o código-fonte acessível, verificando e garantindo que cada ramificação de cada ponto de decisão possível seja executada pelo menos uma vez.

Neste tipo de cobertura, as expressões podem se tornar complexas, tornando desafiador atingir 100% de cobertura. É por isso que vários métodos são usados ​​para relatar esta métrica. Esses métodos priorizam as combinações mais críticas. Embora seja semelhante à cobertura de decisão, ele fornece maior sensibilidade ao fluxo de controle.

Teste de cobertura de decisão

Exemplo de cobertura de decisão

Considere o seguinte código-

Demo(int a) {                       
     If (a> 5)
    	a=a*3
     Print (a)
    }

Cenário 1:

O valor de a é 2

Teste de cobertura de decisão

O código destacado em amarelo será executado. Aqui o resultado “Não” da decisão If (a>5) é verificado.

Cobertura de Decisão = 50%

Cenário 2:

O valor de a é 6

Teste de cobertura de decisão

O código destacado em amarelo será executado. Aqui o resultado “Sim” da decisão Se (a>5) é verificado.

Cobertura de Decisão = 50%

Caso de teste Valor de A saída Cobertura de decisão
1 2 2 50%
2 6 18 50%

Teste de cobertura de filiais

Cobertura de Filial é um método de teste de caixa branca no qual cada resultado de um módulo de código (instrução ou loop) é testado. O objetivo da cobertura de filiais é garantir que cada condição de decisão de cada filial seja executada pelo menos uma vez. Ajuda a medir frações de segmentos de código independentes e a descobrir seções sem ramificações.

Por exemplo, se os resultados forem binários, você precisará testar os resultados Verdadeiro e Falso.

A fórmula para calcular a cobertura da agência:

Teste de cobertura de filiais

Exemplo de cobertura de filial

Para aprender a cobertura de agências, vamos considerar o mesmo exemplo usado anteriormente

Considere o seguinte código-

Demo(int a) {                       
     If (a> 5)
    	a=a*3
     Print (a)
    }                                       

Teste de cobertura de filiais

A cobertura da filial também considerará a filial incondicional

Caso de teste Valor de A saída Cobertura de decisão Cobertura de Filial
1 2 2 50% 33%
2 6 18 50% 67%

Vantagens da cobertura de filiais:

O teste de cobertura de filiais oferece as seguintes vantagens:

  • Permite validar todas as ramificações do código
  • Ajuda você a garantir que nenhuma ramificação leve a qualquer anormalidade na operação do programa
  • O método de cobertura de filiais elimina problemas que ocorrem devido aos testes de cobertura de extratos
  • Permite que você encontre áreas que não foram testadas por outros métodos de teste
  • Ele permite que você encontre uma medida quantitativa de cobertura de código
  • A cobertura de ramificação ignora ramificações dentro das expressões booleanas

Teste de cobertura de condição

Cobertura de condição ou cobertura de expressão é um método de teste usado para testar e avaliar as variáveis ​​ou subexpressões na instrução condicional. O objetivo da cobertura de condições é verificar os resultados individuais para cada condição lógica. A cobertura de condições oferece melhor sensibilidade ao fluxo de controle do que a cobertura de decisão. Nesta cobertura são consideradas apenas expressões com operandos lógicos.

Por exemplo, se uma expressão possui operações booleanas como AND, OR, XOR, que indica possibilidades totais.

A cobertura condicional não oferece garantia sobre a cobertura total da decisão.

A fórmula para calcular a Cobertura da Condição:

Teste de cobertura de condição

Exemplo:

Teste de cobertura de condição

Para a expressão acima, temos 4 combinações possíveis

  • TT
  • FF
  • TF
  • FT

Considere a seguinte entrada

X = 3

Y = 4

(x VERDADEIRO A cobertura da condição é ¼ = 25%
A = 3

B = 4

(a>b) FALSE

Cobertura de máquinas de estados finitos

A cobertura de máquinas de estados finitos é certamente o tipo mais complexo de método de cobertura de código. Isso ocorre porque atua no comportamento do design. Neste método de cobertura, você precisa procurar quantos estados específicos de tempo são visitados e transitados. Também verifica quantas sequências estão incluídas em uma máquina de estados finitos.

Que tipo de cobertura de código escolher

Esta é certamente a resposta mais difícil de dar. Para selecionar um método de cobertura, o testador precisa verificar se o

  • o código em teste tem um ou vários defeitos não descobertos
  • custo da penalidade potencial
  • custo da reputação perdida
  • custo de venda perdida, etc.

Quanto maior a probabilidade de os defeitos causarem falhas de produção dispendiosas, mais severo será o nível de cobertura que você precisa escolher.

Cobertura de código vs. cobertura funcional

Cobertura de código Cobertura Funcional
A cobertura do código informa o quão bem o código-fonte foi exercido pelo seu banco de testes. A cobertura funcional mede quão bem a funcionalidade do design foi coberta pela sua bancada de testes.
Nunca use uma especificação de projeto Usar especificação de projeto
Feito por desenvolvedores Feito por testadores

Ferramentas de cobertura de código

Aqui está uma lista de ferramentas importantes de cobertura de código:

Nome da Ferramenta Descrição
Cobertura É uma ferramenta de cobertura de código-fonte aberto. Ele mede a cobertura do teste instrumentando uma base de código e analisa quais linhas de código estão em execução e quais não são executadas quando o conjunto de testes é executado.
Trevo O Clover também reduz o tempo de teste executando apenas os testes que cobrem o código do aplicativo que foi modificado desde a compilação anterior.
Parceiro de desenvolvimento DevPartner permite que os desenvolvedores analisem Java código para Qualidade e Complexidade do Código.
Emma EMMA suporta cobertura de classe, método, linha e bloco base, arquivo de origem agregado, classe e níveis de método.
Kalistick Kalistick é um aplicativo de terceiros que analisa os códigos com diferentes perspectivas.
CoView e CoAnt Coding Software é uma ferramenta de cobertura de código para métricas, criação de objetos simulados, testabilidade de código, cobertura de caminho e ramificação, etc.
Alvo para C++ BulseyeCoverage é uma ferramenta de cobertura de código para C++ e C.
Sonar Sonar é uma ferramenta de cobertura de código aberto que ajuda você a gerenciar a qualidade do código.

Vantagens e desvantagens de usar cobertura de código

Vantagens de cobertura de código Desvantagens da cobertura de código
Útil para avaliar uma medida quantitativa de cobertura de código Mesmo quando qualquer recurso específico não é implementado no design, a cobertura de código ainda reporta 100% de cobertura.
Ele permite que você crie casos de teste extras para aumentar a cobertura Não é possível determinar se testamos todos os valores possíveis de um recurso com a ajuda da cobertura de código
Permite encontrar as áreas de um programa que não são exercidas por um conjunto de casos de teste A cobertura de código também não diz quanto e quão bem você cobriu sua lógica
No caso em que a função especificada não foi implementada ou não foi incluída na especificação, as técnicas baseadas em estrutura não conseguem encontrar esse problema.

Resumo

  • Cobertura de código é uma medida que descreve o grau em que o código-fonte do programa foi testado
  • Ajuda você a medir a eficiência da implementação do teste
  • Cinco métodos de cobertura de código são 1.) Cobertura de declaração 2.) Cobertura de condição 3) Cobertura de filial 4) Toggle Cobertura 5) Cobertura FSM
  • A cobertura de instruções envolve a execução de todas as instruções executáveis ​​no código-fonte pelo menos uma vez
  • A cobertura de decisão relata os resultados verdadeiros ou falsos de cada expressão booleana
  • Na cobertura de filiais, todos os resultados de um módulo de código são testados
  • Condicional revelará como as variáveis ​​ou subexpressões na declaração condicional são avaliadas
  • A cobertura de máquinas de estados finitos é certamente o tipo mais complexo de método de cobertura de código
  • Para selecionar um método de cobertura, o testador precisa verificar o custo da penalidade potencial, perda de reputação, perda de venda, etc.
  • A cobertura do código informa o quão bem o código-fonte foi exercido pelo seu banco de testes, enquanto a cobertura funcional mede o quão bem a funcionalidade do design foi coberta
  • Cobertura, JTest, Clover, Emma, ​​Kalistick são algumas ferramentas importantes de cobertura de código
  • A cobertura de código permite criar casos de teste extras para aumentar a cobertura
  • A cobertura de código não ajuda você a determinar se testamos todos os valores possíveis de um recurso