Code Review que Pega Bug de Verdade: Checklist
A maioria dos code reviews e teatro. O dev olha por 5 minutos, marca approved e segue a vida. Aqui ta o checklist que realmente pega os bugs
Code review nao e sobre estilo
Code Review que Pega Bug de Verdade: Checklist. A maioria dos code reviews e teatro. O dev olha por 5 minutos, marca approved e segue a vida. Aqui ta o checklist que realmente pega os bugs que importam — os que custam caro.
90% dos code reviews sao teatro
Vou ser direto: a maioria dos code reviews no mercado nao serve pra nada. O dev abre o PR, olha por 3 minutos, deixa um comentario sobre nome de variavel ou indentacao, marca approved e segue com a vida. Enquanto isso, um overflow silencioso ou uma race condition passa batido e vai pra producao.
Estudos da Microsoft Research mostram que reviews eficazes demoram entre 60 e 90 minutos por 200-400 linhas de codigo. Se voce ta revisando 2000 linhas em 15 minutos, voce nao ta revisando — ta fingindo. E ta tudo bem admitir isso. O primeiro passo pra melhorar e reconhecer que o processo atual nao funciona.
O problema real e que code review virou ritual. Algo que o time faz porque 'e boa pratica', nao porque acredita que vai encontrar bugs. E quando voce faz algo so por obrigacao, o resultado e proporcional ao esforco investido: zero.
Entao como transformar code review de teatro em algo que realmente protege o codigo? Dividindo em niveis. Nem todo PR precisa do mesmo nivel de scrutinio. Um fix de typo nao precisa da mesma atencao que uma mudanca no calculo de pagamento.
Nivel 1: O basico que deveria ser automatizado
Nivel 1 e tudo que maquina faz melhor que humano. Se seu time ainda perde tempo de review checando formatacao, nomes de variavel ou imports nao usados, voce ta desperdicando capital humano em trabalho de linter.
Nivel 1 — Automatize com ferramentas
- ESLint/Prettier rodando no CI — formatacao nao e assunto de review
- TypeScript strict mode ligado — erros de tipo sao do compilador, nao do reviewer
- Testes automatizados passando no CI antes de abrir pra review
- Cobertura de testes minima configurada (80% e um bom comeco)
- Dependabot ou Renovate pra updates de dependencia
- SAST (analise estatica de seguranca) rodando automaticamente
Quando nivel 1 ta automatizado, o reviewer humano pode focar no que realmente importa: logica, premissas e edge cases. E ai que comeca o trabalho de verdade.
Nivel 2: Edge cases e limites
Nivel 2 e onde voce comeca a pensar como um atacante ou como Murphy. O que pode dar errado? Quais sao os valores limites? O que acontece quando o input e null, vazio, negativo, gigantesco ou no formato errado?
O Ariane 5 teria sobrevivido se alguem no review tivesse perguntado: 'e se o valor de velocidade horizontal for maior que 32.767?' O Boeing 737 MAX teria sido diferente se alguem perguntasse: 'e se o sensor de angulo de ataque der leitura errada?' Essas perguntas parecem obvias em retrospectiva. O desafio e fazer elas antes do desastre.
Nivel 2 — Perguntas que o reviewer deve fazer
- O que acontece se o input for null, undefined, vazio ou zero?
- O que acontece se o numero for negativo ou maior que MAX_SAFE_INTEGER?
- O que acontece se a API externa retornar erro, timeout ou resposta malformada?
- O que acontece se o banco de dados estiver lento ou indisponivel?
- O que acontece se dois usuarios fizerem a mesma operacao ao mesmo tempo?
- O que acontece se o array estiver vazio ou tiver um unico elemento?
- O que acontece se a string tiver caracteres especiais, emojis ou unicode?
- Existe alguma divisao por zero possivel?
Nao precisa responder todas pra todo PR. Mas quanto mais critico o codigo (pagamentos, autenticacao, dados de usuario), mais perguntas precisam de resposta. O reviewer nao precisa testar — precisa verificar que o autor pensou nesses cenarios e tem cobertura pra eles.
Nivel 3: Premissas de negocio e contexto
Nivel 3 e o mais dificil e o mais valioso. E onde voce questiona nao o codigo em si, mas as suposicoes por tras dele. O Ariane 5 nao tinha um bug de codigo — tinha uma premissa errada. O codigo funcionava perfeitamente no Ariane 4. A premissa de que 'os valores de velocidade horizontal nunca excedem X' e que estava errada no novo contexto.
Perguntas de nivel 3 sao do tipo: 'esse modulo que estamos reutilizando foi feito pra quais condicoes?' ou 'o que muda se o volume de usuarios triplicar?' ou 'essa integracao assume que o servico externo sempre responde em menos de 2 segundos — isso e verdade?'
Nivel 3 — Premissas para questionar
- Esse codigo esta sendo reutilizado de outro contexto? As premissas originais ainda valem?
- Quais suposicoes sobre volume de dados esse codigo faz?
- Esse codigo assume alguma coisa sobre a ordem de execucao que pode mudar?
- Se o servico externo mudar a resposta da API, esse codigo quebra?
- Existe algum single point of failure? O que acontece se esse ponto falhar?
- Essa mudanca e retrocompativel? Clientes antigos continuam funcionando?
Nivel 3 exige que o reviewer entenda o contexto do projeto, nao so o diff do PR. Por isso funciona melhor quando o reviewer mais senior faz as perguntas e o autor explica o raciocinio. Se o autor nao consegue explicar por que fez de certo jeito, isso ja e um sinal de alerta.
Implementando sem burocracia
Sei o que voce ta pensando: 'legal, mas meu time ja reclama que review demora muito, imagina com tudo isso.' Justo. A chave e nao aplicar os 3 niveis em todo PR. Categorize os PRs e aplique o nivel adequado.
- Categorize PRs por riscoUse labels no GitHub: low-risk (typos, docs, CSS), medium-risk (features novas, refactors), high-risk (pagamentos, auth, infra, dados de usuario). Cada nivel de risco puxa um nivel diferente de review.completed
- Automatize Nivel 1 completamenteLinter, type checker, testes, cobertura e SAST no CI. Se qualquer um falhar, o PR nem chega pro reviewer humano. Isso elimina 60% do trabalho repetitivo de review.completed
- Template de PR com perguntas de Nivel 2Adicione um template no .github/PULL_REQUEST_TEMPLATE.md com as perguntas de edge case. O autor responde antes de pedir review. Isso forca o dev a pensar nos cenarios antes, nao depois.in-progress
- Review de Nivel 3 so pra PRs high-riskNao faz sentido gastar 90 minutos revisando um ajuste de padding. Reserve review profundo pra mudancas que podem causar dano real. Defina quais diretórios ou modulos sao high-risk no CODEOWNERS.in-progress
- Rodizio de reviewersSempre a mesma pessoa revisando o mesmo modulo cria pontos cegos. Rode os reviewers pra que diferentes perspectivas cubram diferentes angulos. Bonus: dissemina conhecimento do codebase.upcoming
Review superficial (status quo)
+ Prós
- • Rapido — 5 minutos por PR
- • Nao gera atrito no time
- • Todo mundo ja sabe fazer
− Contras
- • Nao pega bugs de logica
- • Nao pega premissas erradas
- • Nao pega race conditions ou edge cases
- • Falsa sensacao de seguranca
Review por niveis (proposto)
+ Prós
- • Foca atencao humana onde importa
- • Pega bugs que ferramentas nao pegam
- • Escala com o tamanho do time
- • Baseado em licoes de desastres reais
− Contras
- • PRs high-risk demoram mais
- • Precisa de templates e labels no repositorio
- • Exige buy-in do time e da lideranca
O objetivo nao e transformar todo review numa auditoria de 2 horas. E garantir que os PRs que realmente podem causar estrago recebam atencao proporcional ao risco. O resto pode ser rapido e leve.
Construa software com confianca
No CrazyStack voce aprende a montar processos de desenvolvimento que funcionam na pratica. Code review, testes automatizados, CI/CD, deploy seguro — tudo com projetos reais que voce pode usar no portfolio.
Acesse crazystack.com.br e transforme seu processo de desenvolvimento.