Главная
АИ #53 (235)
Статьи журнала АИ #53 (235)
Стратегии миграции с легаси-кода в сторону более современных технологий

Стратегии миграции с легаси-кода в сторону более современных технологий

Рубрика

Информационные технологии

Ключевые слова

рефакторинг кода
легаси-код
функциональность
технологии

Аннотация статьи

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

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

Еще одна проблема – интеграция легаси-кода с современными системами, что может привести к конфликтам и проблемам совместимости.

В статье рассмотрены стратегии миграции с легаси-кода в сторону более современных технологий. При этом особое внимание уделено рефакторингу кода.

Текст статьи

В процессе разработки выявить актуальные уязвимости помогут автоматизированные инструменты, такие как SAST для статического анализа исходного кода, SCA для контроля использования сторонних компонентов и DAST для динамического анализа уже запущенного приложения. Особую важность в этом случае имеет поддержание баз уязвимостей инструментов в актуальном состоянии, так как в существующем коде обнаруживаются все новые и новые уязвимости, которые необходимо вовремя выявлять и устранять. Кроме того, требуется постоянный мониторинг всего процесса разработки для контроля состояния защищенности, разрабатываемого ПО на всех этапах. Перед отказом от легаси-кода и переходом на новый необходимо провести анализ и оценку рисков, связанных с процессом обновления.

Существует несколько стратегий миграции с легаси-кода в сторону более современных технологий.

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

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

Рефакторинг программного кода преследует следующие цели:

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

Определение, приведенное в книге Мартина Фаулера «Refactoring: Improving the Design of Existing Code», наиболее точно: «Рефакторинг – это контролируемая техника совершенствования структуры существующего кода. Суть рефакторинга заключается во внесении серии мелких изменения (с сохранением функциональности приложения), каждое из которых «слишком мелкое, чтобы тратить на него время». Тем не менее эффект от внесения всех этих изменений достаточно ощутимый».

К основным принципам рефакторинга кода относят:

  1. Сохранение функциональности. Изменения в коде выполняются таким образом, чтобы не нарушить его работоспособность. Даже если в коде много «некрасивых» решений, приоритет отдается стабильности работы приложения. Также изменения, выполняемые в процессе рефакторинга, не должны видоизменять внешний интерфейс программы и ее поведение с точки зрения пользователя.
  2. Поочередные небольшие изменения. Выполнение преобразований небольшими последовательными шагами позволяет избежать ошибок, которые могут возникнуть при крупных и радикальных переработках. Эта практика также облегчает отслеживание внесенных изменений и откат нежелательных эффектов.
  3. Надежное покрытие тестами. Перед началом рефакторинга необходимо иметь обширный набор тестов, который покрывает все аспекты функциональности приложения. Тесты должны запускаться автоматически после каждого изменения, чтобы убедиться в отсутствии регрессии.
  4. Регулярность и документирование. Не стоит дожидаться момента, когда код окончательно замусорится. Оптимальный подход – это выполнение преобразований как постоянного и регулярного процесса разработки. Хотя они чаще всего не изменяют функциональности, важно описывать, что и почему было изменено, чтобы коллеги-разработчики понимали происходящие трансформации кода.
  5. Изучение изменяемых участков кода. Прежде чем рефакторить часть программы, разработчику нужно понимать ее функцию и влияние на остальные части системы. Изменения должны проводиться поэтапно, с постоянной интеграцией в основную кодовую базу.

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

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

Следует выделить и такие стратегии миграции с легаси-кода в сторону более современных технологий:

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

Переписывание бывает необходимо, когда разрабатывается абсолютно новое ПО.

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

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

При этом необходимо учитывать:

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

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

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

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

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

Заключение

Как правильно сделать рефакторинг кода?

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

Список литературы

  1. Фаулер М. «Refactoring: Improving the Design of Existing Code». Электронный доступ: https://vk.com/wall-54530371_453.
  2. Что такое рефакторинг кода и когда он нужен. Электронный доступ: https://gb.ru/blog/refaktoring-koda/.
  3. Рефакторинг кода. Электронный доступ: https://blog.skillfactory.ru/glossary/refaktoring-koda/.
  4. Что такое legacy-код. Электронный доступ: https://blog.skillfactory.ru/glossary/legacy-code/.
  5. Призрак прошлого: как легаси-код угрожает кибербезопасности. Электронный доступ: https://securitymedia.org/info/prizrak-proshlogo-kak-legasi-kod-ugrozhaet-kiberbezopasnosti.html.

Поделиться

41

Стариков С. В. Стратегии миграции с легаси-кода в сторону более современных технологий // Актуальные исследования. 2024. №53 (235). URL: https://apni.ru/article/10980-strategii-migracii-s-legasi-koda-v-storonu-bolee-sovremennyh-tehnologij

Обнаружили грубую ошибку (плагиат, фальсифицированные данные или иные нарушения научно-издательской этики)? Напишите письмо в редакцию журнала: info@apni.ru

Похожие статьи

Актуальные исследования

#1 (236)

Прием материалов

4 января - 10 января

осталось 4 дня

Размещение PDF-версии журнала

15 января

Размещение электронной версии статьи

сразу после оплаты

Рассылка печатных экземпляров

29 января