Executando verificação de segurança...
45

Usar TDD deixou de ser opcional no mundo dos agentes de IA

Test-Driven Development (TDD) é uma prática de desenvolvimento em que você escreve os testes antes de escrever o código. O ciclo é simples: escreva um teste que falha, implemente o mínimo de código para ele passar, refatore. Repetido em loop, isso garante que o código faça exatamente o que foi especificado.

Muita gente usa IA assim: manda a classe pronta e pede para gerar testes.

O problema é que o modelo só está completando um quebra-cabeça de tokens. Ele gera testes que combinam com o código existente, não necessariamente com o comportamento correto.

Para o modelo, ele não está realmente entendendo o sistema. Ele só está tentando prever o próximo token provável. Então o teste acaba sendo apenas uma continuação lógica do código.

Invertendo o processo

O que funcionou para mim foi inverter isso usando TDD.

  1. O agente lê os requisitos funcionais.
  2. O agente gera testes baseados nesses requisitos.
  3. Eu limpo o contexto (novo agente, contexto zerado).
  4. Peço para ele implementar o código que faça os testes passarem.

Nesse ponto o agente só tem um objetivo claro: fazer os testes passarem.

Ele tenta, falha, tenta de novo, em loop, até conseguir.

Por que isso funciona

Isso funciona porque testes são determinísticos. Para o mesmo código, o resultado sempre será o mesmo.

agentes não são determinísticos. Existe aleatoriedade, existe alucinação, e nós não temos controle total sobre o que o modelo vai gerar.

Então tudo o que pudermos construir para conter esse comportamento ajuda.

Testes acabam virando exatamente isso: uma espécie de gaiola para controlar o comportamento caótico dos agentes.

Bugs também

Já usei essa abordagem em projetos críticos onde bugs simplesmente não eram uma opção. O fluxo era: primeiro fazer o agente criar um teste que realmente quebra e reproduz o problema. Só depois pedir para corrigir.

Porque se você apenas pedir para a IA "arrumar o bug", ela pode simplesmente inventar uma solução e afirmar que resolveu.

Mas teste não mente.

Teste cria um feedback loop forçado.

Uma boa prática que virou obrigação

No mundo dos agentes de IA, TDD deixou de ser uma boa prática opcional e passou a ser praticamente obrigatório.

Com código gerado por IA, vimos um boom de testes automatizados. Isso fez uma grande diferença: código sem teste perdeu valor, porque agora gerar testes não custa mais nada. Mas podemos ir a um nível acima. Em vez de gerar testes para o código, geramos testes para os requisitos. Isso é TDD, e é o próximo passo.

Carregando publicação patrocinada...
6

Exatamente! Excelente post.

O mais irônico disso tudo é que testes baseados em requisitos são o padrão ouro de sistemas críticos desde os anos 80. Basicamente, é por isso que avião não cai do céu (embora a Boeing discorde rs). O agile "matou" os requisitos funcionais. E agora a IA está nos forçando a trazê-lo de volta.

O próximo passo lógico é repensar onde colocamos nosso esforço humano!!! Hoje nosso tempo é muito mais valioso revisando (escrever é passado) os testes do que o código em si. Porque o teste é a verdadeira especificação do sistema.

Além disso, TDD é só o começo.

Adiciono três pontos cruciais para essa abordagem:

  1. Testes de Mutação são obrigatórios: A IA e o estag adoram criar testes com asserts fracos só para ganhar cobertura. O teste de mutação é o 'detector de mentiras' para garantir que os testes realmente pegam bugs.

  2. 100% de cobertura é o minímo: O que antes era caro e exaustivo em horas, hoje tem custo quase zero. Não é mais opcional.

  3. Rastreabilidade: Tenha evidências de qual requisito cada linha de código implementa e de qual teste está cobrindo ela.

2

Post extremamente relevante, eu mesmo ja caí no errado de gerar suíte de testes depois da implementação pronta.

O que rolou foi que o agente gerou testes de cobertura que passavam, porém uma regra de negócio do código base estava errada e o teste dessa regra foi feito para aceitar um comportamento que eu NÃO queria e que na verdade era um bug.

2
1

Eventualmente TDD se torna uma skill que é adicionada ao workflow, opcionalmente. Quem não precisar não vai adicioná-la como rule no AGENTS.md. Mas se precisar, já poderia estrar como default. Acho até que vai se tornar invisível.

1

Excelente post! 👏

Faz muito sentido essa abordagem de gerar testes a partir dos requisitos e depois implementar o código para fazê-los passar. No contexto de código gerado por IA, os testes realmente viram uma “gaiola” para garantir comportamento correto e evitar alucinações do modelo.

Com certeza é algo que vou começar a aplicar mais no dia a dia, principalmente para manter mais controle e confiança no código gerado por agentes.

1

Post excelente! Sobre esse problema das IAs, a gente percebe isso na prática rápido.

Já tive caso da IA "corrigir" um bug no meu ambiente de desenvolvimento e continuar quebrando em produção. Ela simplesmente mudou o código e declarou vitória sem considerar as nuances de um cenário real aonde os usuários podem ser leigos e até imprevisíveis kkkk

Quando você força primeiro um teste que reproduz o bug, acabou a conversa. Ou passa ou não passa.

No fim das contas o teste vira o único árbitro confiável nesse caos probabilístico das IAs.

1