Как использовать ИИ для модернизации архитектуры программного обеспечения

ИИ может ускорить разработку, но без руководства он рискует усугубить архитектурный долг. При наличии четкого контекста и подсказок он может помочь укрепить архитектуру.

Сегодня корпоративные команды отправляют больше кода и чаще, чем когда-либо прежде , — отчасти благодаря инструментам кодирования на базе ИИ, таким как GitHub Copilot и Amazon Q.

Но есть проблема.

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

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

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

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

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

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

Проблема с ИИ и архитектурой программного обеспечения

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

Проблема в том, что при таком повседневном использовании ИИ также влияет на архитектуру.

Когда разработчик пишет код, он постоянно задает и обдумывает ответы на такие вопросы, как:

- Как мне организовать занятия?

- Как следует выполнять кэширование?

- Где мне следует разместить эту бизнес-логику?

- Каковы внешние зависимости?

- Как это вписывается в нашу общую архитектуру программного обеспечения?

- И многое другое

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

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

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

Дрейф архитектуры программного обеспечения

Архитектурный дрейф (медленный и почти незаметный отход от структурированной и контролируемой архитектуры) особенно коварен. Взять, к примеру, банк из списка Fortune 100 , который с трудом модернизировал огромный монолит Java, состоящий из более чем 8 миллионов строк кода. Это знакомая история: сложность системы была невероятной, попытки внутренней модернизации заняли годы, а усилия постоянно заходили в тупик из-за скрытых архитектурных подводных камней.

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

Архитектурные проблемы могут быть менее заметны, чем ошибки кода, но они гораздо более проблематичны.

Как ИИ может реально помочь модернизировать архитектуру вашего программного обеспечения

Но так быть не должно.

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

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

При правильном использовании, в контексте выполнения и с предварительным структурным анализом на основе предметной области, ИИ может:

- Выявляйте и корректируйте архитектурные антипаттерны до того, как они станут критическими

- Предложить точные стратегии рефакторинга

- Расставьте приоритеты в исправлении неполадок, сэкономив тем самым ограниченное время инженерной команды (тогда как помощники по кодированию помогают немедленно устранять мелкие неполадки)

- Распутывайте сложные зависимости

- Автоматизируйте исправление архитектурных отклонений, фактически делая систему самовосстанавливающейся.

Эффективное побуждение к успешной модернизации

Итак, мы знаем, что ИИ может стать нашим лучшим другом при модернизации систем. Но с чего начать?

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

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

Так как же выглядит эффективное приглашение?

1. Будьте конкретны

Не предлагайте «Создайте REST API для управления заказами».

Это предложение, хотя, возможно, и преувеличенно плохое, оставляет значительный простор для интерпретации ИИ как в архитектуре, так и в дизайне.

Вместо этого подскажите конкретно с архитектурным направлением:

"Создайте REST API на Python для управления заказами с использованием Flask и SQLAlchemy. Структурируйте приложение с помощью:

- уровень контроллера (маршруты Flask) для обработки HTTP-запросов,

- сервисный уровень для бизнес-логики,

- и уровень репозитория для доступа к данным с использованием SQLAlchemy ORM».

2.

Будьте внимательны

Не ограничивайтесь только логикой кода. Включите также нефункциональные требования.

«Расширьте API Python Flask REST для обеспечения эксплуатационной надежности и удобства обслуживания. Включая следующее:

- Регистрируйте каждый входящий HTTP-запрос и статус его ответа. Регистрируйте время выполнения каждого запроса, используя встроенный модуль логирования Python. Журналы должны быть структурированы и включать временную метку, конечную точку, код статуса и задержку.

- Проверяйте все входящие данные запросов с помощью моделей Pydantic на уровне контроллера. Гарантируйте, что ошибки проверки возвращают стандартизированные ответы JSON с понятными сообщениями и соответствующими кодами состояния HTTP.

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

- Убедитесь, что все ответы об ошибках соответствуют единой схеме JSON, включая код ошибки, сообщение и дополнительные сведения для отладки.

3. Всегда будьте архитектором

Расскажите о вашем архитектурном проекте, целях и о том, как их следует интегрировать в систему. Будьте конкретны и точны.

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

Четкое разделение задач — структурируйте кодовую базу по чистым слоям:

- Уровень контроллера (т. е. маршруты Flask): принимает и проверяет запросы на отправку электронной почты.

- Уровень обслуживания: обрабатывает бизнес-правила, такие как ограничение скорости, шаблонизация контента и повторные попытки.

- Уровень репозитория: управляет сохранением попыток отправки электронной почты, статусов и журналов доставки с помощью SQLAlchemy.

Безгражданство:

- Не сохраняйте состояние сеанса или запроса между вызовами.

- Весь контекст (например, идентификатор отправителя, содержимое электронного письма, заголовки) должен быть передан в каждом запросе.

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

Масштабируемость и готовность к микросервисам:

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

- Избегайте жестко запрограммированных реализаций — интерфейсы должны быть определены для каждого основного компонента (например, EmailProvider, EmailQueue, TemplateEngine).

- Внедрите все зависимости служб и репозиториев через конструкторы или простой DI-контейнер.

Нефункциональные требования:

- Устойчивость: корректная обработка ошибок SMTP и повторных попыток с использованием стратегий отсрочки.

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

- Расширяемость: упростите поддержку нескольких поставщиков (например, SendGrid, SES) за абстракцией интерфейса.

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

Добавьте архитектурный контекст в ваши подсказки

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

Чтобы добавить архитектурный контекст в наши подсказки, нам понадобится помощь. В этом примере я буду использовать vFunction — инструмент, который анализирует архитектуру приложения и предоставляет структурные рекомендации помощникам GenAI при рефакторинге. Мы будем использовать статический и динамический анализ в сочетании с наукой о данных, чтобы понять логические области вашего приложения и определить оптимальные границы этих областей. Это, в свою очередь, позволит нам выявлять архитектурные проблемы в сложных приложениях Java и .NET, например:

- Круговые зависимости

- Анти-шаблоны

- Архитектурно-технический долг

- Нарушения границ домена

- Мертвый код

- И многое другое

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

Пошаговый пример

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

Проанализируйте свое приложение.

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

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

Обзор архитектурных задач

Затем сформируйте список приоритетных архитектурных задач TODO, каждая из которых снабжена контекстным пояснением и подсказкой с поддержкой ИИ, которую можно использовать в таких инструментах, как Amazon Q или GitHub Copilot.

Воспользуйтесь подсказкой вашего помощника на основе искусственного интеллекта.

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

Подтвердите и повторите.

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

Объединив эти знания с вашими степенями LLM, вы создадите мощного, контекстно-зависимого помощника, готового к построению и выполнению сложной работы по рефакторингу.

ИИ — ваш партнер в архитектуре программного обеспечения

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

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

Как использовать ИИ для модернизации архитектуры программного обеспечения
Получить консультацию у специалистов DST
Напишите нам прямо сейчас, наши специалисты расскажут об услугах и ответят на все ваши вопросы.
Комментарии и отзывы экспертов
RSS
Вам может быть интересно
Используйте предметно-ориентированное проектирование и событийный штурм для определения ролей агентов, границ и масштабируемых архитектур для сложных многоагентных систем ИИ, соответствующих потребнос...
ИИ, машинное обучение и наука о данных трансформируют отрасли, стимулируют автом...
LLMOps расширяет возможности MLOps для генеративно...
Узнайте, как создавать безопасные интеграции баз з...
Absolute Zero Reasoner отличается от традиционных ...
Объединение возможностей искусственного интеллекта...
ИИ больше не отдалённая идея. Он уже здесь и меняе...
Absolute Zero Reasoner отличается от традиционных ...
Искусственный интеллект быстро становится неотъемл...
Управление ИИ объединяет инновации и защиту заинте...

Заявка на услуги DST

Наш специалист свяжется с вами, обсудит оптимальную стратегию сотрудничества,
поможет сформировать бизнес требования и рассчитает стоимость услуг.

Адрес

Ижевск, ул. Воткинское шоссе 170 Е.
Региональный оператор Сколково. Технопарк Нобель

8 495 1985800
Заказать звонок

Режим работы: Пн-Пт 10:00-19:00

info@dstglobal.ru

Задать вопрос по почте

Укажите ваше имя
Укажите ваше email
Укажите ваше телефон