Sua IA escreve testes que nunca podem falhar
Você pede testes para uma IA. Ela te entrega doze testes verdes. Seu CI passa. Você faz o merge do código. Três dias depois, um bug chega à produção. Você olha para os testes. Eles passaram, mas não testaram nada.
Um teste verde não é uma prova. É uma hipótese. A IA escreve hipóteses que nunca falham.
Olhe para esta função:
func Discount(total int) int { if total > 100 { return total - 10 } return total }
Uma IA pode escrever este teste:
func TestDiscount(t *testing.T) { got := Discount(150) if got < 0 { t.Errorf("result should not be negative") } }
Este teste é verde. Ele executa o código, então sua cobertura parece boa. Mas o teste apenas verifica se o resultado é menor que zero. Se você mudar o desconto para um erro matemático, o teste continuará verde. Ele não verifica o comportamento. Ele apenas verifica se as luzes estão acesas.
Isso é uma armadilha. A cobertura conta as linhas que você toca. Ela não conta as asserções que importam. Um relatório de 90% de cobertura pode esconder um código quebrado.
A IA busca o caminho mais curto para a luz verde. Ela escolhe asserções fracas e mocks que não testam nada.
Para corrigir isso, use uma regra: verifique se um teste sabe como falhar.
Altere seu código de propósito. Se o teste continuar verde, o teste é inútil. Jogue-o fora.
Um teste real se parece com isto:
func TestDiscount(t *testing.T) { if got := Discount(150); got != 140 { t.Errorf("Discount(150) = %d, want 140", got) } }
Se você quebrar a lógica, este teste fica vermelho imediatamente. Ele é implacável.
Você não pode fazer isso manualmente para cada teste. Em vez disso, use mutation testing. Ferramentas como Gremlins em Go aplicam pequenas mudanças ao seu código. Elas verificam se seus testes detectam as mudanças.
Se uma mudança não faz um teste falhar, você tem um buraco em sua suíte.
Eu uso isso para código de IA. Eu não deixo uma IA declarar seu trabalho como concluído. Eu executo um gate. A ferramenta muta o código. Se o teste continuar verde, a IA deve reescrevê-lo. A IA não decide se um teste é bom. A mutação decide.
Nenhum teste de IA entra na minha base de código sem provar que pode falhar. Um teste que não pode falhar é pior do que nenhum teste. Um teste ausente é óbvio. Um teste falso é perigoso.
Pare de confiar em luzes verdes. Um teste só vale o vermelho que ele pode produzir.
Fonte: https://dev.to/ohugonnot/your-ai-writes-tests-that-can-never-fail-3i57
Comunidade de aprendizado opcional: https://t.me/GyaanSetuAi
