Перейти к основному содержимому

Code review и соглашения

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

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

Что нужно понимать

  • Зачем нужно это конкретное ревью: корректность, дизайн, обмен знаниями или всё сразу
  • Какие комментарии блокирующие, а какие — предложения
  • Что мог бы поймать инструмент, чтобы этим не занимался человек
  • Что автор уже знает, а чего ему не хватает
  • Когда ревью перестало приносить пользу и пора перейти к разговору

Ключевые темы

Как ревьюить

  • Сначала описание, потом diff
  • Корректность, крайние случаи и пути отказа — раньше, чем стиль
  • Спрашивать, а не утверждать, когда вам может не хватать контекста
  • Явно обозначать важность: блокирующее или «на ваше усмотрение»
  • Апрувить, когда стало лучше, чем было, а не когда стало идеально

Как отдавать на ревью

  • Небольшие изменения: внимание ревьюера не бесконечно
  • Описание, которое объясняет зачем и какие варианты вы рассматривали
  • Сначала прочитать собственный diff
  • Отвечать по существу, а не защищаться

Что должны взять на себя инструменты

  • Форматирование: решается форматтером и не обсуждается
  • Линты для правил, которые команда повторяет из раза в раз
  • CI как барьер для тестов и сборки, чтобы ревьюер их не проверял
  • Автоматизация всего механического

Соглашения

  • Именование, структура и раскладка файлов, записанные один раз
  • Где живут соглашения и как они меняются
  • Онбординг: новый человек должен иметь возможность просто прочитать правила
  • Время от времени пересматривать сами соглашения

Как это ломается

  • Ревью как узкое место: изменения лежат по нескольку дней
  • Формальный апрув под давлением сроков
  • Придирки, которые стоят дороже, чем экономят
  • Один человек — единственный ревьюер целой области

Уровни

УровеньКак это выглядит
JuniorПрисылает небольшие изменения с описанием и конструктивно реагирует на замечания.
MiddleРевьюит внимательно, замечает крайние случаи и проблемы дизайна, чётко отделяет блокирующее от необязательного.
SeniorФормирует культуру ревью, переносит механические проверки в инструменты и использует ревью, чтобы растить людей, а не только фильтровать код.

Практика

Для начала

  • Прочитайте собственный diff Прежде чем звать ревьюера, прочитайте своё изменение чужими глазами и исправьте то, что найдёте.

  • Разбейте большое изменение Возьмите pull request больше пятисот строк и разделите его на части, которые реально можно отревьюить.

  • Помечайте важность На следующем ревью пометьте каждый комментарий как блокирующий или необязательный.

Глубже

  • Автоматизируйте повторяющийся комментарий Найдите то, что вы написали на ревью уже трижды, и превратите это в правило линтера.

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

  • Запишите соглашения Превратите неписаные правила, которые узнают только через замечания, в документ.

Проверьте себя

  • Какую долю ваших комментариев на ревью мог бы написать инструмент?
  • Сколько изменение ждёт ревью в вашей команде?
  • Когда вы в последний раз апрувили то, что толком не читали?
  • Как по вашим комментариям понять, какие из них обязательны к исправлению?
  • Какие соглашения есть в вашей команде такие, о которых новый человек не сможет узнать сам?
  • Какой последний настоящий баг нашли на ревью и что могло бы поймать его раньше?

Материалы

  • Google's Code Review Developer Guide — самое полное публичное руководство: обе стороны процесса и критерий, по которому изменение принимают. Раздел о том, на что смотреть, применим напрямую.
  • Conventional Comments — крошечное соглашение о том, как помечать важность комментария; снимает удивительно много трения.
  • Effective Dart: Style — базовые соглашения для Dart, чтобы команда спорила о чём-нибудь другом.
  • Dart linter rules — полный список. Стоит один раз прочитать целиком и найти правила, которые совпадают с повторяющимися комментариями на ревью в вашей команде.
  • The Human Side of Code Review — о тоне и психологии, а именно от них зависит, помогает ревью команде или разъедает её.