Когда мы взялись за рефакторинг 12-летнего монолита на Django и легаси-фронтенда на jQuery, казалось, что это займёт полгода. Но после того как мы начали использовать ИИ-промты не как «болванку для кода», а как инструмент анализа и структурирования, скорость выросла вдвое. Вот 12 проверенных промтов, которые реально работают на Python и JavaScript. Никакой магии — только конкретные формулировки, которые экономят часы ручной работы.
Промт 1. «Разведка» кодовой базы
Перед началом рефакторинга нужно понять, что вообще есть в проекте. Промт:
Проанализируй структуру проекта в [путь]. Составь карту зависимостей: какие модули Python (или JS-файлы) наиболее связаны, где есть циклические зависимости, какие функции имеют более 50 строк и какие файлы изменялись чаще всего (если есть git-история). Выведи результат в виде списка с указанием файлов и строками кода.
Этот промт даёт обзорную карту, по которой мы приоритизируем задачи. Аналог инструментов вроде pydeps или madge, но с объяснением, почему именно эти узлы проблемные.
Промт 2. Поиск «божественных» функций
Функции, которые делают всё сразу, — главные кандидаты на декомпозицию. Промт для поиска:
Найди в кодовой базе функции (Python, JavaScript), длина которых превышает 100 строк или которые имеют более 5 параметров. Для каждой такой функции определи, какие отдельные логические блоки можно выделить. Покажи примеры с указанием файла и номера строки.
В нашем легаси-коде нашлась функция обработки заказа на 400 строк. Промт помог разбить её на 12 маленьких функций, каждая из которых делает одну вещь.
Промт 3. Выявление дублирования кода
Дублирование — бич легаси. Промт:
Просканируй код на предмет дублирующихся фрагментов: одинаковые или похожие блоки в разных файлах (Python/JavaScript). Сгруппируй их по степени сходства (90%, 70%). Для каждой группы предложи, как вынести общую логику в отдельную функцию или модуль.
Мы нашли 23 места, где повторялась валидация email. Вынесли в один модуль — код сократился на 5%.
Промт 4. Автогенерация тестов для легаси-функций
Чтобы рефакторить безопасно, нужны тесты. Промт:
Напиши юнит-тесты для функции [имя функции] из файла [путь]. Используй pytest (или Jest для JS). Покрой все ветвления и краевые случаи. Приведи примеры с моками зависимостей.
Этот промт генерирует тесты, которые мы потом адаптируем. Время на написание тестов сократилось с нескольких часов до 20 минут на функцию.
Промт 5. Декомпозиция монолитной функции
После того как тесты готовы, можно декомпозировать. Промт:
Разбей функцию [имя] из файла [путь] на несколько более мелких функций, сохранив общую логику без изменений. Каждая новая функция должна иметь понятное имя и docstring. Покажи код до и после, а также объясни, какие переменные теперь передаются как параметры.
Пример: разбили обработку заказа на функции validate_order, calculate_total, save_order. Каждая стала тестируемой отдельно.
Промт 6. Замена глобальных состояний
Легаси часто использует глобальные переменные. Промт:
Проанализируй использование глобальных переменных в файле [путь]. Предложи способ инкапсулировать их в класс или передавать как параметры. Покажи пример рефакторинга для функции [имя функции].
В нашем JS-коде глобальная переменная currentUser использовалась в 50 местах. Заменили на контекст — уменьшили связанность.
Промт 7. Улучшение обработки ошибок
Старый код часто молча глотает ошибки. Промт:
Найди в коде (Python/JavaScript) места, где исключения перехватываются без логирования или без дальнейших действий. Предложи, как улучшить обработку: добавить логирование, проброс ошибки или корректный ответ пользователю. Покажи до и после.
Этот промт выявил 15 пустых except блоков. Добавили логирование — стало проще находить баги в проде.
Промт 8. Оптимизация запросов к базе данных
Для Python с Django или SQLAlchemy: запросы в цикле — классика. Промт:
Проанализируй ORM-запросы в функции [имя функции]. Найди N+1 проблемы и предложи оптимизацию с помощью select_related, prefetch_related или агрегаций. Покажи пример кода до и после.
У нас функция вывода списка заказов делала 100 запросов вместо 2. После рефакторинга с select_related время ответа упало с 3 секунд до 200 мс.
Промт 9. Перевод с устаревших библиотек
Пример: переход с jQuery на современный JS. Промт:
Перепиши следующий код с использованием современных возможностей JavaScript (ES6+): [код]. Замени глобальные функции на модульные, используй стрелочные функции, async/await и т.д. Объясни изменения.
Этот промт помог перевести 2000 строк jQuery-кода на ванильный JS без потери функциональности.
Промт 10. Рефакторинг с сохранением API
Когда менять внешний интерфейс нельзя, а внутри всё плохо. Промт:
Проведи рефакторинг внутренней реализации функции [имя функции], сохранив её сигнатуру и поведение. Улучши читаемость, производительность и структуру. Напиши тесты, подтверждающие, что поведение не изменилось.
Использовали для функции, которую вызывают 50 других модулей. Внутри переписали полностью, но внешний интерфейс остался — все тесты зелёные.
Промт 11. Выделение бизнес-логики из представлений
В Django часто логика в views.py раздута. Промт:
Извлеки бизнес-логику из обработчика [имя функции] во view-файле в отдельный сервисный слой (например, services.py). Покажи, как вызвать сервис из view, и напиши юнит-тесты для сервиса без использования HTTP-запросов.
Стало проще тестировать и переиспользовать логику в других местах.
Промт 12. Генерация документации для легаси-кода
Чтобы новый разработчик мог разобраться, нужна документация. Промт:
Сгенерируй README-документацию для модуля [путь] (или для всей кодовой базы): опиши назначение, ключевые классы/функции, примеры использования. Формат: Markdown.
Этот промт экономит часы онбординга. Мы сгенерировали базовую документацию для 5 модулей за один день.
Чек-лист перед использованием промтов
- Убедись, что код находится в системе контроля версий.
- Прогони существующие тесты перед рефакторингом.
- Для каждого промта создавай отдельную ветку.
- Проверяй сгенерированный код на соответствие стандартам (PEP8, ESLint).
- Не полагайся на ИИ на 100%: всегда читай код после изменений.
Итоги
Эти 12 промтов — не волшебная таблетка, но они систематизируют подход к рефакторингу. Мы ускорили процесс в два раза за счёт того, что ИИ берёт на себя рутину: анализ, поиск паттернов, генерацию тестов и документации. Попробуйте начать с промтов 1 и 4 — они дают быстрый эффект. Если у вас есть свои проверенные промты для работы с легаси, делитесь в комментариях — обсудим.
Рефакторинг легаси-кода — это не про «переписать всё», а про умные инструменты и подходы. ИИ — один из них.
Комментарии