реклама
разместить

«Никто не знает, как это работает…» Что такое легаси и нужно ли всё переписывать

Легаси — страшный сон разработчика. Работа с ним может помочь получить грейд выше, а может серьёзно пошатнуть кукуху и даже стать поводом к увольнению по собственному. Сегодня поговорим, что за зверь это ваше легаси и нужно ли «всё переписывать».

«Никто не знает, как это работает…» Что такое легаси и нужно ли всё переписывать

Что такое легаси-код

Важно употреблять термины правильно: легаси — это не любой код, написанный не вами и до вашего прихода. И даже если новый разработчик с ходу не понял что-то в коде — это ещё не повод говорить о «легаси». Говорить о легаси можно, если вы столкнулись с этим 👇

1. Устаревшие технологии. Легаси-код часто написан на неакутальных версиях языков или с использованием устаревших фреймворков. И на деле важна не столько абстрактная «устарелость», сколько практические проблемы с поддержанием и развитием.

2. Недотестированность. Часто легаси-код недостаточно покрыт тестами. И тогда любые изменения грозят новыми багами.

3. Недодокументированность. Конечно, хороший код не нуждается в доках и вообще self-explanatory и self-documenting. И всё же документация нормальна и нужна на случай, если что-то неясно. Когда разобраться самостоятельно в функциональности и логике не удаётся, а документации нет — это легаси.

4. Нет того, кто участвовал в создании кода. Частный случай предыдущего сценария: есть проблемы с пониманием логики и задуманной функциональности + в компании уже нет того, кто может это пояснить.

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

Откуда берётся легаси

Неужели всякий код со временем становится легаси? Это вообще нормально? Да, «зарастание» легаси — нормальная часть жизненного цикла ПО. Чем объёмнее проект и чем дольше он существует — тем больше вероятность появления легаси. Вот основные факторы, способствующие его появлению:

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

2. Давление сроков. Команды часто действуют в условиях жёстких дедлайнов и вынуждены идти на компромиссы по вопросам качества кода. Релизить приходится быстро, без тщательной проверки на чистоту и соответствие стандартам.

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

4. Отсутствие документации. Это и симптом, и причина. Новые члены команды затрудняются в понимании структуры и логики кода, а документации нет. Так он становится легаси.

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

Чем грозит легаси в работающем продукте

1. Повышенные затраты на поддержку. Работа с «наследством» может требовать больше времени и ресурсов, а это, в свою очередь, увеличивает нагрузку на бюджет.

2. Увеличение технического долга. Легаси-код всегда ассоциирован с растущим техдолгом. Даже не принося урона в моменте, он представляет собой постоянно растущий риск отказа системы или её частей.

3. Риски безопасности. На практике устаревший код и библиотеки могут содержать ошибки и уязвимости — а это прямая угроза безопасности системы и пользователям. Приличный процент утечек ПД происходит как раз из-за устаревших технологий.

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

«Никто не знает, как это работает…» Что такое легаси и нужно ли всё переписывать

Как работать с легаси-кодом

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

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

Ну и наконец, никто не застрахован от ошибок, и новый код тоже может содержать баги.

Правило 80 %

Хорошая практика — «правило 80 %». Согласно ему, если 80 % кодовой базы может быть охарактеризовано как легаси и нуждается в рефакторинге, то стоит рассмотреть переписывание системы с нуля.

Это оправдано — такой объём некачественного кода может генерировать проблемы, мешать развитию проекта и создавать угрозу бизнесу. В любом случае решение переписать всё нужно принимать взвешенно, с учётом рисков, затрат и ресурсов.

Постепенная переработка

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

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

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

«Никто не знает, как это работает…» Что такое легаси и нужно ли всё переписывать

Рекомендации по работе с легаси от Майкла Физерса

