Есть ли момент, когда стоимость рефакторинга перевешивает стоимость переписывания?

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

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

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

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

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

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

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

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

6 ответов


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

рефакторинг-почти наверняка правильный ответ. У меня нет опыта рефакторинга PHP (я делаю C++ и C#), поэтому я не могу предложить никаких конкретных советов. Вы должны продолжить с ребенком лестница.

  • во-первых, определить части кода, которые оскорбляют тебя. Для меня, в C++, это глобальные переменные.
  • во-вторых, сделайте небольшие рефакторинги, чтобы удалить одну проблему за раз. Чтобы избежать взлома старых клиентов этого кода, вам может потребоваться создать фасад. Либо вы можете поместить новый фасад на старый код, либо вы можете поместить старый фасад на новый код.
  • третий и самый важный, если вы не действительно уверены, убедитесь, что у вас есть солидный набор модульных тестов для кода, который вы собираетесь рефакторинг.

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

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


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


Это очень трудное решение...

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

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

есть три варианта:

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

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


на небольшом уровне да: предоставьте новую версию функции, убедитесь, что она работает как с новой, так и со старой, удалите старую. Это достаточно часто быстрее, чем рефакторинг сама функция. Но на этом уровне, это рефакторинг :)

на стратегическое стоимость перезаписи практически всегда превышает рефакторинг.

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


да сценарии, где переписать дешевле можно построить:

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

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


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


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