Как вы управляете рефакторингом с большой базой кода и многими разработчиками?

13

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

У нас есть 4,5 миллиона строк кода и более 20 команд разработчиков на четырех континентах.

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

Знаете ли вы о решении?

Роджер К.С. Вернерссон
источник
1
Не знаю ни о каких плагинах Eclipse ... это больше похоже на работу системы контроля версий.
SL Barth - Восстановить Монику
Почему вы хотите предотвратить это? Чтобы избежать осложнений (ошибок) или сэкономить время разработчика? Решение во многом зависит от ответа на эту ИМО.
KaptajnKold
Почему бы вам не попробовать SVN, Apache Subversion или Tortoise svn.
1
Почему двадцать команд редактируют один и тот же источник?
У нас есть VCS. Мы только что перешли с ClearCase на Git.
Роджер К.С. Вернерссон

Ответы:

14

Многие системы контроля версий 2-го поколения работают с использованием подключенной «проверки», которая сообщает серверу, что вы собираетесь изменить файл. Примеры включают TFS, SourceGear Vault и многие другие. Таким образом, вы можете технически выполнить ваше требование. Однако, как отметил Адам Батлер, эти типы инструментов имеют свои собственные проблемы (без долгих споров - ограниченная поддержка автономной работы и, как правило, контрпродуктивный рабочий процесс разработки).

Я бы определенно предложил какой-то иерархический подход к распределению работы по рефакторингу. Разработчики могут быть логически сгруппированы в подгруппы, каждая из которых отвечает за определенные области кода. В зависимости от того, как вам нравится структурировать команды, у каждого из них может быть «ведущая» роль, которая отвечает за высокоуровневый дизайн области команды. Эта структура должна быть хорошо известна разработчикам, и она должна упростить взаимодействие для рефакторинга. Я уверен, что этот подход для некоторых кажется слишком формальным и обратным, но я думаю, что более 20 разработчиков должны использовать «бесплатный для всех» подход к рефакторингу большой системы. Некоторые рефакторинги будут проходить на высоком уровне (например, как модуль X будет взаимодействовать с модулем Y), в этом случае вам понадобятся люди, которые могут звонить на соответствующем уровне. Не каждый разработчик в команде должен принимать архитектурные решения, поэтому иерархия почти навязывается в любом случае, даже если кто-то не знает об этом.

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

Даниэль Б
источник
Большинство меняет вертикаль; модифицирует графический интерфейс, сетевые протоколы, базу данных, работает. Нам нужен инструмент, чтобы помочь нам общаться рефакторинга. Мы стараемся реорганизовывать код при каждой регистрации, чтобы улучшить читаемость и снизить стоимость обслуживания.
Роджер К.С. Вернерссон
@RogerWernersson - я понимаю, я просто не думаю, что есть хороший способ сделать это. Вот почему в моем ответе рекомендовалось структурировать команды и обязанности, а также культуру компании, чтобы в результате минимизировать шаг. Попытка ретроспективно установить параллельную проверку поверх git будет болезненной и, вероятно, будет иметь все недостатки централизованной системы контроля версий. Я уверен, что кто-то сделал это, вы должны быть в состоянии найти некоторые конкретные реализации, теперь, когда вы упомянули, что используете git.
Даниэль Б
7
  1. Убедитесь, что разработчикам назначены конкретные модули.
  2. Иметь систему отслеживания задач / ошибок, которая отслеживает каждое изменение рефакторинга. Назначить каждую проблему только одному разработчику
  3. Некоторые системы контроля версий могут блокировать файл, так что только один разработчик может иметь права на обновление файла. Я никогда не использовал эту функцию, но если разработчики постоянно переступают друг с другом, это то, что вы можете рассмотреть.
  4. Проведите модульные тесты, чтобы даже если разработчики работали над одним файлом, вы знаете, что их изменения никак не повредят приложение.
  5. Все вышеперечисленное поможет, если ваш рефакторинг содержится в модулях. Однако, если кто-то проведет рефакторинг по сквозной проблеме, такой как ведение журнала или безопасность, это повлияет на многие файлы по определению. С ними нужно обращаться осторожно, особенно если вы еще не воспользовались всеми подходами.
