Привет, Хабр! Мы перевели статью, посвящённую не самой любимой задаче разработчиков — код-ревью. Как полюбить и превратить рутину в инструмент развития — в пересказе Medium.

Статья пригодится начинающим и опытным разработчикам, которые хотят упорядочить знания, оптимизировать процесс и получить практические советы.

Почему разработчики не любят код-ревью

Сразу оговоримся — разработчики любят чужой код, но грамотный, написанный по общепринятым стандартам и с логичными комментариями.

Программисты не любят ревьюрить код, написанный безграмотно и запутанно, без соблюдения стиля и нужной документации.

Большинство разработчиков недолюбливает этот процесс по этим причинам:

1. Трата времени — нельзя знать заранее, сколько времени займёт проверка кода. Каждое изменение в основном коде проходит через код-ревью, в зависимости от количества изменений, этот процесс занимает от двух минут до двух часов.

2. Смена контекста — задача на код-ревью часто возникает в то время, когда специалист сосредоточен на других задачах. Приходится переключаться на новый процесс, что тормозит выполнение текущих задач и приводит к переключению контекста.

P.S. Не рекомендуется сразу же после получения уведомления бросаться делать ревью, поскольку переключение между задачами снижает продуктивность.

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

4. Стиль кода — большинство проектов имеют свой стиль, который нужно соблюдать. Если же он отсутствует, то процесс ревью усложняется, так как нет чёткого видения стиля.

5. Отсутствие документации — отсутствие документации увеличивает время ревью, так как вам приходится постигать реализованную логику самостоятельно. Используйте автотесты и линтеры, принятые в команде.

Зачем это нужно?

Несмотря на негативное отношение к код-ревью, это та вещь, которая превращает хорошего разработчика в отличного. Задача помогает понять, как мыслят другие разработчики, и косвенно поучаствовать в создании проектов.

Код-ревью — практический способ расширить свою базу знаний, сделать свой вклад в проект и помочь другим разработчикам.

Техника помогает на ранних стадиях найти некоторые ошибки и избавиться от непонятных и запутанных решений. В работе над кодом участвует не один человек, а команда проекта, поэтому часто может появиться свежий взгляд со стороны.

Программист, который заранее знает, что коллеги будут проверять его работу, стремится писать более аккуратно и организованно. В итоге, код получается более качественным, его понимают несколько человек, а процесс ревью ускоряется.

Принять недостатки

Главный и единственный недостаток этого процесса — его длительность. Все участники код-ревью тратят время на то, чтобы посмотреть и при необходимости прокомментировать код, а разработчики — на исправление ошибок.

Минимизировать недостаток и полюбить ревью помогут три рекомендации.

1. Выделяйте время

Структурируйте свой рабочий день так, чтобы у вас оставалось время для ревью. Если у вас на проекте внедрены спринты или канбан, вы можете определить среднее количество времени, которое вы тратите на ревью в течение недели. Разделите общее время на рабочие дни и выделите на ревью один час, например — с 11 до 12 ежедневно.

Такой подход позволит постоянно находить время для ревью, причём об этом будете знать и вы, и ваша команда. Раннее планирование заметно облегчит вам жизнь.

2. Составьте чек-лист

Чек-лист упрощает процесс ревью для разработчика. Стандартный чек-лист включает в себя две и более колонки: задача, промежуточные этапы, выполнение.

Чек-лист разработчика может выглядеть так:

  • добавление требования к тикету в пул-реквест;

  • добавление автоматизации кода;

  • запуск инструментов, например, линтер, для исправления проблем с синтаксисом,

  • выполнение внутреннего тестирования;

  • написание unit тестов;

  • запуск самого кода.

 3. Избегайте словесных перепалок

Часто код-ревью становится полем битвы разработчиков из-за различий в образе мыслей, стиле кода или стремлений защитить свою работу.

Здесь нужно приводить логичные комментарии, не поддаваться эмоциям и подкреплять мысли весомыми аргументами.

Если дискуссия превращается в спор, лучше предложить оппоненту обсудить моменты лично, вне ревью.

Советы для оптимизации

Код-ревью — процесс, порой, долгий и трудоёмкий. Проверка кода может сопровождаться мелкими замечаниями и бесконечными обсуждениями малозначимых деталей, что отнимает несколько часов времени у всей команды.

