Открыть сервис

Код ревью

Код ревью (от англ. code review), или рецензирование кода, — это систематическая проверка исходного кода программы одним или несколькими разработчиками с целью выявления ошибок, улучшения качества кода, соблюдения стандартов оформления и обмена знаниями в команде. Является одной из ключевых практик инженерной разработки программного обеспечения, входящей в состав методологий экстремального программирования (XP) и DevOps.

История

Практика формальной проверки кода возникла в 1970-х годах в компании IBM, где Майкл Фэган (Michael Fagan) ввёл понятие «инспекции кода» — структурированного процесса, включающего подготовку, обзор и фиксацию дефектов. В отличие от неформального «просмотра через плечо» (over-the-shoulder review), инспекции Фэгана требовали строгого регламента, протоколов и метрик.

С развитием распределённых команд и открытого исходного кода (Open Source) в 1990-х годах возникла модель асинхронного ревью, реализованная в инструментах вроде Phabricator, Gerrit, а затем — в веб-интерфейсах Git-хостингов (GitHub, GitLab, Bitbucket). К 2010-м годам код ревью стало стандартной практикой в большинстве коммерческих и open-source проектов.

Цели и задачи

Основные цели код ревью включают:

  • Выявление дефектов — обнаружение логических ошибок, уязвимостей безопасности, проблем с производительностью и некорректной обработки граничных случаев.
  • Улучшение читаемости и поддерживаемости — проверка соответствия кода принятым в проекте стандартам именования, форматирования и архитектурным паттернам.
  • Обучение и передача знаний — менее опытные разработчики получают обратную связь, а рецензенты знакомятся с новыми участками кодовой базы.
  • Соблюдение регламентов — в regulated-индустриях (медицина, авионика, финансы) ревью обязательно для соответствия стандартам (например, DO-178C, IEC 62304).

Виды код ревью

Формальные инспекции

Проводятся по заранее утверждённому протоколу: участники назначаются, роли распределяются (автор, рецензент, модератор, секретарь), используется чек-лист. Результаты фиксируются в отчёте. Требуют значительных временных затрат, но обеспечивают высокую полноту проверки.

Неформальное ревью (over-the-shoulder)

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

Асинхронное ревью (pull request / merge request)

Наиболее распространённый вид в современных командах. Разработчик создаёт запрос на слияние (pull request, PR) в Git-репозитории, после чего другие участники оставляют комментарии в виде inline-замечаний. Обсуждение ведётся до тех пор, пока все замечания не будут устранены, после чего PR принимается (approve) и сливается.

Автоматизированное ревью (статический анализ)

Инструменты (SonarQube, ESLint, Pylint, Checkstyle) проверяют код на соответствие стилю, потенциальные ошибки, уязвимости (например, SQL-инъекции) и code smells. Автоматизация не заменяет человеческого ревью, но снимает рутинные проверки.

Процесс типичного код ревью

  1. Автор завершает реализацию задачи, запускает локальные тесты и создаёт PR с описанием изменений (что сделано, почему, ссылки на задачу в трекере).
  2. Система CI/CD запускает автоматические проверки: сборка, юнит-тесты, статический анализ, проверка покрытия кода.
  3. Рецензенты (обычно 1–2 человека) изучают diff-изменения, задают вопросы, предлагают улучшения. Комментарии могут быть блокирующими (требуют обязательного исправления) или рекомендательными.
  4. Автор вносит правки, комментирует каждое замечание (согласен/не согласен, исправлено).
  5. После снятия всех блокирующих замечаний рецензент ставит «Approved» (одобрено).
  6. PR сливается в основную ветку (обычно после повторного прохода CI).

Инструменты

  • GitHub / GitLab / Bitbucket — встроенные системы pull request с комментариями, обсуждениями и интеграцией с CI.
  • Gerrit — система ревью, разработанная для ядра Linux; требует строгой линейной истории коммитов.
  • Phabricator (с 2021 года — в режиме поддержки) — использовался в Facebook (организация Meta признана экстремистской и запрещена в РФ) и других крупных проектах.
  • Crucible (Atlassian) — коммерческий инструмент, интегрируемый с Jira.
  • Review Board — open-source система для асинхронного ревью.

Критерии эффективности

Исследования (например, работы Стива Макконнелла, «Code Complete») показывают, что код ревью способно выявить от 30% до 70% дефектов в зависимости от формальности процесса. Ключевые факторы успеха:

  • Размер изменений — оптимальный объём PR составляет 200–400 строк кода. Слишком большие изменения снижают концентрацию рецензента и увеличивают число пропущенных ошибок.
  • Время откликазадержка более 24 часов снижает контекст автора и замедляет разработку.
  • Число рецензентов — два рецензента обычно дают наилучшее соотношение «полнота проверки / затраты времени».
  • Психологическая безопасность — культура, в которой критика кода не воспринимается как личная атака, повышает качество ревью.

Критика и ограничения

  • Субъективность — разные рецензенты могут предъявлять противоречивые требования, что ведёт к конфликтам.
  • Задержкиожидание ревью может стать узким местом в процессе разработки, особенно в распределённых командах с разными часовыми поясами.
  • Поверхностность — при большом потоке PR рецензенты могут просматривать код формально, не вникая в логику.
  • Эффект «bus factor» — если ревью выполняет только один эксперт, его уход парализует процесс.

Интересные факты

  • В проекте ядра Linux используется строгая модель ревью: каждый патч проходит через мейнтейнеров подсистем, а затем через Линуса Торвальдса.
  • Компания Google ввела практику «readability review» — отдельного ревью, проверяющего только стиль кода, без анализа логики.
  • Согласно опросу Stack Overflow (2023), более 80% профессиональных разработчиков регулярно участвуют в код ревью.

Источники

  • Fagan, M. E. (1976). «Design and Code Inspections to Reduce Errors in Program Development». IBM Systems Journal.
  • McConnell, S. (2004). «Code Complete: A Practical Handbook of Software Construction». 2nd ed. Microsoft Press.
  • Rigby, P. C., German, D. M., & Storey, M. A. (2008). «Open Source Software Peer Review Practices: A Case Study of the Apache Server». ICSE 2008.
  • Sadowski, C., Söderberg, E., Church, L., Sipko, M., & Bacchelli, A. (2018). «Modern Code Review: A Case Study at Google». ICSE-SEIP 2018.
  • Документация GitHub, GitLab, Gerrit по процессам pull request и merge request.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →