Code review (ревью кода) — это процесс проверки кода другими разработчиками перед его слиянием в основную ветку. Это важная практика, которая помогает улучшить качество кода, выявить ошибки, а также способствует обмену знаниями в команде. Ниже я расскажу о ключевых практиках, которые я применяю при проведении code review.
Перед началом code review важно определить, что именно будет проверяться. Это может включать:
Пример чек-листа для code review:
Автоматизация помогает ускорить процесс code review и снизить вероятность человеческой ошибки. Вот несколько инструментов, которые я использую:
Пример настройки Checkstyle в Maven:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>3.2.0</version>
<executions>
<execution>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>
Одна из главных задач code review — убедиться, что код соответствует принятым в команде стандартам. Это включает:
Пример плохого и хорошего кода:
// Плохо
public void p(int a, int b) {
System.out.println(a + b);
}
// Хорошо
public void printSum(int firstNumber, int secondNumber) {
System.out.println(firstNumber + secondNumber);
}
Тесты — это важная часть кода, и они также должны быть проверены. Основные аспекты:
Пример хорошего теста:
@Test
public void testAddPositiveNumbers() {
Calculator calculator = new Calculator();
assertEquals(5, calculator.add(2, 3));
}
@Test
public void testAddNegativeNumbers() {
Calculator calculator = new Calculator();
assertEquals(-1, calculator.add(2, -3));
}
При проведении code review важно давать конструктивную обратную связь. Вот несколько рекомендаций:
Пример конструктивного комментария:
calculateDiscount
выглядит сложным. Возможно, его стоит разделить на несколько методов для улучшения читаемости."Code review не должен занимать слишком много времени. Вот несколько советов:
Помимо проверки кода, важно оценить архитектурные решения:
Пример использования шаблона "Стратегия":
interface DiscountStrategy {
double applyDiscount(double price);
}
class NoDiscount implements DiscountStrategy {
public double applyDiscount(double price) {
return price;
}
}
class SeasonalDiscount implements DiscountStrategy {
public double applyDiscount(double price) {
return price * 0.9;
}
}
Убедитесь, что код не содержит уязвимостей. Это может включать:
Пример безопасного кода:
// Небезопасно
String query = "SELECT * FROM users WHERE username = '" + username + "'";
// Безопасно
String query = "SELECT * FROM users WHERE username = ?";
PreparedStatement stmt = connection.prepareStatement(query);
stmt.setString(1, username);
Code review — это важный процесс, который помогает улучшить качество кода и предотвратить ошибки. Основные практики, которые я применяю:
Следуя этим практикам, вы сможете проводить эффективные code review, которые помогут вашей команде писать качественный и поддерживаемый код.