Каждый разработчик хотя бы раз сталкивался с legacy-кодом: запутанные зависимости, отсутствие тестов, магические числа и методы на тысячу строк. Технический долг — это не приговор, а вызов. Системный рефакторинг может быть ускорен с помощью AI-ассистентов, если правильно формулировать промты. В этой статье — 12 проверенных промтов, которые помогут вам проанализировать, декомпозировать и модернизировать устаревший код, не ломая его поведение. Каждый промт сопровождается пояснением и примером использования. Вы узнаете, как использовать ИИ для анализа зависимостей, выделения модулей, миграции на современные паттерны и повышения тестового покрытия. Готовы превратить болото в архитектуру? Поехали.
1. Анализ зависимостей: карта связей
Промт:
Проанализируй зависимости в кодовой базе проекта [ссылка на репозиторий или путь]. Составь список всех внешних библиотек и внутренних модулей, отметь, какие из них устаревшие, какие имеют известные уязвимости. Для каждой зависимости укажи, какие части кода её используют. Выведи результат в виде таблицы: библиотека, версия, критичность, альтернативы.
Пояснение: Этот промт помогает получить полную картину зависимостей. ИИ может просканировать файлы манифестов (например, package.json, requirements.txt) и исходный код, чтобы построить карту связей. Это основа для планирования рефакторинга: вы увидите, какие библиотеки тянут проект вниз.
Пример использования: Допустим, ваш проект на Python использует библиотеку requests версии 2.25.1, в которой есть уязвимость CVE-2021-33503. Промт попросит ИИ найти все места, где используется requests, и предложит заменить на httpx или обновить до актуальной версии.
2. Выделение модулей: разбиваем монолит
Промт:
Проанализируй файл [имя файла] и предложи, как разбить его на несколько модулей. Учитывай принципы единственной ответственности (SRP) и слабой связанности. Для каждого будущего модуля укажи: название, функции, которые он будет содержать, и зависимости между модулями. Приведи пример кода для каждого модуля.
Пояснение: Монолитные файлы — классика legacy. Этот промт заставляет ИИ применить принципы SOLID и предложить декомпозицию. Вы получите готовый план разбиения с примерами кода, что значительно ускорит рефакторинг.
Пример использования: Файл utils.py на 2000 строк содержит функции для работы с датами, строками, HTTP-запросами и БД. Промт предложит выделить date_utils.py, string_utils.py, http_client.py, db_utils.py и т.д.
3. Устранение дублирования: DRY-принцип
Промт:
Найди дублирующийся код в проекте [путь к проекту]. Проверь файлы с расширениями .py, .js, .java и т.д. Выведи список участков кода, которые повторяются более двух раз, с указанием файлов и строк. Для каждого дубликата предложи, как вынести общий код в отдельную функцию или класс, и покажи пример реализации.
Пояснение: Дублирование — одна из главных проблем legacy. Промт помогает выявить повторяющиеся фрагменты и предлагает рефакторинг с использованием принципа DRY. Это снижает риск ошибок при изменении логики: правка в одном месте вместо многих.
Пример использования: В трёх разных контроллерах повторяется один и тот же блок проверки прав доступа. ИИ предложит создать декоратор @require_permission('admin') и использовать его во всех контроллерах.
4. Миграция на современные паттерны: Strategy и Factory
Промт:
Проанализируй класс [имя класса] и определи, какие паттерны проектирования можно применить для улучшения его структуры. В частности, рассмотри паттерны Strategy, Factory, Observer. Для каждого паттерна приведи пример кода, который заменит текущую реализацию, и объясни, какие преимущества это даст.
Пояснение: Переход на современные паттерны — важный этап рефакторинга. Промт направляет ИИ на анализ конкретного класса и предлагает альтернативные архитектурные решения с примерами. Это помогает сделать код более гибким и тестируемым.
Пример использования: Класс ReportGenerator содержит гигантский switch-case для разных форматов отчётов. ИИ предложит паттерн Strategy: создать интерфейс ReportFormatter и реализации PdfFormatter, CsvFormatter, JsonFormatter, а затем фабрику для выбора нужной стратегии.
5. Улучшение тестового покрытия: генерация тестов
Промт:
Сгенерируй модульные тесты для функции [имя функции] из файла [имя файла]. Покрой все ветвления, включая граничные случаи. Используй фреймворк [Jest, PyTest, JUnit и т.д.]. В ответе приведи полный код тестов и объясни, какие сценарии покрыты.
Пояснение: Недостаток тестов — типичная проблема legacy. Этот промт позволяет быстро создать тесты для критических функций, обеспечивая безопасность рефакторинга. ИИ анализирует код и генерирует тесты, которые проверяют поведение.
Пример использования: Функция calculate_discount(price, customer_type) имеет множество условий. ИИ создаст тесты для всех типов клиентов и граничных значений цены, что поможет убедиться, что после рефакторинга поведение не изменится.
6. Рефакторинг длинных методов: Extract Method
Промт:
Метод [имя метода] в файле [имя файла] слишком длинный. Разбей его на несколько более мелких методов с понятными именами. Сохрани исходное поведение. Приведи полный код до и после рефакторинга, а также объясни, какие шаги ты предпринял.
Пояснение: Длинные методы трудно читать и тестировать. Этот промт просит ИИ применить технику Extract Method — выделение логически завершённых частей в отдельные методы. Результат — более читаемый и поддерживаемый код.
Пример использования: Метод processOrder длиной 150 строк. ИИ разобьёт его на validateOrder, calculateTotal, applyDiscount, saveOrder, notifyCustomer и т.д.
7. Замена магических чисел константами
Промт:
Найди все магические числа и строки в файле [имя файла]. Замени их именованными константами. Создай отдельный класс или модуль для хранения этих констант. Приведи код до и после изменений.
Пояснение: Магические числа делают код непонятным и трудным для изменения. Промт помогает выявить их и заменить на константы, что улучшает читаемость и облегчает поддержку.
Пример использования: В коде встречается if (status == 2). ИИ предложит константу STATUS_ACTIVE = 2 и заменит все вхождения.
8. Улучшение обработки ошибок
Промт:
Проанализируй обработку ошибок в файле [имя файла]. Найди пустые catch-блоки, проглатывание исключений, отсутствие логирования. Предложи улучшения: добавь конкретные типы исключений, логирование с контекстом, проброс ошибок наверх. Приведи пример кода до и после.
Пояснение: Обработка ошибок — критичный аспект качества кода. Промт заставляет ИИ выявить проблемные места и предложить более надёжную стратегию.
Пример использования: В коде есть except: pass. ИИ предложит заменить на except ValueError as e: logger.error('Invalid value: %s', e); raise.
9. Оптимизация SQL-запросов
Промт:
Проанализируй SQL-запросы в файле [имя файла или строка подключения]. Найди запросы с N+1 проблемой, отсутствием индексов, чрезмерным количеством JOIN. Предложи оптимизации: добавь индексы, используй JOIN вместо подзапросов, добавь eager loading. Приведи примеры запросов до и после.
Пояснение: Медленные запросы — частая причина проблем с производительностью legacy-систем. Промт помогает выявить проблемные запросы и предложить конкретные улучшения.
Пример использования: В ORM-коде при загрузке списка заказов для каждого клиента выполняется отдельный запрос. ИИ предложит использовать select_related или prefetch_related для сокращения числа запросов.
10. Устранение глобального состояния
Промт:
Найди в проекте глобальные переменные и синглтоны, которые используются для хранения состояния. Предложи, как заменить их на более безопасные подходы: внедрение зависимостей, контекстные объекты, локальные состояния. Приведи примеры кода до и после.
Пояснение: Глобальное состояние затрудняет тестирование и параллельное выполнение. Промт помогает выявить такие места и предложить альтернативы.
Пример использования: В приложении есть глобальная переменная current_user. ИИ предложит передавать пользователя через параметры или использовать контекст запроса.
11. Миграция на современный синтаксис
Промт:
Перепиши следующий код с использованием современного синтаксиса языка [Python/JavaScript/Java]. Например, используй list comprehensions, деструктуризацию, стрелочные функции, var/let, try-with-resources и т.д. Сохрани поведение. Приведи код до и после.
Пояснение: Старый код часто написан в устаревшем стиле. Промт позволяет быстро привести его к современным стандартам, что улучшает читаемость и производительность.
Пример использования: В Python код result = [] for i in range(10): if i % 2 == 0: result.append(i*i) можно заменить на result = [i*i for i in range(10) if i % 2 == 0].
12. Документирование legacy-кода
Промт:
Напиши документацию для модуля [имя файла]. Опиши назначение каждого класса, метода, параметров, возвращаемых значений. Добавь примеры использования. Используй формат docstring (например, Google style).
Пояснение: Часто legacy-код не имеет документации, что затрудняет его понимание. Промт помогает сгенерировать подробные docstring, что облегчает работу команды.
Пример использования: Для класса OrderService ИИ создаст docstring с описанием ответственности, методов create_order, cancel_order и примерами вызова.
Заключение
Эти 12 промтов — не панацея, но мощный инструмент для ускорения рефакторинга. Используйте их как отправную точку, адаптируйте под свой проект и язык. Помните, что ИИ — помощник, а не замена инженерного мышления. Всегда проверяйте предложенный код, пишите тесты и следите за тем, чтобы поведение системы не изменилось. Начните с анализа зависимостей и тестового покрытия — это создаст безопасную основу для дальнейших изменений. Удачи в превращении технического долга в чистую архитектуру!
Комментарии