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.
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 = 9As 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%
Da mesma forma, veremos o cenário 2,
Cenário 2:
Se A = -3, B = -9
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: 6/7 = 85%
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%.
O que é coberto pela Cobertura da Declaração?
- Declarações não utilizadas
- Código morto
- Ramos não utilizados
- 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.
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
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
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:
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) }
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:
Exemplo:
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