Pular para o conteúdo
The Codeherd

Por que parei de perseguir 100% de cobertura

1 min

Cobertura é um mapa, não o território. Onde eu gasto o orçamento de testes agora — e o único número que ainda acompanho de perto.

Perseguir os últimos pontos percentuais de cobertura, na maior parte das vezes, só compra testes para código que não tem como falhar de forma relevante — getters, construtores triviais, ramos de erro que existem só pra satisfazer um linter. Escrever esses testes parecia produtivo e não ensinava nada sobre o sistema. Os bugs que de fato chegavam em produção quase nunca estavam nos 4% sem teste; estavam nas interações entre partes bem testadas que ninguém tinha pensado em testar juntas.

Onde eu gasto o orçamento agora: nas fronteiras. Todo lugar em que um dado cruza uma linha de confiança — um handler de request, uma escrita no banco, a resposta de uma API de terceiro — ganha um teste que exercita o formato de um payload real, incluindo os malformados. É uma fração pequena do código em número de linhas e uma fração grande de onde os incidentes de fato começam.

O único número que ainda acompanho de perto é o mutation score especificamente nesse código de fronteira, não a cobertura. Uma suíte de testes pode bater 100% de cobertura de linha sem afirmar nada de relevante; teste de mutação pega isso ao checar se uma versão deliberadamente quebrada do código de fato faz um teste falhar. Se um mutante sobrevive em código de fronteira, esse é o próximo teste a escrever.