Автоматическое исправление программного обеспечения становится все более актуальной темой в условиях стремительного роста сложности кода и количества ошибок в программных системах. В этом контексте большие языковые модели (LLM) открывают новые горизонты, предлагая мощные инструменты для обнаружения и исправления багов. Современные исследования демонстрируют, что LLM способны не только помогать разработчикам, но и выполнять исправления на уровне, сопоставимом с человеческими экспертами. Однако до недавнего времени основное внимание уделялось моделям малого или среднего размера, а также ограничивалось несколькими языками программирования, преимущественно Java. Недавнее эмпирическое исследование, проведенное командой под руководством Джиаджуна Суна, проливает свет на потенциал и особенности больших языковых моделей в широком спектре условий и языков программирования.
В рамках исследования были проанализированы четыре крупных открытых языковых модели: CodeLlama, LLaMA, StarCoder и DeepSeek-Coder. Эти модели варьируются от 7 до 33 миллиардов параметров и отличаются архитектурными особенностями и целями применения. Разнообразие моделей позволило получить всестороннюю картину их возможностей в автоматическом исправлении кода на Java, C/C++ и Python. В ходе экспериментов модели тестировались на шести различных бенчмарках, охватывающих как ошибки, присущие корпоративным системам, так и алгоритмические случайные баги. Всего было сгенерировано и проанализировано более 600 тысяч патчей, что обеспечивает беспрецедентный масштаб исследования и достоверность полученных выводов.
Одним из ключевых результатов стало подтверждение того, что специализация модели на конкретной задаче или языке программирования существенно повышает качество исправлений. Так, CodeLlama, ориентированная на программирование, показала лучшие результаты по сравнению с более общими и размерами большими моделями, такими как LLaMA. Данное открытие подчеркивает важность выбора модели, подходящей под конкретный кейс, а не слепого увеличения размеров модели. Интересной особенностью стало также отсутствие линейной зависимости между размером модели и качеством исправлений. Это значит, что увеличение параметров модели не всегда приводит к пропорциональному улучшению результатов, что заставляет пересмотреть подходы к масштабированию моделей в сфере автоматического ремонта программ.
Еще один важный аспект исследования касается момента появления корректных исправлений при генерации патчей. Анализ показал, что правильные варианты часто встречаются достаточно рано в выводе модели, что позволяет оптимизировать процесс поиска исправлений и сокращать вычислительные затраты. Кроме того, значительное влияние на эффективность автоматического ремонта оказали стратегии построения запросов (prompting). Корректно составленные запросы и продуманные методы взаимодействия с моделью открывают дополнительные возможности для улучшения результатов. Такой инсайт важен для разработчиков систем, стремящихся повысить качество автоматики при работе с кодом.
Значимость данного исследования состоит в том, что оно охватывает широкий спектр языков и сценариев, что позволяет говорить о практически применимых решениях, способных интегрироваться в современные процессы разработки. Применение LLM в исправлении кода на популярных языках, таких как Python и C/C++, расширяет возможности команд и предприятий, работающих с разнообразными технологическими стеками. В будущем развитие больших языковых моделей, их дальнейшая адаптация к конкретным проблемам и интеграция с инструментами разработки могут значительно сократить время от обнаружения ошибки до ее исправления. Это не только повысит качество конечного продукта, но и уменьшит затраты на поддержку и сопровождение ПО. Важно отметить, что даже при использовании мощных моделей нужны разумные методы выбора и оценки исправлений, а также оптимальные подходы к взаимодействию разработчиков с системами автоматического ремонта.