Какие ключевые аспекты ты считаешь важными в код-ревью?

Ответ

В моей практике проведения код-ревью я фокусируюсь на нескольких ключевых аспектах:

  1. Читаемость и ясность кода. Код должен быть понятен другим разработчикам. Это включает осмысленные имена переменных и функций, отсутствие излишней сложности и логичную структуру.
  2. Соблюдение стандартов. Проверяю соответствие PSR (например, PSR-12) и внутренним гайдлайнам проекта. Несоблюдение стандартов усложняет поддержку.
  3. Безопасность. Ищу потенциальные уязвимости: SQL-инъекции, XSS, проблемы с CSRF-токенами, некорректную валидацию входных данных.
  4. Производительность. Обращаю внимание на "запахи" кода, влияющие на производительность: N+1 проблемы в запросах к БД, неоптимальные алгоритмы, избыточные вычисления в циклах.
  5. Тестируемость. Код должен быть модульным и допускать покрытие тестами. Критикую жесткие зависимости (например, прямое создание объектов через new внутри класса), которые мешают мокам и юнит-тестированию.
  6. Архитектурная целостность. Проверяю, не нарушает ли изменение существующие архитектурные паттерны проекта (например, MVC, слоистую архитектуру) и не создает ли непредусмотренных зависимостей.

Мой подход — конструктивный диалог. Я не просто указываю на проблему, а предлагаю конкретные альтернативы или задаю уточняющие вопросы, чтобы автор сам пришел к оптимальному решению.

Ответ 18+ 🔞

Слушай, а давай я тебе на пальцах объясню, как я обычно код разбираю, а то эти заумные списки — терпения ноль, ебать. Представь, что я прихожу смотреть на твой свежевыпеченный код, как на новую тачку соседа. Сразу видно — либо красавец, либо ведро.

Первым делом — читаемость. Если я открываю файл, а там вместо calculateOrderTotal переменные $x1, $a2 и функция doIt() — это пиздец, чувак. Я сразу чувствую, подозрение ебать. Код должен читаться как газета, а не как шифровка от шпиона. Имена — чтобы было понятно, что это, а не «манда с ушами». Если через месяц сам не поймёшь, что написал — всё, накрылся медным тазом, проект.

Дальше — стандарты. Ну, тут без вариантов. Весь проект должен быть как один человек писал. Отступы, фигурные скобки, нейминг — всё по гайдлайну. Присылаешь пул-реквест, а у тебя пробелы вместо табов? Ёпта, это же базовое уважение к команде. Не соблюдаешь — будем считать тебя полупидором, который другим жизнь портит.

Теперь самое сочное — безопасность. Вот тут я включаю параноика на полную. Вижу прямое подставление переменной в SQL-запрос? Удивление пиздец! Я тебе сразу: «Чувак, ты веришь, что это прокатит? Будет вам хиросима и нагасаки, когда первый же школьник тебя взломает». XSS, CSRF — всё это ищем, как иголку в стоге сена. Если ловлю — объясняю, почему это «вилкой в глаз», а не «в жопу раз».

Производительность — это отдельная песня. Вижу цикл в цикле, который в цикле ходит по базе данных — ебать мои старые костыли. N+1 проблема — наш вечный враг. Объясняю, что такой код жрёт ресурсы, как не в себя, и через месяц сервер ляжет с криком «за что?!». Нужно, чтобы всё летало, а не ползало, как «хуй с горы».

Ну и тестируемость, архитектура… Если код написан так, что к нему тест не приделаешь — это провал. Жёсткие зависимости, которые нельзя подменить? Это же «кот, сука, собака»! Как такой код покрывать? Никак. Поэтому толкаю на использование интерфейсов, внедрение зависимостей — чтобы всё было гибко.

А главное — я не просто прихожу и говорю «всё хуёво, переделывай». Нет. Я задаю вопросы. «А что, если вот тут будет тысяча записей?», «А как мы это будем тестировать?». Стараюсь, чтобы человек сам дошёл до решения. Иногда, правда, вижу дичь такую, что хочется крикнуть «какого хуя?», но сдерживаюсь. Конструктивный диалог, всё дела. Но если упорно лепишь одну и ту же ошибку — тогда да, могу и жёстче объяснить, на каком тонком льду ты ходишь.