Я собираюсь начать планирование основного рефакторинга нашей кодовой базы, и я хотел бы получить некоторые мнения и ответы на некоторые вопросы (я видел довольно много дискуссий по подобным темам, например https://stackoverflow.com/info/108141/how-do-i-work-effectively-with-very-messy-legacy-code, Стратегия для масштабного рефакторинга, но у меня есть некоторые конкретные вопросы (внизу):
Мы разрабатываем сложное приложение. Есть 25 разработчиков, работающих с кодовой базой. Всего человеко лет, введенных в продукт на сегодняшний день, составляет примерно 150. Текущая кодовая база представляет собой единый проект, построенный с помощью ant. Целью высокого уровня проекта, который я приступаю, является модуляция базы кода в ее различных инфраструктурах и аппликативных компонентах. В настоящее время нет хорошего разделения между различными логическими компонентами, поэтому ясно, что любые усилия по модуляции должны включать некоторые определения API и серьезные распутывания, чтобы обеспечить разделение. Стандарты качества являются низкими - тестов практически нет, и, безусловно, нет тестов, выполняемых как часть процесса сборки.
Еще один очень важный момент заключается в том, что этот проект должен проходить параллельно с активной разработкой продукта и версиями, отправляемыми клиентам.
Цели проекта:
- позволяют повторно использовать компоненты в разных проектах
- отдельное приложение из инфраструктуры и позволяет им развиваться независимо
- улучшить тестируемость (путем создания API-интерфейсов)
- упростить dev env разработчиков (меньше кода проверено и скомпилировано)
Мои мысли и вопросы:
- Каковы ваши мысли относительно целей проекта? Что бы вы ни изменили?
- У вас есть опыт работы с такими проектами? Какие рекомендации?
- Я очень обеспокоен отсутствием тестов - отсюда и отсутствие контроля над тем, чтобы узнать, что процесс рефакторинга не нарушает ничего, поскольку я иду. Это уловка 22, потому что одна из целей этого проекта - сделать наш код более надежным...
- На меня очень повлиял Майкл Фейрс Эффективная работа с устаревшим кодом. Согласно этому, подход "снизу вверх" - это способ решить мою проблему - не прыгайте головой сначала в кодовую базу и не пытайтесь ее исправить, а скорее начинайте с малого, добавляя единичные тесты вокруг нового кода в течение нескольких месяцев, и посмотрите, как код (и команда) становятся намного лучше, до тех пор, пока не появятся абстракции, API-интерфейсы будут всплывать и т.д., и, по существу, модуляция начнется сама по себе. Есть ли у кого-нибудь опыт в таком направлении? Как видно из многих других вопросов по этой теме, главной проблемой здесь является управленческое недоверие. "Как тестирует класс по классу (и тратит много времени на это), мы приведем нас к стабильной системе? Это хорошая теория, которая не работает в реальной жизни". Любые советы по продаже этого?