Идеальный инструмент для просмотра кода

Здравствуйте. Меня зовут Алексей и я каждое утро просматриваю чужой код…

За последнее время пришел к выводу, что ни один из известных мне инструментов для просмотра кода (в смысле “code review”) решительно не годится для выполнения своей главной функции.

Если посмотреть на проблему в высоты птичьего полета, что цель просмотра кода заключается в том, чтобы как минимум два человека разобрались и поняли в кусок кода насколько хорошо, что они оба могут за него поручится. Процесс этот итеративный, основанный на постоянном общении автора кода и рецензента (за не имением лучшего термина). Автор и рецензент обсуждают дизайн, изменения в коде, и исправляют ошибки. Кроме того, и автор, и рецензент заинтересованы в том, чтобы финальная версия кода в репозитории и одобренная по результатам обсуждения в версия кода совпадали.

Основываясь на описании выше можно написать список требований, которым должен удовлетворять хороший инструмент:

  1. Должна поддерживаться нелинейная и несвязанная история изменений. Попытки упростить модель до линейного списка версий для каждого файла обеспечены на провал.
  2. Должно поддерживаться сравнение любых версий любых файлов. Сравнение директорий бы тоже не помешало, но давайте будем реалистами - it ain’t gonna happen.
  3. Помимо обычного diff, нужен экран, показывающий результат трехстороннего слияния. Когда автор кода делает rebase, он смотрит на четыре версии кода. Рецензент должен иметь аналогичную возможность.
  4. Должен поддерживаться список найденных дефектов, причем новые комментарии должны по-умолчанию помечаться как дефекты. Все дефекты должны быть закрыты по окончанию просмотра.
  5. Интерфейс (в том числе автоматические уведомления через email) должен четко указывать от кого ожидается следующее действие.

Помимо этого списка есть еще опциональные пожелания:

Так вот, все инструменты для просмотра кода с которыми мне довелось сталкиваться не поддерживают пункты 1, 2, 3 и кое-как справляются с 4 и 5. Для примера можно сравнить не сильно сложный pull request интерфейс в Stash и Code Collaborator, который претендует на звание серьезного инструмента. Stash показывает только текущее состояние ветки, не позволяет сравнивать файлы, и поддерживает странную модель tasks, в качестве суррогата списка дефектов. Иными словами из пяти пунктов не поддерживается ни один. С другой стороны Stash на многое не претендует. Code Collaborator поддерживает 4 и 5, но с первыми тремя пунктами там все очень и очень печально.

Я, все-таки, наверное, слишком многого хочу.

comments powered by Disqus