Как проводилось code review?

«Как проводилось code review?» — вопрос из категории Софт-скиллы, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый пример ответа, который можно адаптировать под свой опыт.

Ответ

В командах, где я работал, code review через Pull Request (PR) в GitLab/GitHub был обязательным этапом перед мержем любой функциональной ветки в main/develop. Вот как был устроен этот процесс с моей стороны как ревьюера:

1. Автоматические проверки (Must-pass gate) Перед тем как смотреть код вручную, я проверял, что прошли все CI-проверки:

  • ✅ Все тесты (unit, feature).
  • ✅ Статический анализ (PHPStan без новых ошибок).
  • ✅ Проверка стиля кода (PHP-CS-Fixer). Если что-то падало, я просил автора сначала это исправить.

2. Ручной review: на что я смотрел

  • Корректность: Решает ли код поставленную задачу? Нет ли логических ошибок?
  • Читаемость и ясность: Названия переменных, методов, классов понятны? Комментарии есть там, где логика неочевидна?
  • Архитектура и дизайн:
    • Нет ли нарушений принципов SOLID? (например, гигантский метод, делающий всё).
    • Соответствует ли код принятым в проекте паттернам?
    • Для Laravel: правильно ли используются Eloquent, сервис-провайдеры, jobs?
  • Производительность: Нет ли проблем N+1 в запросах к БД? Можно ли оптимизировать тяжелые операции?
    // Плохо (N+1 запрос в цикле):
    foreach ($posts as $post) {
        echo $post->author->name; // Отдельный запрос на каждой итерации
    }
    // Хорошо (eager loading):
    $posts = Post::with('author')->get();
  • Безопасность: Проверяются ли входные данные? Используются ли подготовленные запросы? Экранируется ли вывод?
  • Тестируемость: Новый код покрыт тестами? Моки и зависимости организованы правильно?

3. Культура feedback Я всегда старался давать конструктивные комментарии. Вместо "Это плохо" — "Можно рассмотреть такой вариант..." с примером кода или ссылкой на документацию. Если что-то было непонятно, задавал уточняющие вопросы.

4. Итог После проверки я либо ставил approve, либо запрашивал изменения (request changes). Мерж без хотя бы одного approve от коллеги был запрещён правилами репозитория. Такой процесс значительно повышал общее качество кодовой базы и был отличной возможностью для обмена знаниями.