Close

O que é forma de verificação do código?

Neste artigo, você vai aprender como começar a usar a forma de verificação do código, encontrar a ferramenta certa e como fazer o cálculo.

Foto de Sten Pittet
Sten Pittet

Autor colaborador


A forma de verificação do código é uma métrica que pode ajudar você a entender quanto da fonte é testada. É uma métrica muito útil que pode ajudar a avaliar a qualidade do conjunto de testes e a gente vai ver aqui como você pode começar com os seus projetos.

Como a forma de verificação do código é calculada?


As ferramentas de forma de verificação do código vão usar um ou mais critérios para determinar como o código foi praticado ou não durante a execução do conjunto de testes. As métricas comuns que você pode ver mencionadas nos relatórios de cobertura incluem:

  • Cobertura de função: quantas das funções definidas foram chamadas.
  • Cobertura de instruções: quantas das declarações no programa foram executadas.
  • Cobertura de ramificações: quantas das ramificações das estruturas de controle (instruções if por exemplo) foram executadas.
  • Cobertura de condições: quantas das subexpressões booleanas foram testadas para um valor verdadeiro e falso.
  • Cobertura de linhas: quantas linhas de código-fonte foram testadas.

Essas métricas normalmente são representadas como o número de itens de fato testados, os itens encontrados no seu código e um percentual de cobertura (itens testados/itens encontrados).

Essas métricas estão relacionadas, mas são distintas. No script trivial abaixo, a gente tem uma função em JavaScript verificando se um argumento é ou não um múltiplo de 10. A gente vai usar essa função mais tarde para verificar se 100 é ou não um múltiplo de 10. Essa função vai ajudar a entender a diferença entre a cobertura de funções e a cobertura de ramificações.

Ver solução

Crie e opere softwares com o Open DevOps

Material relacionado

Testes automatizados para DevOps

coverage-tutorial.js

function isMultipleOf10(x) {   if (x % 10 == 0)     return true;   else    return false; }   console.log(isMultipleOf10(100));


A gente pode usar a ferramenta de cobertura Istanbul para ver quanto do código é executado quando a gente executa esse script. Depois de executar a ferramenta de cobertura, a gente tem acesso a um relatório de cobertura que mostra as métricas de cobertura. A gente pode ver que, embora a cobertura de funções seja de 100%, a cobertura de ramificações é de apenas 50%. A gente também pode ver que a ferramenta de forma de verificação do código Istanbul não está calculando uma métrica de cobertura de condições.

Como obter um relatório de cobertura na linha de comando

O motivo é que quando a gente executa o script, a instrução else não é executada. Se a gente quisesse ter 100% de cobertura, a gente poderia apenas adicionar outra linha, outro teste em essência, para garantir que todas as ramificações da instrução if sejam usadas.

coverage-tutorial.js

function isMultipleOf10(x) {   if (x % 10 == 0)     return true;   else     return false; }   console.log(isMultipleOf10(100)); console.log(isMultipleOf10(34)); // This will make our code execute the "return false;" statement.  


Uma segunda execução da ferramenta de cobertura vai mostrar agora que 100% da fonte está coberta graças às duas instruções console.log() na parte inferior.

Como obter 100% de cobertura em todos os critérios

Neste exemplo, a gente apenas registrou os resultados no terminal, mas o mesmo princípio se aplica quando você executa o conjunto de testes. A ferramenta da forma de verificação do código vai monitorar a execução do conjunto de testes e informar quanto das instruções, ramificações, funções e linhas foram executadas como parte dos testes.

Istanbul para JavaScript pode mostrar um relatório detalhado da cobertura de cada caminho

Como começar a usar a forma de verificação do código


Encontre a ferramenta certa para o projeto

Você pode encontrar várias opções para criar relatórios de cobertura, dependendo da linguagem que usar. Algumas das ferramentas populares estão listadas abaixo:

Algumas ferramentas como Istanbul vão produzir os resultados direto no terminal, enquanto outras podem gerar um relatório completo em HTML que permite explorar qual parte do código está sem cobertura.

Que percentual de cobertura você deve almejar?

Não há solução mágica na forma de verificação do código e uma alta porcentagem de cobertura ainda pode ser problemática se partes essenciais do aplicativo não estiverem sendo testadas ou se os testes existentes não forem robustos o suficiente para capturar as falhas com antecipação. Assim, é aceito que uma cobertura de 80% é uma boa meta a ser alcançada. Tentar alcançar uma cobertura mais alta pode ser caro, embora não produza os benefícios suficientes.

