Como fazer code review quando o código veio da IA
TL;DR - Trate como código de júnior esperto: foco em contratos, edge cases e dependências novas, não em estilo. As armadilhas reais são testes enganosos e “magic” que ninguém sabe debugar.
Code review de PR com código gerado por IA pede mentalidade diferente. O estilo costuma estar ok; o que falha é lógica, cantos do mapa e dependências que você não pediu. Eu reviso com três eixos: contratos, testes e dependências.
flowchart TB
Codigo[Código da IA] --> Contratos[Contratos e entradas/saídas]
Codigo --> Testes[Testes cobrem feliz e infeliz?]
Codigo --> Deps[Dependências novas?]
Contratos --> Aprovacao[Aprovar ou devolver]
Testes --> Aprovacao
Deps --> Aprovacao
1. Contratos e entradas/saídas
A função faz exatamente o que o chamador espera? Nome e assinatura batem com o comportamento? Entradas inválidas ou vazias estão tratadas?
Eu olho isso antes de qualquer outra coisa. Código de IA tende a cobrir o caminho feliz e esquecer null, lista vazia, string em branco ou número fora do intervalo. Vale perguntar: “e se alguém passar X?” e checar se há tratamento ou falha explícita.
2. Testes: feliz e infeliz
Existem testes? Cobrem o caminho feliz e pelo menos um infeliz?
Código de IA às vezes passa nos casos óbvios e quebra no primeiro cenário real. Testes que só repetem o que o código faz (sem assertions de negócio) também são armadilha: dão sensação de cobertura sem garantir comportamento. Eu exijo pelo menos um caso “quando dá errado” antes de aprovar.
3. Dependências novas
Apareceu lib ou framework que a equipe não usa? Entenda o que faz antes de aprovar.
Cada dependência nova é dívida: alguém vai ter que debugar, atualizar e explicar. Evito “magic” que ninguém no time sabe destrinchar. Se a IA trouxe uma solução com lib exótica, prefiro trocar por algo que já usamos, mesmo que o código fique um pouco mais verboso.
Mentalidade que ajuda
Trate como código de um júnior muito esperto e um pouco distraído. Revise com o mesmo rigor; não assuma que está certo só porque “a IA escreveu”. O que você ganha em velocidade de geração pode perder em bugs sutis e dívida escondida. Foco em contratos, edge cases e dependências deixa o review produtivo e o código seguro para merge.