Code Review — зачем и как использовать в команде

October 16 2024
Code Review — зачем и как использовать в команде

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

Сode Review — что это и как устроен процесс

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

Зачем нужна проверка кода

Код-ревью помогает: 

  • Привести код «в боевую готовность»: найти ошибки и недочеты, которые помешают корректной работе сайта или приложения.
  • Улучшить и «причесать»: привести каждый кусок кода к единому стилю, сделать его понятным и легко читаемым для других разработчиков.
  • Защититься от уязвимостей: убедиться, что код отвечает требованиям безопасности и не перегружает оперативную память ОС. 
  • Обмениваться опытом: контролировать и направлять джуниоров или стажеров, помогая им улучшить навыки.
  • Подстраховаться: если разработчик поделится своей частью кода с коллегой, тот сможет подхватить его в случае увольнения или отпуска.  

Кто проводит 

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

Но в некоторых командах опытные разработчики в команде сильно загружены, и код проверяют коллеги с похожим опытом. В больших компаниях с масштабными проектами иногда проводят ревью в два этапа: сначала мидл, а потом — тимлид. Это помогает «отловить» больше ошибок и избавиться от лишнего. Полезно, если в качестве ревьюера выступает не один и тот же, а разные разработчики: это помогает обмениваться опытом внутри команды и равномерно распределять нагрузку. 

Как это выглядит

Процесс Code Review состоит из этапов: 

  1. Подготовка. Сначала разработчик создает Pull Request или Merge Request (зависит от конкретного инструмента для ревью) — чтобы предложить изменения в репозитории, где его смогут увидеть другие разработчики. Отдельно можно прописать задачу и логику решения, какие изменения были внесены в код и дать комментарии к наиболее сложным фрагментам.
  2. Основной этап Code Review — это анализ качества кода. Под качеством кода подразумевается его чистота, читаемость, поддерживаемость и эффективность. Ревьюер проверяет, насколько код соответствует стандартам компании по стилю, объему, синтаксису и другим требованиям.
  3. Рекомендации. Проверив код, ревьюер оставляет комментарии для разработчика: что можно убрать, добавить или улучшить. 
  4. Внесение изменений. Разработчик берет в работу рекомендации ревьюера и отписывается по результатам. После этого код могут снова отправить на ревью или передать для тестирования.  

Чек-лист, по которому идет ревьюер в процессе проверки: 

  1. Читаемость: Проверить, легко ли понять код. Он должен быть чистым, понятным, с осмысленными названиями переменных и функций. Это важно для будущего сопровождения кода другими разработчиками.
  2. Логика и функциональность: Убедиться, что код делает именно то, что должен, и что логика работы корректная. Важно избежать багов и неправильной работы программы.
  3. Производительность: Оценить эффективность кода. Нужно убедиться, что алгоритмы и структуры данных оптимальны для быстроты работы, особенно если код будет использоваться в масштабируемых системах.
  4. Безопасность: Проверить уязвимости, такие как SQL-инъекции, неправильное управление доступом или хранение данных. Это важно для защиты данных и систем от хакеров.
  5. Тестирование: Убедиться, что код покрыт тестами, и они выполняются корректно. Это помогает убедиться, что новые изменения не ломают старую функциональность.
  6. Обработка ошибок: Проверить, как код обрабатывает исключения и ошибки. Важно, чтобы система могла продолжать работать или корректно сообщать об ошибках, не выдавая неконтролируемые сбои.
  7. Архитектура: Оценить, насколько структура кода соответствует общей архитектуре приложения. Это нужно для поддержания модульности и масштабируемости проекта.
  8. Зависимости: Проверить, не используются ли устаревшие или небезопасные внешние библиотеки, и не вводит ли код лишних зависимостей. Это важно для безопасности и упрощения будущих обновлений.
  9. Документация: Убедиться, что код и его функциональность документированы. Это помогает другим разработчикам и будущим вам быстро понять, как работает программа и как ее поддерживать.
В процессе проверки ревьюер движется от общего к частному: начинает с анализа решения и объема Merge Request, а заканчивает локальными правками на уровне отдельных строк
В процессе проверки ревьюер движется от общего к частному: начинает с анализа решения и объема Merge Request, а заканчивает локальными правками на уровне отдельных строк

Итогом ревью будут: 

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

Инструменты для Code Review

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

GitHub

Open source-сервис (то есть с открытым исходным кодом) для всех этапов разработки, где Code Review доступен в бесплатной и платных версиях. Для ревью используются Pull Request — то есть запросы на слияние изменений в коде с основной веткой. В них также коротко описывают суть и причины изменений.

Пример комментариев в рамках Code Review на GitHub
Пример комментариев в рамках Code Review на GitHub
Источник: github.com

Из минусов — отсутствие локальной версии и поддержка только тех git-репозиториев, которые размещены на этом ресурсе.  Чтобы работать с CI/CD, понадобится специальный инструмент — GitHub Actions. Также можно расширить функционал при помощи маркетплейса. 

GitLab

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

gitlab.com 
Источник: gitlab.com 