Na primeira vez que você executar sua ferramenta de cobertura, você pode achar que tem uma porcentagem muito baixa de cobertura. Se estiver apenas começando com os testes, é uma situação normal para estar e você não deve sentir a pressão de atingir 80% de cobertura de imediato. A razão é que se apressar em uma meta de cobertura pode pressionar a equipe a escrever testes que estão atingindo todas as linhas do código em vez de escrever testes que são baseados nos requisitos da empresa do seu aplicativo.

Por exemplo, no exemplo acima, a gente atingiu 100% de cobertura testando se 100 e 34 eram múltiplos de 10. Mas e se a gente usasse a função com letra em vez de número? Será que a gente teria um resultado verdadeiro/falso? Ou será que a gente teria uma exceção? É importante que você dê tempo à equipe para pensar em testar de uma perspectiva do usuário e não apenas olhando para linhas de código. A forma de verificação do código não vai dizer se você está deixando algo passar em sua fonte.

Foque primeiro nos testes de unidade

Os testes de unidades consistem em garantir que os métodos individuais das classes e componentes usados pelo aplicativo estejam funcionando. Em geral, eles são baratos de implementar e rápidos de executar e ainda oferecem uma garantia geral de que a base da plataforma é sólida. Um jeito simples de aumentar com rapidez a forma de verificação do código é começar adicionando testes de unidades, porque, por definição, eles devem ajudar você a garantir que o conjunto de testes esteja alcançando todas as linhas de código.

Use relatórios de cobertura para identificar falhas nos testes

Em breve, você vai ter tantos testes no código que vai ser impossível você saber qual parte do aplicativo é verificada durante a execução do conjunto de testes. Você vai saber o que deixa de funcionar quando você obtém um build vermelho, mas vai ser difícil você entender quais componentes passaram nos testes.

É aqui que os relatórios de cobertura podem proporcionar orientação acionável para a equipe. A maioria das ferramentas vai permitir que você analise os relatórios de cobertura para ver os itens reais que não foram cobertos pelos testes e usar esses relatórios para identificar partes essenciais do aplicativo que ainda precisam ser testadas.

SimpleCov para Ruby pode mostrar quais métodos não foram testados

Torne a forma de verificação do código parte do fluxo de integração contínua quando estiver pronto

Quando você estabelece o fluxo de trabalho de integração contínua (CI), você pode começar a falhar nos testes se você não atingir uma porcentagem de cobertura alta o suficiente. É claro que, como foi dito antes, não seria razoável definir o limite de falha muito alto e é bem provável que 90% de cobertura vai fazer com que o build falhe muito. Se a meta for 80% de cobertura, você pode considerar definir um limite de falha em 70% como uma rede de segurança para a cultura de CI.

Mais uma vez, tenha cuidado para evitar passar a mensagem errada, pois pressionar a equipe para alcançar uma boa cobertura pode levar a práticas de teste ineficientes.

Boa cobertura não é igual a bons testes

Para ter uma ótima cultura de testes é preciso começar fazendo com que a equipe entenda como o aplicativo deve se comportar quando alguém o usa do jeito certo, mas também quando alguém tenta fazer ele parar de funcionar. As ferramentas de forma de verificação do código podem ajudar você a entender onde você deve focar a atenção em seguida, mas elas não vão dizer se os testes existentes são robustos o suficiente para comportamentos inesperados.

Alcançar uma grande cobertura é um excelente objetivo, mas deve ser combinado com um conjunto de testes robusto que possa garantir que as classes individuais não deixem de funcionar e verifiquem a integridade do sistema.

Saiba mais com Os diferentes tipos de testes de software.

Sten Pittet
Sten Pittet

Estou no ramo de software há 10 anos, em diversas funções, de desenvolvimento a gerenciamento de produto. Depois de passar os últimos 5 anos na Atlassian trabalhando em Ferramentas de Desenvolvimento, agora escrevo sobre como compilar software. Fora do trabalho, estou aprimorando minhas habilidades como pai de uma criancinha maravilhosa.


Compartilhe este artigo

Leitura recomendada

Marque esses recursos para aprender sobre os tipos de equipes de DevOps ou para obter atualizações contínuas sobre DevOps na Atlassian.

Ilustração DevOps

Comunidade de DevOps

Ilustração DevOps

Leia o blog

Ilustração do mapa

Comece gratuitamente

Inscreva-se para receber a newsletter de DevOps

Thank you for signing up