O Que É um Relatório de Code Coverage?
Um relatório de code coverage mede quanto do seu código seus testes realmente executam - linha por linha, branch por branch.
Testes que passam dizem o que foi verificado, não o que foi deixado de fora. A instrumentação de cobertura registra quais linhas e branches foram executados durante a rodada de testes e produz um relatório, para que você veja os cantos não testados da base de código.
Como a cobertura é coletada
Uma ferramenta de cobertura instrumenta seu código (ou seu bytecode) para registrar quais linhas e branches rodam enquanto os testes executam, e então emite um relatório - frequentemente em um formato padrão como LCOV ou Cobertura para que o tooling o consuma.
O que os números significam
- Cobertura de linha: porcentagem de linhas executáveis que rodaram.
- Cobertura de branch: porcentagem de branches de decisão tomados.
- Cobertura de função: porcentagem de funções invocadas.
Um pequeno exemplo
Uma função com um if/else mostra 100% de cobertura de linha se um teste a executa uma vez, mas apenas 50% de cobertura de branch se nenhum teste exercita o else. A cobertura de branch expõe o caminho que seu número de cobertura de linha silenciosamente escondeu.
Os limites da cobertura
Cobertura alta significa que o código rodou, não que foi corretamente verificado por asserções. Um teste pode executar uma linha sem verificar seu resultado. A cobertura é um piso útil e um sinal de regressão, não uma prova de qualidade.
Cobertura como gate
Os times costumam usar a cobertura como gate - mas um "80%" genérico em uma base de código legada convida a manipulação. Usar como gate a cobertura das linhas alteradas ("não adicione código não testado") costuma ser um limiar mais honesto e acionável.
Principais conclusões
- A cobertura mede qual código os testes de fato executam.
- Cobertura de linha, de branch e de função respondem a perguntas diferentes.
- A cobertura mostra o que rodou, não se foi corretamente verificado por asserções.