Sriram
источник
Я за использование блокировок в принципе, но что делать, если ваш инструмент (например, Eclipse) автоматически изменяет многие файлы посредством рефакторинга. Должны ли все измененные файлы быть заблокированы автоматически? Количество заблокированных файлов может расти очень быстро. Должны ли замки приобретаться постепенно? Как справиться с тупиками?
Джорджио
Если вы изменяете сигнатуру метода, и это влияет на многие файлы, вы должны получить блокировку для всех файлов. В случае, если у кого-то еще есть блокировка, вы можете получить блокировку принудительно (svn позволяет это), если ваш рефакторинг имеет более высокий приоритет.
Шрирам
Может ли это быть автоматизировано (путем сохранения приоритетов и автоматического разрешения конфликтов блокировки)? Или каждый разработчик решает, имеет ли их рефакторинг более высокий приоритет?
Джорджио
Я предполагаю, что если приоритеты хранятся в приложении mgmt задачи с приличным API, вы можете автоматизировать его. Я никогда не пробовал, но не понимаю, почему это невозможно.
Шрирам
Я не хочу поднимать ошибку для каждого рефакторинга. Подход состоит в том, чтобы очистить код, который вы меняете. Подача отчета об ошибке для каждого файла звучит как слишком много работы.
Роджер К.С. Вернерссон
6

Существуют / были системы контроля версий, которые заставляют разработчиков проверять код, прежде чем они смогут редактировать, но у них есть свои проблемы. Лучше практиковаться в том, чтобы разработчики часто фиксировали и обновляли. Один разработчик может затем пометить класс как устаревший и зафиксировать, а затем, если другой разработчик обновится до того, как запустит свой рефакторинг, он увидит намерение.

Адам Батлер
источник
3
+1: фиксация и обновление часто также означают, что изменения являются небольшими и легко управляемыми, что облегчает управление конфликтами.
Bringer128
Фиксация часто поможет. К сожалению, я не могу это изменить. Я ищу инструмент, который поможет нам общаться.
Роджер К.С. Вернерссон
3

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

quant_dev
источник
3
Он говорил о 20 командах, а не о команде из 20 человек.
Инго
1
+1 за технологию не может решить социальные проблемы. Но измените ответ, чтобы сказать: «С 20 командами, некоторая структура и правила будут существенными»
MarkJ
Некоторые люди спят, а другие работают. У нас есть команды на четырех континентах.
Роджер К.С. Вернерссон
0

Если вы уходите notice that someone else is working on the same piece of code and talk to the first one before modifying anything, как вы сказали, вам нужна система контроля версий (CVS / SVN / GIT). Я не уверен, хотя, но если вы хотите включить это, вам понадобятся некоторые продвинутые вещи (какой-то механизм запуска / некоторые пользовательские вещи, возможно).

c0da
источник
У нас есть Git. До этого у нас был ClearCase. VCS не является решением. Нам нужен какой-то механизм запуска.
Роджер К.С. Вернерссон,
0

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

4.5 миллиона LOC - это огромная песочница для игры, поэтому в хорошо спроектированном и спроектированном решении вы редко сталкиваетесь с ситуацией, когда несколько команд разработчиков сталкиваются друг с другом. Тот факт, что это происходит более чем случайно, говорит о некоторых серьезных потенциальных недостатках дизайна, которые следует рассмотреть.

maple_shaft
источник
Большинство изменений являются вертикальными; GUI, сетевые протоколы, база данных. Каждая команда гибкая и ориентирована на обеспечение ценности клиента на каждом спринте. У нас не может быть одной команды в базе данных, одной в GUI и т. Д. Было бы проще, если бы код был чище. Но путь к чистому коду пишется "много небольших рефакторингов".
Роджер К.С. Вернерссон
0

Несколько вещей:

  1. Отдельные модули для работы над
  2. Говоря об изменениях, прежде чем они будут сделаны [со всеми разработчиками]
  3. Модульное тестирование [для проверки и предотвращения взлома связанных вещей]
  4. Как другие упоминали VCS
monksy
источник
1. тяжело, когда каждая команда работает вертикально 2. тяжело, потому что некоторые команды спят, в то время как другие работают 3. не решает проблему 4. Где сейчас Git, ранее на ClearCase.
Роджер К.С. Вернерссон