В отличие от GitHub, инструменты для работы с CI/CD уже встроены в сервис, а число пользователей с разными доступами в бесплатной версии не ограничено. Вместо Pull здесь используют Merge Request — запросы на слияние веток. 

Bitbucket

Сервис, который также можно использовать в облаке или на сервере. Важное отличие: в бесплатной версии доступны частные закрытые репозитории, но только для пяти пользователей. Есть интеграции с Jira, Trello и другими популярными IT-сервисами. Для Code Review используют Pull Request. 

atlassian.com
Источник: atlassian.com

Из минусов — отсутствие многофакторной аутентификации и встроенного редактора кода. 

Рекомендации по организации Code Review

Вот советы, которые помогут провести код-ревью с максимальной пользой: 

  1. Введите единые стандарты. В этом помогут Code Style и другие рекомендации по написанию кода, которыми будут пользоваться все разработчики. Тогда у ревьюера будут четкие критерии для проверки и оценки. 
Пример по организации Code Review
  1. Оценивайте код, а не разработчика. Задача ревьюера — докопаться до логики и донести суть проблемы, а не критиковать коллег. Поэтому комментарии должны быть дружелюбными, четкими и по существу. 
Пример хорошего комментария: дружелюбно и с конкретикой 
  1. Предлагайте решение. Если вы уже сталкивались с подобным и знаете, как устранить проблему, расскажите об этом в комментарии и дайте ссылку. 
Пример комментария с решением 
  1. Не придирайтесь к мелочам. Основное внимание в процессе код-ревью нужно уделять критическим ошибкам и уязвимостям, которые приведут к сбоям в работе. Бывает, что ревьюеру и вовсе не к чему придраться: код написан правильно, за исключением мелких недочетов. Тогда можно ограничиться рекомендациями и не выискивать ошибки «ради галочки». 
  2. Не забывайте хвалить. Задача ревьюера — не только критика, но и поддержка. Важно подмечать удачные решения и сообщать об этом автору, чтобы он понимал, что в команде его ценят. 

Что касается самих разработчиков, которые отправляют код на ревью, то главное правило — делать Pull Request или Merge Request как можно короче: 200-500 измененных строк кода. Иначе ревьюер потратит много времени только на то, чтобы прочитать запрос, и сроки проверки сильно затянутся. 

Идеальный код после ревью — это тот, который: 

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

Преимущества код-ревью

  1. Код становится лучше: и в плане читаемости, и в плане архитектуры. Во-первых, благодаря ревьюеру, во-вторых — самому разработчику: зная, что код будут проверять, он будет внимательнее в процессе работы. 
  2. Код пишется в едином стиле: разработчики знают, как оформить ту или иную строку и функционал и понимают, чего от них ждет ревьюер — потому что все работают по единым стандартам. Готовый код хорошо понятен всем разработчикам, включая тех, что будут работать с ним позже. 
  3. Повышается безопасность: код не содержит очевидных уязвимостей, которые могут навредить конечному продукту и его пользователям.
  4. Разработчики обмениваются опытом: причем не только от ревьюера к автору кода, но и наоборот. В итоге члены команды перенимают лучшие решения друг у друга, а новички учатся быстрее. 

Недостатки код-ревью

  1. Сроки проекта увеличиваются: иногда один код проходит несколько итераций ревью или его проверяет не один ревьюер, а больше. Тогда и сроки запуска могут существенно сдвинуться. 
  2. Нужно больше ресурсов: особенно если речь идет о ревью в несколько этапов. Для каждого нужно выделить ревьюера, который потратит время на проверку чужого кода вместо написания собственного. 
  3. Возможны конфликты: восприятие критики во многом зависит от корпоративной культуры. В некоторых случаях разработчики могут болезненно реагировать на большое количество правок и рекомендаций, особенно если это опытные сотрудники. Бывает, что и сами ревьюеры оставляют некорректные комментарии, что вызывает негатив. Однако в компаниях с правильно выстроенной культурой обсуждение кода проходит конструктивно, а фидбек воспринимается как возможность для улучшения.

Когда и кому нужен review кода?

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

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

Независимо от размера команды, уровня опыта разработчиков или стиля работы (например, парное программирование), код-ревью всегда остается важной частью разработки, которая обеспечивает контроль качества и безопасность кода.

Без него невозможно гарантировать стабильность и поддерживаемость проекта в долгосрочной перспективе.

А если вам нужна помощь с разработкой, аудитом или сопровождением вашего проекта – переходите на эту страницу и оставляйте заявку, чтобы наша команда погрузилась в ваш вопрос и предложила решение!

Автор статьи
WB—Tech Team
Создано командой WB—Tech с любовью 💙

Подпишитесь на блог WB—Tech

Никакого спама, только анонсы новых статей

    ИП Гришанин Кирилл Олегович
    ИНН 774313842609

    Подписаться на новости блога

      Подписаться на обновления блога

      Коворкинг Starthub

      Б. Новодмитровская ул., 36, стр. 12, вход 6,
      Москва, Россия, 127015

      Коворкинг Wework

      Ahad Ha'am 54,Tel Aviv-Yafo,Израиль

      © 2023 WB—Tech. Мы разрабатываем уникальные решения для компаний из России, США и Европы.