В настоящее время я работаю над небольшой командой, чтобы «модернизировать» какое -то устаревшее программное обеспечение, которое имеет решающее значение.
Эта работа немного отличается от того, к чему я привык. Это включает в себя много планирования и много «людей людей» — мы работаем с существующей командой и будем влиять на будущую структуру этой команды и как она работает. Мы рассмотрим такие вещи, как препятствия для легкого развертывания кода, риски безопасности и устаревшие технологии, которые затрудняют нанимать и удерживать сотрудников, которые готовы работать над этими приложениями.
Я хочу поделиться уроками, которые мы изучаем в этом проекте Но я не уверен насчет лучшего способа сделать это. Я думаю о том, чтобы собрать какой -то каталог моделей, который можно применить к другим проектам.
Вот несколько примеров того, как это может выглядеть, на основе работы, которую мы проделали до сих пор:
Образец 1: принять более современный инструмент сборки
Контекст
- Существующие сценарии сборки использовали муравей
- У нас было несколько артефактов сборки, сценариев муравья и файлов свойств
- Большая часть конфигурации была нацелена в определенной среде и ОС (Windows)
- Зависимости были связаны с проектом (или хранились где -то в общей среде разработки) как .jar файлы
Проблемы
- Сценарии сборки было трудно понять
- Муравей — это не технология, которую мы используем для других проектов, поэтому разработчики не знакомы с ней
- Управление зависимостями было сложнее, чем нужно было
Решение
- Мы создали новые сценарии сборки с помощью Gradle
- Мы проверили сборки сборки, были идентичны тем, которые производились старой сборкой, перечисляя содержимое файлов JAR/WAR и запустив инструмент для сравнения бинарной совместимости пакетов
Новый контекст
- Файлы сборки намного более краткие и просты для понимания
- Зависимости объявляются в одном месте и извлекаются из хранилища Maven во время сборки, в соответствии с 12 Факторное приложение рекомендации
Контекст
- Команда поделилась средой разработки, которая была единственным местом, где приложение может быть построен
- У каждого разработчиков были свои собственные конфигурации для создания программного обеспечения
- Для каждой среды был построен другой артефакт
- Кодовые филиалы были давно прожили, и изменения превратились в запланированные релизы
- У нас были некоторые автоматические тесты, но многие из них не бежали
- Команда мигрировала в GIT из SVN, поэтому старый процесс сборки не был разработан с учетом GIT с учетом GIT
Проблемы
- При разработке изменений не было никаких немедленных отзывов
- Команда не была уверена, что артефакты, которые они выпускали, содержали изменения, которые они ожидали
- Мастер -филиал не мог быть развернут в короткие сроки, поэтому нам пришлось сделать филиалы Hotfix и отслеживать их
Решение
- Мы создали конфигурацию Circleci, которая запускает сборку Gradle, создавая файлы .war
- Мы рассмотрели тесты, исправляя некоторые, которые не работали, и удаляя других, которые нам не нуждались, поэтому весь комплект работает в CI
- У нас был разговор со всей командой о филиалах в GIT и разработка на основе багажника
Новый контекст
- Master содержит код, который прошел CI, и мы рады выпустить, поэтому в филиалах Hotfix меньше необходимости
- Тесты дают нам некоторую уверенность в том, что запрос на притяжение не сломает существующую функциональность
- В краткосрочной перспективе мы намерены создать специфичные для среды артефакты из CI и развернуть их, что облегчит просмотр связи между развернутым артефактом и исходным кодом, который он был построен из
Как вы думаете, что -то подобное было бы полезно при работе с другими устаревшими проектами? Как вы подходите к улучшению процесса в своей работе?
Эффективно работаю с устаревшим кодом Это «Go To Book on Legacy Code», но многие советы фокусируются на внесении изменений в сам код, а не на системы вокруг кода. Вы бы порекомендовали посмотреть на какие -либо другие ресурсы по этой теме?
Оригинал: «https://dev.to/matmooredev/how-do-you-approach-a-legacy-technology-project-4pi7»