Зачем проводить Code Review?

Linus’s Law: «given enough eyeballs, all bugs are shallow»

«Зачем проводить Code Review?», — вопрос достаточно распространенный.

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

Wikipedia о code review нам говорит следующее: «улучшение качества программного продукта и совершенствование навыков разработчика. …могут быть найдены и устранены такие проблемы, как ошибки в форматировании строк, состояние гонки, утечка памяти и переполнение буфера, что улучшает безопасность программного продукта»

Всё верно, но ревью кода решает еще две очень важные задачи, которые невозможно решить никаким иным путем:

  • Синхронизация ментальных моделей
  • Распространение знаний о коде

Все остальное: качество, корректность и т.д. так или иначе, костылями и/или автотулами можно сделать, а вот понять код можно только просмотрев код и никак иначе.

Синхронизация ментальных моделей

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

Распространение знаний

Для того, чтобы что-то в коде поменять, надо знать где менять и что менять. Ревью позволяет расширить границы знаний о коде. Память штука хитрая и она напомнит, что «функция проверки номера пластиковой карты была где-то в модуле cards, примерно в классе panverify». Даже если вы всего лишь один раз ознакомились с этим кодом несколько месяцев назад. Если вы действительно разобрались что код выполняет, то память воскресит воспоминания.

Другие плюшки от Code Review

  • Повышает понятность, ведь автор вынужден привести код к такому виду, чтобы он был понятен ревьюерам
  • Формирует общий словарь для общения на уровне кода
  • Является катализатором к выработке общих соглашений об оформлении кода, т.е. code convention не от документа к коду, а от практики, непосредственно от кода
  • Снижает количество уязвимостей в коде

Итог

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

Share

Leave a Reply