В порыве эмоций некоторые программисты даже предлагали кардинальные меры — вообще отказаться от пул-реквестов и ревью. Идею не поддержали, и это верное решение, потому что есть эффективные способы оптимизировать процесс ревью.

Вот 6 методов, которые подходят для авторов кода и ревьюеров:

1. Пройдитесь по техническим требованиям — это должно стать отправной точкой код-ревью, чтобы избежать ошибок и траты времени. Часто разработчики упускают требования в начале ревью, а они могут дублироваться или существенно меняться с момента своего создания, поэтому решение часто отклоняется от них, а в некоторых случаях написанный код вообще не связан с требованиями.

2. Комментируйте только изменения — не тратьте время на комментирование изменений, несвязанных с пул-реквестом, даже если считаете его неверным. Из-за этого код-ревью занимает гораздо больше времени, чем было запланировано. Можно использовать шаблон пул-реквестов, чтобы предусмотреть краткое описание выполненных действий и их обоснование, ссылку на тикет задачи, а также план тестирования для проверки правильности изменений.

3. Запустите код — в 90% случаев недостаточно просто посмотреть на код, чтобы найти ошибки. Проблемы обнаруживаются только при запуске и просмотре логов. В некоторых случаях для запуска кода может потребоваться особая конфигурация, подготовка которой должна быть частью процесса код-ревью.

4. Рефакторинг VS поддержка кода — баланс выбора между двумя процессами тонкий: во время ревью нужно подумать, в каких случаях разработчику нужно написать избыточный код или же провести рефакторинг. Здесь нет единственного верного ответа, на выбор будут влиять факторы: наличие времени у разработчика, возможность использования кода в других целях и вероятность регрессии. Оба процесса должны упростить ревью и улучшить код.

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

6. Читаемость важнее производительности — сверхпроизводительный код не всегда понятен другим разработчикам, плохо поддаётся переделке и ведёт к багам при рефакторинге, поэтому лучше написать расширенный код, который будет проще понять и исправить. Другой выход — дать поясняющий комментарий, если есть основания полагать, что он поможет понять замысел автора кода.

Несколько советов

  1. Во время ревью важно оценивать, насколько комментарии улучшают состояние кода, эффективность и работоспособность систем. Комментируйте код строго в контексте улучшения работоспособности системы или её части. Можно дать примеры хорошей реализации и ссылки на паттерны.

  2. Если ваши ревью объёмны и занимают много времени, предложите авторам кода делать изменения небольшими кусочками и создавать пул-реквесты по мере выполнения задач. Дозированную информацию проще ревьюрить.

Подытожим

Оптимизация код-ревью превращает утомительный процесс в эффективный инструмент, который развивает навыки и улучшает качество общения с членами команды.

Рекомендации и перечисленные практики из статьи рекомендуется использовать совместно и по отдельности. Методы помогут оптимизировать процесс и перебороть неприязнь к процессу.

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

Если вы тоже хотите поделиться фишками проведения код-ревью, что-то посоветовать или рассказать историю из опыта — пишите в комментариях.

Комментарии (3)


  1. gordeevbr
    03.04.2023 21:10
    +3

    Могу порекомендовать также следующее. Очень помогает, когда автор кода оставляет уже в самом пул реквесте комментарии на свой же код. Пара строк может быстро раскрыть необходимость какого-нибудь не особо эстетичного костыля и заметно упростить жизнь ревьюера. Ну и к этим комментариям также зачастую могут вернуться исследователи кода уже в будущем.


  1. panzerfaust
    03.04.2023 21:10
    +2

    Не устаю повторять, что все "проблемы" с код-ревью начинаются с корявого процесса постановки задач. Если у вас в команде всем окей сначала ставить задачу "Нужно сделать хорошо", а потом делать коммиты на 2к строк в 90 файлах, которые меняют все и сразу, то да, код-ревью будет гемором. А потом тестирование будет гемором. А потом выкатка в прод. А потом сопровождение.

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


    1. sshikov
      03.04.2023 21:10

      коммиты на 2к строк в 90 файлах
      Ну, ради объективности, это бывает и независимо от кривой постановки задачи. В смысле, хорошая постановка не обеспечивает хорошей декомпозиции — в конце концов, исполнитель тоже должен о декомпозиции думать.