Избыточность вместо оптимизации
Проект VibeTensor, полностью созданный ИИ-агентами, наглядно демонстрирует проблему «раздутого» кода. Несмотря на объем в 100 000 строк и более 400 файлов, реальный полезный код в нем составляет лишь около 20 000 строк. Основная проблема заключается в избыточности: вместо использования обобщенных функций ИИ многократно генерирует одни и те же блоки кода, создавая эффект бесконечного дежавю при чтении.
Такой подход напоминает метод copy-paste, но в масштабах всей кодовой базы. Вместо выноса повторяющейся функциональности в отдельные методы, генеративные модели создают новые, визуально отличные, но фактически идентичные конструкции. Это не только усложняет обзор кода человеком, но и мешает работе статических анализаторов.
Сложности анализа и риски
Статический анализатор PVS-Studio при проверке VibeTensor фиксирует множество предупреждений, связанных с избыточностью. Инструмент указывает на выражения, которые всегда являются истинными или ложными (например, проверки условий, которые не могут не выполняться), что является прямым следствием неоптимальной логики ИИ. При этом сам код может работать корректно и не содержать критических ошибок доступа к памяти, но его структура делает поиск реальных багов крайне трудозатратным.
Помимо сложности чтения, раздутый код несет в себе скрытые риски:
- Увеличение стоимости генерации и поддержки: больше строк — больше затрат на токены и тестирование.
- Сложность модификации: при внесении изменений в один из множества похожих блоков высока вероятность пропустить ошибку в других.
- Проблемы с производительностью: излишние конструкции мешают компилятору эффективно оптимизировать код.
- Ошибки логики: ИИ может использовать ключевые слова (например, noexcept) без понимания их сути, что приводит к непредсказуемому поведению при возникновении исключений.
Будущее инструментов анализа
Проблема «раздутого» кода — это вызов для разработчиков инструментов. Одной из возможных стратегий решения может стать развитие статических анализаторов в направлении выявления дублирующихся фрагментов кода. Это позволило бы создать петлю обратной связи для ИИ, где код считался бы завершенным только тогда, когда анализатор подтвердит отсутствие избыточного дублирования функциональности.
