Code Ferramenta de Cobertura: Teste de Declarações, Ramificações e Decisões

⚡ Resumo Inteligente

Code A cobertura é uma métrica de caixa branca que indica o grau em que o código-fonte foi testado por um conjunto de testes.ping As equipes localizam instruções, ramificações, condições e caminhos não testados que podem conter defeitos ocultos.

  • 🎯 Definição: Code A cobertura quantifica a quantidade de código-fonte que seus testes realmente executam.
  • 📊 Métodos: Existem cinco métodos: cobertura por declaração, decisão, ramificação, condição e máquina de estados finitos.
  • 🧩 Declaração vs. Ramificação: A cobertura de declarações verifica as linhas, enquanto a cobertura de agências verifica o resultado de cada decisão.
  • ⚖️ Code vs Funcional: Code As medidas de cobertura exercitaram o código; as medidas de cobertura funcional abrangeram os requisitos.
  • 🛠️ Ferramentas: Cobertura, OpenCloverEMMA e Sonar automatizam a medição da cobertura.
  • 🤖 Assistência de IA: As ferramentas de IA geram testes e identificam automaticamente lacunas de cobertura de alto risco que ainda não foram testadas.

Code Tutorial de cobertura

O que é a Code Cobertura?

Code cobertura É uma medida que descreve o grau em que o código-fonte de um programa foi testado. É uma forma de teste de caixa branca que identifica as áreas de um programa que não foram testadas por um conjunto de casos de teste. Também ajuda a criar casos de teste adicionais para aumentar a cobertura e determinar uma medida quantitativa da cobertura de código.

Na maioria dos casos, um sistema de cobertura de código coleta informações sobre o programa em execução. Em seguida, combina essas informações com o código-fonte para gerar um relatório sobre a cobertura de código do conjunto de testes.

Por que usar Code Teste de cobertura?

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

  • Isso ajuda a medir a eficiência da implementação dos testes.
  • Oferece uma medição quantitativa dos testes.
  • Ele define o grau em que o código-fonte foi testado.

Code Métodos de cobertura

A seguir, apresentamos os principais métodos de cobertura de código:

  • Cobertura do extrato
  • Cobertura de decisão
  • Cobertura de Filial
  • Toggle Cobertura
  • Cobertura FSM

Cobertura do extrato

Cobertura do extrato A cobertura de instruções é 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. Ela é usada para calcular o número de instruções no código-fonte que foram executadas. O principal objetivo da cobertura de instruções é abranger todos os caminhos, linhas e instruções possíveis no código-fonte.

A cobertura de instruções é usada para derivar cenários com base na estrutura do código em teste.

Cobertura do extrato

No teste de caixa branca, o testador concentra-se em como o software funciona. Em outras palavras, o testador concentra-se no funcionamento interno do código-fonte, considerando os diagramas de fluxo de controle ou fluxogramas.

Geralmente, em qualquer software, se você analisar o código-fonte, encontrará uma grande variedade de elementos como operadores, funções, etc.ping, manipuladores de exceção e assim por diante. Dependendo da entrada do programa, algumas instruções de código podem não ser executadas. O objetivo da cobertura de instruções é cobrir todos os caminhos, linhas e instruções possíveis no código.

Vamos entender isso com um exemplo de como calcular a cobertura de instruções. Aqui, consideramos dois cenários diferentes para verificar a porcentagem de cobertura de instruções em cada cenário.

fonte Code:

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

Cenário de Cobertura da Declaração 1

As instruções marcadas em amarelo são aquelas que foram executadas conforme o cenário. Número de instruções executadas = 5, Número total de instruções = 7, portanto, Cobertura de instruções = 5/7 = 71%.

Cenário 2: Se A = -3, B = -9

Cenário de Cobertura da Declaração 2

As instruções marcadas em amarelo são aquelas que foram executadas conforme o cenário. Número de instruções executadas = 6, Número total de instruções = 7, portanto, Cobertura de instruções = 6/7 = 85%.

Mas, no geral, como você pode ver, todas as afirmações são contempladas pelos dois cenários. Portanto, podemos concluir que a cobertura geral das afirmações é de 100%.

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

  1. Declarações não utilizadas
  2. Dead Code
  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 reporta os resultados verdadeiro ou falso de cada expressão booleana no 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.

Nesse tipo de cobertura, as expressões podem se tornar complexas, dificultando a obtenção de 100% de cobertura. Por isso, diversos métodos são utilizados para reportar essa métrica. Esses métodos priorizam as combinações mais críticas. Embora seja semelhante à cobertura de ramificação, oferece 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. O resultado "Não" da decisão (a>5) é verificado, portanto, a Cobertura da Decisão é de 50%.

Cenário 2: O valor de a é 6. O resultado "Sim" da decisão (a>5) é verificado, portanto, a Cobertura da Decisão é de 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 A cobertura de ramificação é um método de teste de caixa branca no qual cada resultado de um módulo de código (instrução ou laço) é 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. Ela ajuda a medir a proporção de segmentos de código independentes e a identificar seções que não possuem 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:

Fórmula de cobertura de agências

Exemplo de cobertura de filial

Para aprender sobre cobertura de ramificação, considere o mesmo exemplo usado anteriormente. A cobertura de ramificação também considerará a ramificação 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:

  • Permite validar todos os ramos do código.
  • Ajuda a garantir que nenhuma ramificação cause qualquer anormalidade na operação do programa.
  • Remove problemas que ocorrem devido aos testes de cobertura de instruções.
  • Permite encontrar áreas que não são testadas por outros métodos de teste.
  • Permite encontrar uma medida quantitativa da cobertura de código.
  • A cobertura de ramificações ignora ramificações dentro de expressões booleanas.

