Инженерная практика: Просмотр кода (Code Rewiev, CR)
Просмотр кода (ревью, Code review) — инженерная практика в терминах гибкой методологии разработки. Это анализ (инспекция) кода с целью выявить ошибки, недочеты, расхождения в стиле написания кода, в соответствии написанного кода и поставленной задачи.
Достоинства
К очевидным плюсам этой практики можно отнести:
- Улучшается качество кода
- Находятся «глупые» ошибки (опечатки) в реализации
- Повышается степень совместного владения кодом
- Код приводится к единому стилю написания
- Хорошо подходит для обучения «новичков», быстро набирается навык, происходит выравнивание опыта, обмен знаниями.
Недостатки
Основная сложность, с которой мы столкнулись, когда внедряется просмотр кода в первый раз: это невозможность контроля изменений по его результатам. Отчасти это может быть связано с тем, что данная практика применяется без других практик — CI (это еще раз доказывает тот факт, что все инженерные практики должны применяться вместе).
Что можно инспектировать
Для ревью подходит любой код. Однако, просмотр кода обязательно должно проводиться для критических мест в приложении (например: механизмы аутентификации, авторизации, передачи и обработки важной информации — обработка денежных транзакций и пр.).
Самое главное при проведении обзора кода — это использование полученного результата. В результате review могут появиться следующие артефакты:
- Описание способа решения задачи (design review)
- UML диаграммы (design review)
- Комментарии к стилю кода (code review)
- Более правильный вариант (быстрый, легкочитаемый) реализации (design review, code review)
- Указание на ошибки в коде (забытое условие в switch, и т.д.) (code review)
- Юнит тесты (design review, code review)
При этом очень важно, чтобы все результаты не пропали, и были внесены в систему управления версиями (VCS), wiki.
Из чего состоит обзор кода
- Сначала архитектурный обзор — анализ будущей архитектуры. Данный этап очень важен, так как без него ревью кода будет менее полезным или вообще бесполезным (если программист написал код, но этот код полностью неверен — не решает поставленную задачу, не удовлетворяет требованиям по памяти, времени). Пример: программисту поставили задачу написать алгоритм сортировки массива. Программист реализовал алгоритм bogo-sort, причем с точки зрения качества кода — не придраться (стиль написания, проверка на ошибки), но этот алгоритм совершенно не подходит по времени работы. Поэтому ревью в данном случае бесполезно (конечно — это утрированный пример, но я думаю, суть ясна), здесь необходимо полностью переписывать алгоритм.
- Собственно, сам обзор кода — анализ написанного кода. На данном этапе автору кода отправляются замечания, пожелания по написанному коду.
Также очень важно определиться, за кем будет последнее слово в принятии финального решения в случае возникновения спора. Обычно, приоритет отдается тому кто будет писать код, либо специальному человеку, который отвечает за этот код (как в google — code owner).
Как проводить архитектурный обзор (design review)
Design review можно проводить за столом, в кругу коллег, у маркерной доски, в корпоративной wiki. На design review тот, кто будет писать код, расскажет о выбранной стратегии (примерный алгоритм, требуемые инструменты, библиотеки) решения поставленной задачи. Вся прелесть этого этапа заключается в том, что ошибка проектирования будет стоить 1-2 часа времени (и будет устранена сразу на review).
Как проводить code review
Можно проводить code review разными способами — дистанционно, когда каждый разработчик сидит за своим рабочим местом, и совместно — сидя перед монитором одного из коллег, либо в специально выделенным для этого месте, например meeting room. В принципе существует много способов (можно даже распечатать исходный код и вносить изменения на бумаге).
Pre-commit review
Данный вид review проводится перед внесением изменений в VCS. Этот подход позволяет содержать в репозитории только проверенный код. В microsoft используется этот подход: всем участникам review рассылаются патчи с изменениями. После того как собран и обработан фидбэк, процесс повторяется до тех пор пока все ревьюверы не согласятся с изменениями.
Post-commit review
Данный вид review проводится после внесения изменений в VCS. При этом можно коммитить как в основную ветвь, так и во временную ветку (а в основную ветку вливать уже проверенные изменения).
Тематические review
Можно также проводить тематические code review — их можно использовать как переходный этап на пути к полноценному code review. Их можно проводить для критического участка кода, либо при поиске ошибок. Самое главное — это определить цель данного review, при этом цель должна быть обозримой и четкой:
- «Давайте поищем ошибки в этом модуле» — не подходит в качестве цели, так как она необозрима.
- «Анализ алгоритма на соответствие спецификации RFC 1149» — уже лучше.
Основное отличие тематических review от полноценного code review — это их узкая специализация. Если в code review мы смотрим на стиль кода, соответствие реализации и постановки задачи, поиск опасного кода, то в тематическом review мы смотрим обычно только один аспект (чаще всего — анализ алгоритма на соответствие ТЗ, обработка ошибок).
Рекомендуем посмотреть:
Какая коммуникация наиболее эффективна
23.06.2018