Автор: Денис Аветисян
Первое масштабное исследование показывает, как нейросети справляются с задачей рефакторинга программного кода.

Исследование выявило, что ИИ-агенты преуспевают в локальной оптимизации кода, но пока не способны к сложной реструктуризации архитектуры программного обеспечения.
Несмотря на растущую популярность AI-ассистентов в разработке, эмпирических данных об их влиянии на рефакторинг кода остается недостаточно. В своей работе 'Agentic Refactoring: An Empirical Study of AI Coding Agents' исследователи провели масштабный анализ рефакторинга, выполненного AI-агентами в реальных Java-проектах с открытым исходным кодом. Полученные результаты показали, что агенты преимущественно фокусируются на локальных улучшениях, таких как изменение типов переменных и переименование параметров, в то время как сложные архитектурные изменения им пока не под силу. Смогут ли AI-агенты в будущем стать полноценными партнерами разработчиков, способными оптимизировать не только внутреннее качество кода, но и его общую архитектуру?
Вечный танец технического долга
Поддержание качества программного обеспечения становится все сложнее из-за растущей кодовой базы и ускоряющихся циклов выпуска. Традиционные методы анализа и рефакторинга часто оказываются недостаточными для эффективного управления техническим долгом и обеспечения долгосрочной поддерживаемости. Современные тенденции разработки, такие как CI/CD, усугубляют проблему, отдавая приоритет скорости над качеством, что приводит к накоплению долга, снижению производительности и увеличению риска ошибок.

В связи с этим, возрастает потребность в автоматизированных решениях, способных проактивно улучшать кодовую базу. Такие решения должны выявлять проблемные участки, предлагать варианты рефакторинга и автоматически применять исправления, минимизируя ручной труд и обеспечивая стабильное качество. В конечном итоге, все эти «автоматизированные решения» лишь очередная обёртка над старыми багами.
ИИ-агенты на страже эволюции кода
Агентный рефакторинг использует ИИ-агентов для автоматического выявления и применения изменений кода, выходя за рамки статического анализа. В отличие от традиционных подходов, эти агенты используют большие языковые модели (LLM) для понимания семантики кода и предложения значимых улучшений, автоматизируя трудоемкие задачи по повышению качества кодовой базы.
Масштабный эмпирический анализ показал, что 26.1% коммитов, выполненных агентами, явно нацелены на рефакторинг, демонстрируя практическую применимость данного подхода для снижения технического долга, повышения качества кода и ускорения разработки. Агенты способны выявлять и исправлять распространенные проблемы, такие как дублирование, сложная логика и неоптимальные структуры данных.

Анализ также выявил различия в подходах к рефакторингу между агентами и людьми: агенты фокусируются на конкретных задачах, в то время как люди склонны к более широким и комплексным изменениям. Это может быть связано с ограниченными возможностями агентов или их стремлением к большей точности и надежности.
Инструменты и техники для улучшения кода
Инструменты, такие как DesigniteJava и RefactoringMiner, играют ключевую роль в обнаружении «запахов кода» и выявлении возможностей для рефакторинга, позволяя разработчикам оперативно идентифицировать проблемные участки в кодовой базе.
Агентный рефакторинг использует как низкоуровневый (переименование переменных и методов), так и высокоуровневый (изменение структуры классов и модулей) рефакторинг для решения различных проблем с качеством кода, обеспечивая более комплексное и эффективное улучшение кодовой базы.
Кроме того, агентный рефакторинг способен выявлять и решать задачи ImplicitRefactoring – возможности для рефакторинга, возникающие как побочный эффект других изменений в коде, оптимизируя процесс разработки и поддерживая высокий уровень качества кода на протяжении всего жизненного цикла программного обеспечения.
Валидация и горизонты развития
Набор данных AIDevDataset представляет собой ценный ресурс для изучения и оценки методов разработки программного обеспечения на основе агентов, предоставляя обширную коллекцию данных для обучения и тестирования систем, способных автоматизировать различные этапы процесса разработки.
AgenticCoding, как более широкая основа, поддерживает AgenticRefactoring и позволяет создавать комплексные автоматизированные рабочие процессы разработки. Анализ данных показывает, что основными мотивами для рефакторинга с использованием агентов являются поддерживаемость (52.5%) и читаемость (28.1%). Рефакторинг, выполняемый агентами, приводит к медианному уменьшению количества строк кода на -15.25 и метрики цикломатической сложности на -2.07, что демонстрирует его влияние на качество кода.
Данная технология обладает потенциалом для революционных изменений в области разработки программного обеспечения, перенося акцент с ручных проверок кода на непрерывное улучшение, управляемое искусственным интеллектом. Каждая «революционная» технология завтра станет техдолгом, но в этом танце энтропии, по крайней мере, красиво умирает.
Исследование показывает, что агенты искусственного интеллекта успешно справляются с локальными улучшениями кода, но испытывают трудности при масштабной реструктуризации архитектуры. Это закономерно, ведь, как заметил Блез Паскаль: «Все великие вещи требуют времени». Попытки автоматизировать сложные задачи неизбежно наталкиваются на ограничения текущего уровня развития технологий. CI/CD – это, конечно, хорошо, но это лишь храм, где молятся, чтобы существующий хаос не усугубился. Агенты пока лишь полируют фасад, в то время как настоящая архитектурная переработка требует глубокого понимания контекста и принятия сложных дизайнерских решений, что, увы, пока не под силу даже самым продвинутым алгоритмам. Документация, как обычно, отсутствует, что лишь добавляет иронии в эту картину.
Что дальше?
Полученные данные, как это обычно и бывает, лишь аккуратно подсветили глубину проблемы. Автоматизированное «подтягивание соплей» – то есть, локальное улучшение читаемости и поддержание кода на минимальном уровне жизни – оказалось вполне достижимой целью для агентов. Однако, когда дело доходит до реальной хирургии, до перестройки архитектуры, до избавления от фундаментальных ошибок проектирования, энтузиазм искусственного интеллекта быстро угасает. Неудивительно, конечно. Каждая «революционная» технология завтра станет техдолгом, и агенты, по всей видимости, не исключение.
Следующим этапом, вероятно, станет попытка научить этих агентов не просто «чинить», а понимать код. Но это, как известно, задача, которую до сих пор не осилили даже люди. Более реалистичным представляется фокусировка на создании инструментов, которые позволят людям эффективнее использовать агентов для рутинных задач, оставив за собой принятие стратегических решений. Тесты – это форма надежды, а не уверенности, и это справедливо вдвойне для автоматизированного рефакторинга.
В конечном итоге, стоит признать, что автоматизация не спасёт нас. Она лишь изменит природу наших проблем. И, как показывает опыт, скрипт всегда найдёт способ сломать прод. Поэтому, вместо того, чтобы мечтать об идеальном автоматическом рефакторинге, стоит сосредоточиться на создании более надёжных систем мониторинга и отказоустойчивости. Иначе, зачем вообще стараться?
Оригинал статьи: denisavetisyan.com/iskusstvennyj-intellekt-i-refaktoring-koda-chto-poka-umeyut-ai-agenty
Связаться с автором: linkedin.com/in/avetisyan