O que é a cobertura do código?
A cobertura do 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 localiza as áreas do programa não exercidas por um conjunto de casos de teste. Ele 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 coleta 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.
Neste tutorial, você aprenderá-
- O que é a cobertura do código?
- Por que usar a cobertura de código?
- Métodos de cobertura de código
- Cobertura de Declaração
- Cobertura de Decisão
- Cobertura de filial
- Cobertura de condição
- Cobertura de máquina de estado finito
- Qual tipo de cobertura de código escolher
- Cobertura de código vs. cobertura funcional
- Ferramentas de cobertura de código
- Vantagens e desvantagens de usar a cobertura de código
Por que usar a 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 medida 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 de Declaração
- Cobertura de Decisão
- Cobertura de filial
- Alternar cobertura
- Cobertura FSM
Cobertura de Declaração
A cobertura de instrução é 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 objetivo principal da cobertura de declaração é cobrir todos os caminhos, linhas e declarações possíveis no código-fonte.
A cobertura da instrução é usada para derivar o cenário com base na estrutura do código em teste.
No teste de caixa branca, o testador se concentra em como o software funciona. Em outras palavras, o testador se concentrará no trabalho interno do código-fonte referente a 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, loop, 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 de declaração é cobrir todos os caminhos, linhas e declarações possíveis no código.
Vamos entender isso com um exemplo, como calcular a cobertura da instrução.
Cenário para calcular a cobertura de declaração para determinado código-fonte. Aqui, estamos pegando dois cenários diferentes para verificar a porcentagem de cobertura do demonstrativo para cada cenário.
Código fonte:
Prints (int a, int b) {------------ Printsum é uma funçãoresultado int = a + b;Se (resultado> 0)Imprimir ("Positivo", resultado)OutroImprimir ("Negativo", resultado)} ----------- Fim do código fonte
Cenário 1:
Se A = 3, B = 9
As declarações marcadas em amarelo são aquelas que são executadas de acordo com o cenário
Número de declarações executadas = 5, Número total de declarações = 7
Cobertura de extrato: 5/7 = 71%
Da mesma forma, veremos o cenário 2,
Cenário 2:
Se A = -3, B = -9
As declarações marcadas em amarelo são aquelas que são executadas de acordo com o cenário.
Número de declarações executadas = 6
Número total de afirmações = 7
Cobertura de extrato: 6/7 = 85%
Mas no geral, se você observar, todas as afirmações estão sendo abordadas pelo 2º cenário considerado. Portanto, podemos concluir que a cobertura geral da instrução é de 100%.
O que é coberto pela cobertura de declaração?
- Declarações não utilizadas
- Código Morto
- Ramos não utilizados
- Declarações ausentes
Cobertura de Decisão
A 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 executado pelo menos uma vez.
Nesta cobertura, as expressões às vezes podem ficar complicadas. Portanto, é muito difícil conseguir 100% de cobertura. É por isso que existem muitos métodos diferentes de relatar essa métrica. Todos esses métodos se concentram em cobrir as combinações mais importantes. É muito semelhante à cobertura de decisão, mas oferece melhor sensibilidade para controlar o fluxo.
Exemplo de cobertura de decisão
Considere o seguinte código
Demo (int a) {Se (a> 5)a = a * 3Imprimir (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 Se (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 | Resultado | Cobertura de Decisão |
1 | 2 | 2 | 50% |
2 | 6 | 18 | 50% |
Cobertura de filial
A cobertura de ramificação é um método de teste de caixa branca em que cada resultado de um módulo de código (instrução ou loop) é testado. O objetivo da cobertura de ramificação é garantir que cada condição de decisão de cada ramificação seja executada pelo menos uma vez. Ajuda a medir frações de segmentos de código independentes e descobrir seções sem ramificações.
Por exemplo, se os resultados são binários, você precisa testar os resultados Verdadeiro e Falso.
A fórmula para calcular a cobertura da filial:
Exemplo de cobertura de filial
Para aprender a cobertura da filial, vamos considerar o mesmo exemplo usado anteriormente
Considere o seguinte código
Demo (int a) {Se (a> 5)a = a * 3Imprimir (a)}
A cobertura de filial também considerará a filial incondicional
Caso de teste | Valor de A | Resultado | Cobertura de Decisão | Cobertura de filial |
1 | 2 | 2 | 50% | 33% |
2 | 6 | 18 | 50% | 67% |
Vantagens da cobertura de agência:
O teste de cobertura de filial oferece as seguintes vantagens:
- Permite que você valide - todos os ramos do código
- Ajuda a garantir que nenhuma derivação ramificada a qualquer anormalidade da operação do programa
- O método de cobertura de filial remove problemas que acontecem devido ao teste de cobertura de declaração
- Permite que você encontre as áreas que não são testadas por outros métodos de teste
- Ele permite que você encontre uma medida quantitativa de cobertura de código
- A cobertura de ramos ignora ramos dentro das expressões booleanas
Cobertura de condição
A 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 declaração condicional. O objetivo da cobertura de condição é verificar os resultados individuais para cada condição lógica. A cobertura de condição oferece melhor sensibilidade ao fluxo de controle do que a cobertura de decisão. Nesta cobertura, apenas expressões com operandos lógicos são consideradas.
Por exemplo, se uma expressão tiver operações booleanas como AND, OR, XOR, o que indica possibilidades totais.
A cobertura de condição não oferece garantia sobre a cobertura total de decisão.
A fórmula para calcular a cobertura de 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 |
VERDADE |
A cobertura de condição é ¼ = 25% |
A = 3 B = 4 |
(a> b) |
FALSO |
Cobertura de máquina de estado finito
A cobertura de máquina de estado finito é certamente o tipo mais complexo de método de cobertura de código. Isso ocorre porque ele funciona no comportamento do design. Neste método de cobertura, você precisa procurar quantos estados específicos de tempo foram visitados e transitados. Ele também verifica quantas sequências estão incluídas em uma máquina de estado finito.
Qual 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 da venda perdida, etc.
Quanto maior a probabilidade de que os defeitos causem 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 de código informa o quão bem o código-fonte foi exercido por sua bancada de teste. | A cobertura funcional mede o quão bem a funcionalidade do projeto foi coberta por sua bancada de teste. |
Nunca use uma especificação de design | Use a especificação de design |
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 sendo executadas 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. |
DevPartner | O DevPartner permite que os desenvolvedores analisem o código Java para qualidade e complexidade do código. |
Emma | O EMMA oferece suporte à cobertura de classe, método, linha e bloco de 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 | O software de codificação é uma ferramenta de cobertura de código para métricas, criação de objeto simulado, capacidade de teste de código, cobertura de caminho e ramificação, etc. |
Bullseye 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 de usar a cobertura de código
- Útil para avaliar uma medida quantitativa de cobertura de código
- Ele permite que você crie casos de teste extras para aumentar a cobertura
- Ele permite que você encontre as áreas de um programa que não são exercidas por um conjunto de casos de teste
Desvantagens de usar a cobertura de código
- Mesmo quando algum recurso específico não é implementado no design, a cobertura de código ainda relata 100% de cobertura.
- Não é possível determinar se testamos todos os valores possíveis de um recurso com a ajuda da cobertura de código
- A cobertura do código também não diz o 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 podem encontrar esse problema.
Resumo
- A cobertura do 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) Alternar cobertura 5) Cobertura de 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 da filial, cada resultado de um módulo de código é testado
- Condicional revelará como as variáveis ou subexpressões na declaração condicional são avaliadas
- A cobertura de máquina de estado finito é 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 de código informa o quão bem o código-fonte foi exercido por sua bancada de teste, 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 que você crie 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