Какова будет наилучшая практика для «просмотра» исходного кода в репозитории исходного кода?

12

Каков будет лучший способ управления проверенным исходным кодом в репозитории исходного кода? Должен ли исходный код пройти процесс проверки перед регистрацией, или же проверка кода должна произойти после того, как код будет зафиксирован? Если проверка происходит после регистрации кода в репозитории, то как это следует отслеживать?

Вимал Радж
источник

Ответы:

4

Google имеет лучшие практики проверки кода из всех, где я когда-либо видел. Все, кого я там встретил, полностью согласны с тем, как делать проверки кода. Мантра - это «обзор рано и часто».

Предположим, вы используете процесс, который выглядит так, как предложил Грэм Ли. (Это процесс, который я раньше использовал сам.) Проблема в том, что рецензентов просят взглянуть на большие куски кода. Это намного больше усилий, и заставить рецензентов сделать это труднее. И когда они это делают, им сложнее заставить их выполнить всю работу. Более того, когда они замечают проблемы с дизайном, труднее заставить разработчиков вернуться и переделать весь свой рабочий код, чтобы сделать его лучше. Вы все еще ловите вещи, и это все еще ценно, но вы не заметите, что упускаете более 90% выгоды.

В отличие от Google, проверка кода на каждый коммит, прежде чем он может перейти в систему контроля версий. Наивно многие думают, что это будет тяжелый процесс. Но на практике это не сработает. Оказывается, гораздо проще просматривать небольшие фрагменты кода изолированно. Когда обнаружены проблемы, изменить дизайн гораздо меньше, потому что вы еще не написали кучу кода вокруг этого дизайна. В результате гораздо проще выполнить тщательный анализ кода, и гораздо проще исправить проблемы, измененные.

Если вы хотите сделать обзор кода, как это делает Google (что я действительно очень рекомендую), есть программное обеспечение, которое поможет вам в этом. Google выпустил их инструмент, интегрированный с Subversion под именем Rietveld . Go (язык) разработан с версией Rietveld, которая модифицирована для использования с Mercurial. Существует переписать для людей, которые используют Git по имени Gerrit . Я также видел два коммерческих инструмента, рекомендованных для этого, Crucible и Review Board .

Единственная, которую я использовал, это внутренняя версия Google от Ритвельда, и я был очень доволен ею.

btilly
источник
4

Техника, которую я использовал в нескольких командах, такова:

  • разработчики могут интегрировать исходный код в свою ветку или локальный репозиторий без проверки
  • разработчики могут интегрироваться с магистралью / хозяином без обзора
  • код должен быть проверен, а комментарии к обзору - перед тем, как его можно будет интегрировать из магистрали / мастера в ветку кандидата на выпуск

Ответственность за поиск рецензии несет автор кода, а ответственный за поддержку ветки релиза - обеспечить объединение только проверенного кода.

Есть инструменты, которые поддерживают проверку кода, но я никогда не использовал их. Отслеживание, кто сделал обзор для любого слияния, может быть сделано в репо. Я использовал свойства SVN и выполняю задания, прикрепленные к коммитам, чтобы показать, кто что просматривал.


источник
2
+1: за исключением того, что «автор кода обязан искать рецензию». Если руководство не потребует, чтобы проверки были завершены, они потеряют свою актуальность. Должна быть какая-то система вознаграждений (даже случайная или неформальная), иначе она не будет выполнена. Ответственный за ветку отвечает кому-то и получает какую-то награду за дисциплинированность при проверке проверок кода. Этот кусок головоломки также важен. Не могли бы вы описать, почему люди будут дисциплинированы в этом?
S.Lott
@ S.Lott о командах, над которыми я работал, профессиональная гордость. Кроме того, если вы не получите обзор, ваш код не будет интегрирован (как описано выше). Поэтому ваш код не попадает в продукт, и вы не выполняли работу в тот день / неделю / итерацию. Если ваши разработчики не заинтересованы в том, чтобы выполнять свою работу, у вас проблемы хуже, чем организация вашего репозитория управления версиями.
@Graham Lee: "Профессиональная гордость"? Я издеваюсь (но мне не о чем продолжать). «У разработчиков нет мотивации делать свою работу» - вот в чем проблема. Многие менеджеры подорвали бы хороший процесс, потребовав релиза до графика или потребовав включить дополнительные функции. Какие мотивирующие факторы существуют, чтобы предотвратить подрыв процесса? Что мешает менеджеру сказать: «Нам нужно это завтра, у нас нет времени для проверки кода»?
S.Lott
@ S.Lott Я не знаю о вас, но я не выпускаю кучу дерьма с ошибками, независимо от того, насколько менеджер думает, что он лучше знает о том, как выполняется моя работа.
@Graham Lee: Я стараюсь не выпускать код ошибки. Мой вопрос: «что побуждает вашу команду избегать подрыва вашего процесса со стороны руководства». Это хороший процесс, я хочу знать больше.
S.Lott
1

