2

Mutation testing: seus testes passam, mas será que pegam bug de verdade?

Mutation testing: injetar bugs de propósito pra ver se os testes pegam

Semana passada um bug foi pra produção num código com 90% de cobertura. O teste existia, passava, e não verificava nada de verdade. Foi aí que voltei a levar mutation testing a sério.

O problema: cobertura mente

Cobertura de testes conta quantas linhas rodaram, não se o teste checa alguma coisa. Dá pra ter 100% de cobertura com testes que chamam a função e não olham o resultado. A barra fica verde e você acha que está protegido.

Times com 80% a 90% de cobertura costumam ter mutation score de cerca de 30% (Codecov). Ou seja: 2 em cada 3 bugs plantados passariam batido.

O que é mutation testing

A ideia é simples: a ferramenta injeta "mutantes" no seu código (muda um operador, inverte um retorno, remove uma linha) e roda seus testes.

  • Algum teste falhou? Mutante morto (seus testes pegaram).
  • Todos passaram? Mutante sobreviveu (seus testes não pegam aquela falha).

Mutation score = mutantes mortos / total. É a métrica que mede a qualidade dos testes, não a quantidade.

Exemplo

function podeVotar(idade) {
  return idade >= 16
}

// teste que passa, cobertura 100%...
test('quem tem 18 pode votar', () => {
  expect(podeVotar(18)).toBe(true)
})

O mutation testing troca >= 16 por > 16. Sob esse mutante, podeVotar(16) vira false. O teste acima só checa 18 (que segue true), então ele passa e o mutante sobrevive. Um teste na borda (podeVotar(16)) mataria o mutante.

Onde isso importa em 2026

A IA hoje escreve o código E o teste. E ela adora escrever o teste que valida o próprio bug. Mutation testing é o jeito de checar se o teste que a IA gerou realmente presta.

Ferramentas maduras: Stryker (JS/TS), PITest (Java), mutmut (Python).

Pergunta

Vocês rodam mutation testing no CI ou param na cobertura? E confiam nos testes que o agente escreve sem checar?


Passo a passo pra rodar no seu projeto: https://www.techknow.com.br/post/mutation-testing-testes-ia

Carregando publicação patrocinada...