Testes de Mutação
Uma técnica para avaliar a qualidade dos testes introduzindo pequenas mudanças (mutações) no código e verificando se os testes as detectam. Mutações não detectadas indicam testes fracos.
Definicao
Testes de mutação criam "mutantes" — cópias do código com pequenas mudanças como inverter operadores (> para <), remover declarações ou mudar valores de retorno. Bons testes devem falhar ao executar contra mutantes ("matá-los"). Mutantes sobreviventes revelam lacunas na cobertura de testes ou asserções. Ferramentas incluem Stryker (JavaScript/TypeScript), PIT (Java) e mutmut (Python). Mutation score = mutantes mortos / total de mutantes.
Por que e importante
A cobertura de código pode ser alta enquanto testes ainda são fracos (ex. testes que exercitam código sem verificar resultados). Testes de mutação medem a eficácia real dos testes. Pesquisas mostram que testes de mutação encontram 2-4 vezes mais defeitos que testes baseados em cobertura.
Exemplo
Código: if (age >= 18) return true. Um mutante muda >= para >. Se testes não detectam isso (todos os usuários de teste são >18, nenhum exatamente 18), o mutante sobrevive, revelando um teste de caso limite faltando.