Я никогда не разделял код для проверки по фиксированным / не зафиксированным критериям - единственные критерии, с которыми я столкнулся, это то, что модульные тесты и интеграционные тесты имеют зеленый цвет.

Что касается отслеживания, я бы порекомендовал обновить поток в вашем любимом трекере. Для экзамена вместо:

  • Владелец продукта -> Аналитик -> Разработчик -> QA -> Релиз инженер

Вы можете представить еще один этап (обзор):

  • Владелец продукта -> Аналитик -> Разработчик -> Рецензент -> QA -> Релиз инженер

Поэтому для каждого тикета в состоянии « Реализовано» вы можете назначить рецензента, и только проверенные тикеты перейдут в QA.

Андрей Таптунов
источник
1

У меня есть только один опыт проверки кода, поэтому я не могу сказать, насколько он хорош.

Я работал с небольшой (~ 10-15) группой кодеров, и мы использовали VS Team Foundation Studio. Нас попросили фиксировать код примерно раз в день, и перед каждым кодом коммитов кто-то другой в группе должен был проверять его (надеюсь, кто-то также участвовал в проекте). Во время фиксации имя человека также было включено в поле.

apoorv020
источник
Только совершение раз в день поражает меня как красный флаг. Сожалею.
Btilly
Может быть. Сначала я тоже был несколько удивлен. Однако это не было жестким и быстрым правилом, и вы могли «откладывать» локальные изменения столько, сколько хотели.
apoorv020
0

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

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

Ян
источник
0

Способ, которым мы занимались обзорами кода, заключался в том, что каждая задача нашего программного обеспечения для отслеживания проектов была рассмотрена. В то время мы использовали Mantis и SVN. Наши проектные обязательства были связаны с обеими системами. Каждый коммит должен был быть привязан к заданию в богомоле. Как только задача была выполнена, ей был присвоен статус «Готов к просмотру».

RFR-объекты затем были отобраны любым, у кого было свободное время для проверки, или были назначены конкретному человеку для проверки. По пятницам все пункты RFR должны были быть рассмотрены до конца дня, чтобы не было переносов на следующую неделю.

Единственными проблемами, с которыми мы столкнулись при этом процессе, были большие элементы, которые имели массу файлов. Чтобы справиться с этим, кодер и рецензент собирались вместе, и кодер проходил через изменения, пока рецензент не понял их. Они будут делать обзор кода вместе.

Этот процесс прервался, когда руководство продиктовало, что если было выполнено одноранговое программирование, отдельная проверка кода не требовалась. Разработчики стали слабо относиться к этому процессу, и начали появляться небольшие глупые ошибки. В конце концов мы вернулись к первоначальному процессу, и все вернулось вместе.

Эми Паттерсон
источник
0

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

Наша организация использует Perforce для контроля версий. Perforce (по состоянию на год назад) включает функцию стеллажей. С помощью стеллажей я могу «отложить» свои изменения для конкретной проблемы. Они хранятся в системе контроля версий, но не регистрируются. Затем я прошу другого разработчика в моей команде пересмотреть код.

Другой разработчик может просматривать мои ожидающие изменения в Perforce со своего собственного компьютера и сравнивать изменения с самыми последними ревизиями. Он также может «отменить» свою локальную машину, если хочет попробовать мои изменения. Когда он закончил обзор, он дал мне знать. Затем я проверяю свой код с помощью «Reviewed by Bob» в конце комментария.

Это сработало очень хорошо для нас. Прежде всего, обзоры кода в целом оказались чрезвычайно полезными. Кроме того, функция стеллажей от Perforce позволяет нам проводить проверки без регистрации или каких-либо серьезных трудностей, даже несмотря на то, что наша команда широко распространена - это очень важно. И это прекрасно работает.

Tyrel
источник