Идеальный инструмент для просмотра кода
Nov 27, 2016 · CommentsИнспекция кодаПрограммирование
Здравствуйте. Меня зовут Алексей и я каждое утро просматриваю чужой код…
За последнее время пришел к выводу, что ни один из известных мне инструментов для просмотра кода (в смысле “code review”) решительно не годится для выполнения своей главной функции.
Если посмотреть на проблему в высоты птичьего полета, что цель просмотра кода заключается в том, чтобы как минимум два человека разобрались и поняли в кусок кода насколько хорошо, что они оба могут за него поручится. Процесс этот итеративный, основанный на постоянном общении автора кода и рецензента (за не имением лучшего термина). Автор и рецензент обсуждают дизайн, изменения в коде, и исправляют ошибки. Кроме того, и автор, и рецензент заинтересованы в том, чтобы финальная версия кода в репозитории и одобренная по результатам обсуждения в версия кода совпадали.
Основываясь на описании выше можно написать список требований, которым должен удовлетворять хороший инструмент:
- Должна поддерживаться нелинейная и несвязанная история изменений. Попытки упростить модель до линейного списка версий для каждого файла обеспечены на провал.
- Должно поддерживаться сравнение любых версий любых файлов. Сравнение директорий бы тоже не помешало, но давайте будем реалистами - it ain’t gonna happen.
- Помимо обычного diff, нужен экран, показывающий результат трехстороннего слияния. Когда автор кода делает rebase, он смотрит на четыре версии кода. Рецензент должен иметь аналогичную возможность.
- Должен поддерживаться список найденных дефектов, причем новые комментарии должны по-умолчанию помечаться как дефекты. Все дефекты должны быть закрыты по окончанию просмотра.
- Интерфейс (в том числе автоматические уведомления через email) должен четко указывать от кого ожидается следующее действие.
Помимо этого списка есть еще опциональные пожелания:
- Должны быть возможность указать на код с точностью до символа. Например, было бы удобно выделить кусок кода, чтобы его прокомментировать.
- Система адресации кода должна позволять комментировать удаленный код (и не терять связь при добавлении новых изменений).
- Должна быть возможность создать постоянный линк на кусок кода, комментарий, тикет в баг-трекере, комит, другую сессию просмотра кода, и т.п. Сессии со всем содержимым должны сохранятся так же, как и история изменений в системе контроля версий.
Так вот, все инструменты для просмотра кода с которыми мне довелось сталкиваться не поддерживают пункты 1, 2, 3 и кое-как справляются с 4 и 5. Для примера можно сравнить не сильно сложный pull request интерфейс в Stash и Code Collaborator, который претендует на звание серьезного инструмента. Stash показывает только текущее состояние ветки, не позволяет сравнивать файлы, и поддерживает странную модель tasks, в качестве суррогата списка дефектов. Иными словами из пяти пунктов не поддерживается ни один. С другой стороны Stash на многое не претендует. Code Collaborator поддерживает 4 и 5, но с первыми тремя пунктами там все очень и очень печально.
Я, все-таки, наверное, слишком многого хочу.