Revisão de Código Gerado por IA — O Que Verificar
Baixar PDFComo revisar código gerado por IA de forma eficiente. Checklist de segurança, padrões de qualidade, normalização de deviance e como evitar confiança cega.
"I'm not reviewing every line of code anymore, even for production stuff. It still feels uncomfortable." — Simon Willison
A maior armadilha do desenvolvimento com IA não é código errado — é código que parece certo mas não é. A cada output correto, o desenvolvedor confia mais na IA. Simon Willison chama isso de "normalização de deviance": a confiança crescente cega o revisor.
O ciclo da confiança cega
Iteração 1: IA gera código → você revisa TUDO → encontra 3 bugs
Iteração 5: IA gera código → você revisa 80% → encontra 1 bug
Iteração 10: IA gera código → você revisa 30% → não encontra nada
Iteração 15: IA gera código → você aceita sem revisar → BUG EM PRODUÇÃOCada output correto aumenta a confiança e diminui a revisão. Até que um output errado passa despercebido.
Checklist de revisão
Nível 1: Segurança (sempre)
- Nenhuma credencial hardcoded (API keys, passwords, tokens)
- Nenhum
eval(),exec(), ouFunction()com input do usuário - SQL/NoSQL injection prevenido (parameterized queries)
- XSS prevenido (sanitize de input, escape de output)
- CSRF tokens em mutations
- Rate limiting em endpoints públicos
- Auth middleware em rotas protegidas
- Nenhum
.envou secret no código
Nível 2: Comportamento (sempre)
- Implementação bate com a spec
- Todos os cenários da spec estão cobertos
- Edge cases tratados (null, vazio, overflow, timeout)
- Erros retornam códigos HTTP corretos
- Response não expõe dados sensíveis (password hash, internal IDs)
Nível 3: Qualidade (sempre)
- Tipos TypeScript corretos (sem
any) - Funções com ≤ 30 linhas
- Nomes descritivos (não
data2,temp,result) - Nenhum código morto (unreachable, commented out)
- Nenhuma dependência duplicada
Nível 4: Performance (quando relevante)
- N+1 queries prevenidas
- Pagination em listas
- Cache onde apropriado
- Nenhum loop infinito ou recursão sem base case
Padrões de código suspeitos
Código que "funciona" mas é errado
// ❌ Suspeito: any type
const processData = (data: any) => { ... }
// ❌ Suspeito: error swallowing
try {
await apiCall();
} catch (e) {
// silently ignore
}
// ❌ Suspeito: hardcoded values
const timeout = 30000; // por que 30s? documentado na spec?
// ❌ Suspeito: magic numbers
if (status === 418) { ... } // o que é 418?
// ❌ Suspeito: nested ternaries
const result = a ? b ? c : d : e ? f : g;Código que parece certo mas tem bug
// ❌ Bug sutil: race condition
const user = await db.users.findOne({ id });
if (!user) {
await db.users.create({ id, name }); // pode duplicar se chamado em paralelo
}
// ❌ Bug sutil: memory leak
const cache = new Map();
setInterval(() => {
cache.set(key, expensiveComputation()); // nunca limpa o cache
}, 1000);
// ❌ Bug sutil: type coercion
if (input == null) { ... } // aceita undefined E null — intencional?Como automatizar a revisão
Prompt de review
Review this code for:
1. Security issues (injection, XSS, auth bypass, secrets)
2. Behavioral correctness vs specs/[spec].md
3. TypeScript type safety (no any, no type assertions)
4. Error handling (no swallowed errors, proper HTTP codes)
5. Performance (N+1 queries, missing pagination, memory leaks)
For each issue found, output:
- FILE:LINE — description of the issue
- SEVERITY: critical/high/medium/low
- FIX: suggested correction
Code to review:
@file src/api/[file].tsReview em PR
git diff main | claude -p "Review this diff for security, correctness,
and code quality. For each issue, output the file, line number,
description, and suggested fix. Use severity levels: critical/high/medium/low."Referências
- Simon Willison: Vibe Coding vs Agentic Engineering — normalização de deviance
- Andrew Kelley (Zig): LLM-authored PRs are identifiable — "digital smell" de código IA
Prompt Engineering para Código — Templates e Padrões
Como escrever prompts que geram código de alta qualidade. Técnicas avançadas de prompt engineering específicas para desenvolvimento de software com LLMs.
Multi-Agent e MCP — Orquestração Avançada de Agentes
Como funcionam subagentes, MCP (Model Context Protocol), A2A (Agent-to-Agent) e orquestração avançada no Claude Code e Cursor.