Teste de cobertura de condição

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

Por exemplo, se uma expressão tiver operações booleanas como AND, OR ou XOR, isso indica o total de possibilidades. A cobertura de condições não garante a cobertura total de decisões.

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

Fórmula de cobertura da condição

Para uma expressão com dois operandos, existem quatro combinações possíveis: TT, FF, TF e FT. Considere a entrada X=3, Y=4 (x b) FALSO, o que resulta em uma cobertura de condição de 1/4 = 25%.

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 ela se baseia no comportamento do projeto. Nesse método de cobertura, é necessário observar quantas vezes estados específicos são visitados ou transitados. Também verifica quantas sequências estão incluídas em uma máquina de estados finitos.

Qual tipo de Code Cobertura à sua escolha

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

  • O código em teste apresenta um ou mais defeitos não detectados.
  • custo da possível penalidade,
  • custo da reputação perdida,
  • custo das vendas perdidas, e assim por diante.

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.

Code Cobertura versus Cobertura Funcional

Code Global Cobertura Funcional
Indica o quão bem o código-fonte foi testado pela sua plataforma de testes. Mede o quão bem a funcionalidade do projeto foi coberta pela sua bancada de testes.
Nunca utiliza uma especificação de projeto. Utiliza uma especificação de projeto.
Feito pelos desenvolvedores. Feito pelos testadores.

Code Ferramentas de cobertura

Segue uma lista de ferramentas importantes para análise de cobertura de código:

Nome da Ferramenta Descrição
Cobertura Uma ferramenta de código aberto para cobertura de código. Ela mede a cobertura de testes instrumentando uma base de código e analisando quais linhas de código são executadas e quais não são quando o conjunto de testes é executado.
Trevo Trevo (OpenCloverAlém disso, reduz o tempo de teste, executando apenas os testes que abrangem o código do aplicativo modificado desde a versão anterior.
Parceiro de desenvolvimento DevPartner permite que os desenvolvedores analisem Java Código para qualidade e complexidade do código.
Emma O EMMA oferece suporte à cobertura de classe, método, linha e bloco básico, agregada nos níveis de arquivo de origem, classe e método.
Kalistick Kalistick é um aplicativo de terceiros que analisa o código sob diferentes perspectivas.
CoView e CoAnt Uma ferramenta de cobertura de código para métricas, criação de objetos mock, testabilidade de código, cobertura de caminhos e ramificações, e muito mais.
Alvo para C++ BullseyeCoverage é uma ferramenta de cobertura de código para C++ e C.
Sonar O Sonar é uma ferramenta de código aberto para cobertura de código que ajuda você a gerenciar a qualidade do código.

Vantagens e Desvantagens de Usar Code Global

Vantagens Desvantagens
Útil para avaliar uma medida quantitativa da cobertura de código. Mesmo quando uma funcionalidade específica não é implementada no projeto, a cobertura de código ainda indica 100%.
Permite criar casos de teste adicionais para aumentar a cobertura. Não é possível determinar se todos os valores possíveis de uma funcionalidade foram testados usando a cobertura de código.
Permite encontrar as áreas de um programa que não foram testadas por um conjunto de casos de teste. Code A abrangência não indica o quanto e quão bem você abordou sua lógica.

Perguntas Frequentes

Muitas equipes estabelecem uma meta prática de 70% a 80%. Atingir 100% raramente é economicamente viável. Concentre-se em cobrir a lógica crítica e de alto risco, em vez de perseguir um único número em toda a base de código.

Não. A cobertura completa comprova que todas as linhas de teste foram executadas, não que todas as entradas, valores ou requisitos foram validados. Erros de lógica e funcionalidades ausentes ainda podem passar despercebidos, portanto, a cobertura complementa, e não substitui, um bom projeto de teste.

Code A cobertura mede a quantidade de código-fonte que é executada durante os testes. A cobertura de testes é mais abrangente. tracO rei avalia o quão bem os testes abordam os requisitos, as funcionalidades e os riscos. Code A cobertura é um dos fatores que influenciam a cobertura geral dos testes.

Não. Você pode atingir 100% de cobertura de instruções mesmo deixando ramificações sem testar, como um caminho `else` ausente. A cobertura de ramificações (decisões) é mais robusta porque engloba a cobertura de instruções e testa todos os resultados possíveis.

A IA analisa o código-fonte e os testes existentes para identificar caminhos não testados e de alto risco, sugerindo ou gerando novos casos de teste. O aprendizado de máquina também prioriza quais testes executar, reduzindo o tempo de resposta e mantendo a qualidade dos testes.ping Alta cobertura.

Sim. Ferramentas de IA como o Diffblue Cover analisam o código e escrevem testes unitários automaticamente para a lógica não coberta. Elas visam ramificações e condições de risco, aumentando a cobertura com muito menos esforço manual.

OpenClover Mede a cobertura de instruções, ramificações e métodos e coleta mais de 20 métricas. Cobertura, EMMA, e JaCoCo Existem outras opções gratuitas amplamente utilizadas para Java projetos.

A Cobertura de Condição/Decisão Modificada exige que cada condição em uma decisão afete o resultado de forma independente. É mais rigorosa do que a cobertura de ramificação e é obrigatória para softwares críticos de segurança, como aviônicos, de acordo com a norma DO-178C.

Resuma esta postagem com: