Code review em Java: o que verificar e como dar feedback
\nCode review (revisão de código) não é apenas uma formalidade, mas uma das maneiras mais eficazes de melhorar a qualidade do código e elevar o nível profissional da equipe. Para desenvolvedores Java iniciantes, participar de revisões pode parecer assustador: "E se eu deixar passar um bug?", "Como dizer a um colega que o código dele não é ideal?". Neste artigo, vamos analisar o que observar ao revisar código Java e como dar feedback para que ele seja útil, e não ofensivo.
\n\n1. O que verificar no código Java: da sintaxe à arquitetura
\nCode review não se resume a encontrar erros de digitação. Um bom revisor analisa o código de forma sistêmica. Aqui estão as principais categorias de verificação para projetos Java:
\n\n1.1. Correção e lógica
\nA primeira e principal pergunta: "O código resolve o problema proposto?". Verifique:
\n- \n
- Casos extremos (null, coleções vazias, valores negativos). \n
- A lógica de operadores condicionais e loops. \n
- A correta manipulação de exceções (não use
Exceptioncomo solução universal). \n
Exemplo de código ruim:
\npublic int divide(int a, int b) {\n return a / b; // Potencial divisão por zero\n}\nO que sugerir:
\npublic int divide(int a, int b) {\n if (b == 0) {\n throw new IllegalArgumentException("O divisor não pode ser zero");\n }\n return a / b;\n}\n\n1.2. Legibilidade e estilo
\nJava é uma linguagem com convenções estabelecidas (Java Code Conventions, Google Java Style). Observe:
\n- \n
- Nomes de variáveis, métodos, classes (devem ser significativos). \n
- Formatação (indentação, espaços, comprimento das linhas). \n
- Presença de números mágicos (extraia-os para constantes). \n
Exemplo:
\n// Ruim\ndouble x = 3.14159 * r * r;\n\n// Bom\nprivate static final double PI = 3.14159;\ndouble area = PI * radius * radius;\n\n1.3. Performance e otimização
\nPara Java, são especialmente importantes:
\n- \n
- Evitar a criação desnecessária de objetos em loops. \n
- Usar
StringBuilderpara concatenação de strings em loops. \n - Verificar a complexidade dos algoritmos (O(n), O(n log n)). \n
Exemplo:
\n// Ruim (cria muitos objetos String)\nString result = "";\nfor (int i = 0; i < 1000; i++) {\n result += i;\n}\n\n// Bom\nStringBuilder sb = new StringBuilder();\nfor (int i = 0; i < 1000; i++) {\n sb.append(i);\n}\nString result = sb.toString();\n\n1.4. Testabilidade e testes
\nVerifique se o novo código está coberto por testes unitários. Observe:
\n- \n
- Presença de testes para casos extremos. \n
- Ausência de dependências de sistemas externos (BD, API) em testes unitários. \n
- Legibilidade dos próprios testes (método
assertcom mensagens claras). \n
2. Como dar feedback: de forma construtiva e sem toxicidade
\nMesmo a revisão de código mais correta pode falhar se o feedback for agressivo ou pouco específico. Aqui estão algumas regras para iniciantes:
\n\n2.1. Regra do "Sanduíche"
\nComece com algo positivo, depois aponte as deficiências e termine com um incentivo. Por exemplo:
\n- \n
- Positivo: "Ótima ideia extrair a validação para um método separado!" \n
- Observação: "Mas aqui é melhor usar
Optionalem vez de retornar null, para evitarNullPointerException." \n - Conclusão: "No restante, o código está limpo, obrigado pelo trabalho!" \n
2.2. Use "mensagens-eu" e perguntas
\nEm vez de "Você escreveu errado", diga: "Acho que aqui pode surgir um bug com a lista vazia. O que você acha?". Isso reduz a reação defensiva e transforma o diálogo em algo construtivo.