Какие практики code review вы применяете?java-100

Code review (ревью кода) — это процесс проверки кода другими разработчиками перед его слиянием в основную ветку. Это важная практика, которая помогает улучшить качество кода, выявить ошибки, а также способствует обмену знаниями в команде. Ниже я расскажу о ключевых практиках, которые я применяю при проведении code review.

Основные практики code review

1. Четкие критерии проверки

Перед началом code review важно определить, что именно будет проверяться. Это может включать:

  • Качество кода: Соответствие стандартам кодирования, читаемость, отсутствие дублирования.
  • Функциональность: Корректность реализации бизнес-логики.
  • Тесты: Наличие и качество unit- и интеграционных тестов.
  • Безопасность: Отсутствие уязвимостей, таких как SQL-инъекции или XSS.
  • Производительность: Оптимизация запросов, использование кэширования.

Пример чек-листа для code review:

  • [ ] Код соответствует стандартам кодирования.
  • [ ] Написаны unit-тесты для новой функциональности.
  • [ ] Отсутствуют уязвимости безопасности.
  • [ ] Код покрыт документацией.

2. Использование инструментов для автоматизации

Автоматизация помогает ускорить процесс code review и снизить вероятность человеческой ошибки. Вот несколько инструментов, которые я использую:

  • Статический анализ кода: SonarQube, Checkstyle, PMD.
  • Форматирование кода: Prettier, Spotless (для Java).
  • Проверка тестов: JaCoCo для измерения покрытия кода.

Пример настройки 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>

3. Проверка на соответствие стандартам кодирования

Одна из главных задач code review — убедиться, что код соответствует принятым в команде стандартам. Это включает:

  • Именование переменных и методов: Использование camelCase, понятные имена.
  • Форматирование: Отступы, пробелы, длина строк.
  • Принципы SOLID: Соблюдение принципов объектно-ориентированного проектирования.

Пример плохого и хорошего кода:

// Плохо
public void p(int a, int b) {
    System.out.println(a + b);
}

// Хорошо
public void printSum(int firstNumber, int secondNumber) {
    System.out.println(firstNumber + secondNumber);
}

4. Проверка тестов

Тесты — это важная часть кода, и они также должны быть проверены. Основные аспекты:

  • Покрытие кода: Убедитесь, что новые функции покрыты тестами.
  • Качество тестов: Тесты должны быть читаемыми и проверять как позитивные, так и негативные сценарии.

Пример хорошего теста:

@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));
}

5. Конструктивная обратная связь

При проведении code review важно давать конструктивную обратную связь. Вот несколько рекомендаций:

  • Будьте вежливы: Критикуйте код, а не автора.
  • Предлагайте решения: Если вы нашли проблему, предложите, как её исправить.
  • Задавайте вопросы: Если что-то непонятно, уточните у автора.

Пример конструктивного комментария:

  • "Метод calculateDiscount выглядит сложным. Возможно, его стоит разделить на несколько методов для улучшения читаемости."

6. Ограничение по времени

Code review не должен занимать слишком много времени. Вот несколько советов:

  • Устанавливайте лимиты: Например, не более 1 часа на один review.
  • Разбивайте на части: Если изменения большие, разбейте их на несколько мелких пул-реквестов.

7. Ревью архитектуры

Помимо проверки кода, важно оценить архитектурные решения:

  • Соблюдение принципов SOLID: Проверьте, что код соответствует принципам единой ответственности, открытости/закрытости и другим.
  • Использование шаблонов проектирования: Убедитесь, что код использует подходящие шаблоны, такие как Фабрика, Стратегия и другие.

Пример использования шаблона "Стратегия":

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;
    }
}

8. Проверка безопасности

Убедитесь, что код не содержит уязвимостей. Это может включать:

  • Проверка на SQL-инъекции: Используйте prepared statements.
  • Проверка на XSS: Экранируйте пользовательский ввод.

Пример безопасного кода:

// Небезопасно
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 — это важный процесс, который помогает улучшить качество кода и предотвратить ошибки. Основные практики, которые я применяю:

  1. Четкие критерии проверки: Определите, что именно будет проверяться.
  2. Использование инструментов автоматизации: Ускорьте процесс с помощью статического анализа и форматирования.
  3. Проверка на соответствие стандартам кодирования: Убедитесь, что код читаем и соответствует стандартам.
  4. Проверка тестов: Убедитесь, что новые функции покрыты тестами.
  5. Конструктивная обратная связь: Давайте полезные и вежливые комментарии.
  6. Ограничение по времени: Не тратьте слишком много времени на один review.
  7. Ревью архитектуры: Проверяйте, что код соответствует принципам SOLID и использует подходящие шаблоны проектирования.
  8. Проверка безопасности: Убедитесь, что код не содержит уязвимостей.

Следуя этим практикам, вы сможете проводить эффективные code review, которые помогут вашей команде писать качественный и поддерживаемый код.

Смотрите так же