В 2004 году состоялась первая публикация книги Майкла К. Физерса «Эффективная работа с legacy-кодом» (Working Effectively with Legacy Code). И если отдельные примеры в книге несколько устарели, то общие рекомендации эксперта по-прежнему актуальны. Вот они.

  • Тестирование. Прежде чем вносить изменения в легаси-код, напишите тесты, которые позволят проверить его работоспособность после изменений.
  • Изоляция изменений. Вносите изменения в код так, чтобы они были изолированы от системы в целом.
  • Декомпозиция и обновление кода. Делите большие монолитные классы и методы на более мелкие, лёгкие в управлении части.
  • Поэтапный рефакторинг. Проводите рефакторинг небольшими итерациями, чтобы контролировать риски и проверять работоспособность системы на каждом шаге.
  • Работа с зависимостями. Снижайте количество зависимостей между компонентами кода, чтобы упростить его поддержку.
  • Разделение ответственности. Принцип единственной ответственности (Single Responsibility Principle) предполагает, что одна часть системы отвечает за одну функцию. Это помогает уменьшить связанность компонентов и делает систему более гибкой.
  • Документирование изменений. Фиксируйте все изменения в коде, чтобы другие разработчики понимали, что и почему вы изменили. Так ваша обновлённая база не превратится в легаси.
  • Обратное проектирование. Понимание структуры и логики старого кода через обратное проектирование (aka ревёрс-инжиниринг) помогает избежать непредсказуемых последствий при внесении изменений.
  • Код-ревью. Внедрите практики код-ревью — это помогает выявлять проблемы на ранних стадиях и поставлять код лучшего качества.
  • Автоматизация рефакторинга. Используйте инструменты автоматизации рефакторинга, чтобы ускорить процесс и снизить вероятность ошибок.
  • Обучение команды. Обучение команды новым подходам и технологиям поможет улучшить качество кода и снизить вероятность появления легаси в будущем.
«Никто не знает, как это работает…» Что такое легаси и нужно ли всё переписывать

Рекомендации от компании arcsinus

  • К перечисленным практикам и инструментам мы бы добавили статические и динамические анализаторы кода.

Они умеют выявлять потенциальные проблемы в коде, не выполняя его. Кроме того, анализаторы проверяют код на соответствие стандартам и выявляют несоответствия, обнаруживают уязвимости в безопасности и узкие места в производительности. Динамические анализаторы обнаруживают утечки памяти и другие проблемы. И в целом такие инструменты формируют культуру создания качественного кода среди разработчиков.

  • Полезно взять в пользование какие-то code standards, созданные авторитетными инженерами — такие стандарты есть в Google и других крупных IT-компаниях. Для популярных стандартов существуют готовые линтеры, которые легко интегрируются в процесс разработки.

На повышение общей культуры разработки хорошо работает практика использования Definition of Ready и Definition of Done.

11
реклама
разместить
1 комментарий
Разработка IT-продукта в 2025: как сэкономить минимум в 2 раза и запустить проект без классических ошибок — 7 проверенных шагов
Разработка IT-продукта в 2025: как сэкономить минимум в 2 раза и запустить проект без классических ошибок — 7 проверенных шагов
44
реклама
разместить
Управление проектами: дайджест публикаций за две недели

PMBOK 8, тупые задачи, ассертивная коммуникация, спасенные дедлайны, фокусированная коммуникация и всё интересное, что писали на этой неделе про управление проектами. Мы прочитали все публикации и выбрали для вас самые крутые и полезные. Читайте, сохраняйте и применяйте!

Управление проектами: дайджест публикаций за две недели
99
Неудобная правда о телеграм каналах: Почему многие сдуваются через 5 месяцев?

Вот бизнес в Телеграм. Я проанализировал 117 каналов, и понял, кто зарабатывает на каналах, а кто нет

Неудобная правда о телеграм каналах: Почему многие сдуваются через 5 месяцев?
77
Топ 10 ошибок, которые мешают стать программистом: разбор ключевых проблем новичков
Топ 10 ошибок, которые мешают стать программистом: разбор ключевых проблем новичков
11
Топ-5 ошибок при разработке приложений на no-code платформах

По данным Nocodecircle и Smart Ranking, объем отечественного рынка no-code в 2024 году может составить около 3,2-3,5 млрд рублей. Инструменты без кода помогают вывести бизнес на новый уровень, привлечь новых клиентов и инвестиции. Если не совершать популярных ошибок no-code-разработки, о которых мы расскажем ниже.

55
44
Как эффективно использовать систему контроля версий (Git) при разработке на Битрикс
Как эффективно использовать систему контроля версий (Git) при разработке на Битрикс
1212
44
Как превратить идею в прибыльный товар: 3 полезных совета
Как превратить идею в прибыльный товар: 3 полезных совета

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

11
SOLID — принципы объектно-ориентированного программирования
SOLID — принципы объектно-ориентированного программирования
Единственный способ вылезти из ловушки микроменеджмента и запустить автопилот

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

Единственный способ вылезти из ловушки микроменеджмента и запустить автопилот
1111
реклама
разместить
Как минимизировать ошибки в проектах. Практические наблюдения за 20 лет
Как минимизировать ошибки в проектах. Практические наблюдения за 20 лет
Как «технический долг» становятся причиной кадрового кризиса и что с этим делать?

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

Как «технический долг» становятся причиной кадрового кризиса и что с этим делать?
22
Командная разработка на платформе AggreGate + Git

Приветствую, меня зовут Сергей, я основатель независимого сообщества Low-code разработчиков на платформе AggreGate (далее Платформа).


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

[]