Если вы читаете эту статью, то, скорее всего, вы каким-то образом связаны с созданием программного обеспечения. Вы, вероятно, хорошо знаете, что обзоры кода считаются лучшей практикой.
Но вы можете не знать, что 64,3% Pull-запросов объединяются без каких-либо изменений кода в результате обзора. Это означает, что только в 1/3 случаев обзор привел к изменению предложенного кода.
🗃 Набор данных
Мы собираем данные по открытым источникам уже некоторое время, и в этом посте мы поделимся результатами анализа 2 340 078 PR, полученных от 7 836 организаций. Набор данных специально получен из репозиториев, демонстрирующих командную работу. К счастью, с таким количеством компаний-разработчиков программного обеспечения, использующих открытый исходный код, существует множество примеров различных стилей сотрудничества.
🔮 Результаты проверки кода
Вообще говоря, судьба PR, находящегося на рассмотрении, будет идти по одному из этих двух путей:
- Объединяется как есть (он же LGTM’d) — 1 504 914 PR в наборе данных
- объединен с изменениями в результате обратной связи (комментарии, предложения и т.д.) — 835 164 PR в наборе данных
⏳ Время слияния PRs
Давайте посмотрим, сколько люди ждут, пока их PR будут объединены.
В среднем, время между открытием PR и его объединением составляет 128 часов (~5 дней). Если рассматривать только PR, которые были LGTM’s, то это число составляет 74 часа (~3 дня), а для остальных 35,7% PR среднее время ожидания составляет 225 часов (~9 дней).
Вот две гистограммы с вероятностными распределениями времени слияния для ПР с LGTM’d и ПР без LGTM’d.
Конечно, PR, которые объединяются с помощью LGTM, либо проще, либо меньше, либо просто имеют низкий риск, поэтому время ожидания значительно меньше. Однако суммарное время ожидания для изменений, которые уже были готовы к работе, значительно.
В этом наборе данных общее время ожидания слияния Pull-запросов (без каких-либо изменений в результате рассмотрения) составляет 12 718 лет. Для PR, получивших исправления, время ожидания достигает 21 437 лет.
Если отбросить астрономические абсолютные значения, мы видим, что огромные 37% времени ожидания были более или менее ненужными.
Если посмотреть на тенденцию за последние три года, то очевидно, что время ожидания сокращается.
Аналогичная тенденция наблюдается и в самом GitHub. Это связано с тем, что все больше команд предпочитают выпускать небольшие и частые проекты, применяя такие методы, как разработка на основе магистрали и непрерывная доставка.
🎭 Что такое обзор кода?
Если говорить об обмене знаниями, то обзор кода призван выполнять функцию «ворот качества». Хороший обзор должен охватывать множество аспектов кода (например, соответствие цели, отсутствие ошибок и т.д.), но, давайте будем честными, на практике обзоры носят транзакционный характер.
Как автор:
Вам нужно, чтобы ваш код был рассмотрен, чтобы вы могли отправить его и продолжить итерации.
Как рецензент:
Вы хотите разблокировать своего товарища по команде и вернуться к своему собственному коду.
Конечно, в обоих случаях мы не хотим идти на компромисс с качеством, но не все изменения кода имеют одинаковое влияние и риск. Я бы зашел так далеко, что утверждал бы, что в большинстве команд проверка кода в основном сводится к подбору шаблонов — например: «Видел ли я, чтобы этот шаблон был успешным раньше?», «Знаком ли автор с этой подсистемой?» и т.д. Когда достаточное количество ментальных галочек отмечено, мы готовы объявить LGTM.
🤖 Автоматизация
Программисты любят автоматизировать свою работу — вспомните все существующие форматеры, линтеры и инструменты статического анализа. Просто для развлечения, вот сравнение между автоматизацией автомобиля и автоматизацией кода.
Codeball — это новая и смелая попытка продвинуть автоматизацию дальше. Он имитирует интуицию разработчика и одобряет безопасные запросы на внесение изменений, экономя время команды.
Лучший способ проиллюстрировать влияние такой продвинутой автоматизации — это посмотреть, как она повлияла на время слияния Pull Request для команды, использующей ее.
Хотя всегда есть сложные запросы на притяжение, которые требуют человеческого рассмотрения, Codeball выявляет и утверждает большую часть запросов на притяжение, которые были бы отклонены человеком. Естественно, эта команда тратит меньше времени на работу с такими PR.
Если это звучит слишком хорошо, чтобы быть правдой, то это потому, что перед нами технологическая инновация! Идите и проверьте ее на своем репозитории!
Спасибо за чтение!
- Кирилл