У нас весь код должен проходить обязательное код-ревью. Процесс код-ревью преследует несколько целей:
Ревью проводятся с помощью инструмента Upsource по адресу: http://upsource.libicraft.com. Также рекомендуется установить плагин для IDE Upsource Integration, которым довольно удобно пользоваться.
Мы практикуем post-commit review — просмотр кода происходит после того, как он попал в центральный репозиторий. Это не означает, что код может “лежать” там непросмотренным бесконечное время. Нужно придерживаться определённых в этом документе сроков и стараться завершить ревью как можно быстрее. Так работа будет вестись с кодом, который ещё лежит в оперативной памяти мозга и не потребуется тратить время на многократную загрузку с жёсткого диска 🙂
Чтобы процесс код-ревью не отодвинул основную работу по выполнению задач на второй план, рекомендуется выделять для ревью определённое время в течение дня (например, вечером перед уходом домой) не больше часа и заниматься просмотром кода коллег только в это время. Но к исправлению замечаний по своему коду следует относится как к исправлению своих багов и отдавать должный приоритет.
Код-ревью — рутинный процесс, который нужно научиться выполнять правильно, чтобы не усложнять жизнь ни себе, ни коллегам. Upsource не позволяет польностью зарегламентировать процесс. Поэтому следует отнестись к освоению алгоритма серьёзно (но без излишнего фанатизма 🙂 )
После того, как фича сделана или баг исправлен и код запушен в центральный репозиторий, разработчик должен запостить код-ревью в upsource. Для этого нужно:
Ревью необходимо постить сразу после пуша в центральный репозиторий.
Не нужно постить ревью на изменения, которые содержат в себе мелкие исправления код-стайла.
Коммит должен быть небольшой, затрагивать немного файлов и заключать в себе минимальное количество реализованного функционала. Это правило касается любого хорошего коммита, а не только в контексте процесса код-ревью.
Большие ревью очень трудно проводить. Они приводят либо к просмотру ревьюером “спустя рукава” по диагонали, либо к затягиванию процесса.
Прежде, чем коммитить код, разработчик должен сам просмотреть его и проверить:
console.log
, debugger
и т.д.)?Примечание
Для удобного просмотра изменений перед коммитом следует использовать функцию Commit Changes в WebStorm/IDEA, а не мнить себя крутым хакером, которому “в командной строке удобнее в стопицот раз”.
Следует написать понятный комментарий к коммиту с описанием того, о чём исправления, с указанием номера issue в YouTrack (если есть).
Подходить к выбору ревьюеров с умом, а не по принципу “добавлю-ка всех на всякий случай”. Помогут следующие ориентиры:
Ревьюер получает уведомление на почту и должен просмотреть, прокомментировать и дать своё заключение. Это можно сделать как в веб-интерфейсе Upsource, так и в IDE (если стоит плагин).
Максимальный срок на просмотр - 2 рабочих дня, но если нет никаких особых причин, ревью следует проводить в течение одного дня.
Если ревьюер понимает, что он перегружен и ревью может провести кто-нибудь другой без ущерба для результата, или считает, что есть более удачная кандидатура на просмотр этого кода, то он может написать соответствующий комментарий в ревью (обязательно!) и удалить себя из списка ревьюеров.
Ревьюер может писать комментарии одного из трёх типов:
Если есть хотя бы один комментарий первого или второго типа, то по завершению просмотра ревьюер должен отклонить
изменения, нажав кнопку 👎 Raise concern
, иначе — принять изменения, нажав кнопку 👍 Accept
.
Автор должен просмотреть и отреагировать на замечания ревьюера в течение одного рабочего дня. Реакция должна быть следующей:
В ответ на комментарий, требующий исправления дефекта, можно отреагировать следующими действиями:
Create issue
) с техническим долгом и дать ссылку в ответе.При этом галочка Resolved не должна выставляться автором, такие замечания резолвит ревьюер.
В ответ на комментарий, требующий ответа, автор должен что-нибудь ответить :) При этом галочка Resolved также не должна выставляться автором, такие обсуждения резолвит ревьюер.
Информационный комментарий автор должен прочитать и выставить галочку Resolved, если ему всё понятно и нечего сказать, либо ответить с целью продолжить дискуссию. Во втором случае галочку надо выставить, когда дискуссия завершена.
Очень желательно, чтобы коммит с исправлениями по ревью содержал сразу исправления по всем замечаниям и только их.
Если в файлах, которые нужно закомитить, содержатся посторонние незакомиченные изменения, то лучше до внесения
исправлений по ревью, воспользоваться командой git stash
или соответствующей функцией в IDE.
Комментарий к комиту должен содержать номер ревью, например:
LCB-CR-3 code-style fixes
Тогда Upsource сам добавит это изменения в соответствующий ревью. Если этого не сделать, нужно добавлять этот комит в ревью вручную из веб-интерфейса.
Старайтесь не подмешивать в этот коммит посторонние изменения. Это сильно затруднит работу ревьерам.
Не забудьте сделать git push
, чтобы ревьюеры увидели изменения :)
Когда ревью обновляется новыми коммитами и комментариями, ревьюер должен просмотреть все изменения и ответы. Если ответное действие на его замечание его устраивает, то ревьюер выставляет галочку Resolved у этого комментария/обсуждения. Если не устраивает — пишет соответствующий ответ.
Если ревьюер находит в коде какие-то новые дефекты, то он должен добавить новый комментарий, как на втором этапе.
Ревьюер должен просматривать и резолвить в первую очередь только свои комментарии. Однако, в очевидных случаях или по договорённости он может закрывать дискуссии, инициированные другими ревьюерами, тоже.
Если все свои и комментарии других ревьюеров, с которыми он согласен, помечены Resolved, то ревьюер должен принять
изменения, нажав кнопку 👍 Accept
. Иначе — отклонить кнопкой 👎 Raise concern
, что возвращает процесс ревью
к шагу 3.
Сроки подверждения/отклонения изменений ревьюером такие же, как и на этапе комментирования: максимум — 2 рабочих дня, желательно — за 1 день.
Автор может закрыть ревью, нажав кнопку Close review
в одном из следующих случаев:
Ревью нельзя закрыть, если ни один ревьюер не просмотрел его и не поставил свою резолюцию (неважно, положительную или отрицительную). Также перед закрытием должны быть отработаны все замечания, сделанные ревьюерами.