Hard Авторский

AI и code quality: проблема дублирования и качества

Данные GitClear и Ox Security показывают восьмикратный рост дублирования кода, падение рефакторинга и системное игнорирование архитектурных паттернов

AI-инструменты генерируют код быстрее, чем человек. Но какой код они генерируют? GitClear проанализировала 211 миллионов строк кода за 2020-2024 годы и обнаружила тренд, который должен насторожить любого техлида: количество дублированных блоков кода выросло в восемь раз за 2024 год. Ox Security изучила 300+ open-source репозиториев и нашла, что AI-код вводит на 322% больше путей эскалации привилегий и на 153% больше архитектурных дефектов по сравнению с кодом, написанным людьми.

AI пишет функциональный код. Проблема в том, что «функциональный» и «поддерживаемый» — разные свойства.

Данные GitClear: дублирование растёт, рефакторинг падает

GitClear ведёт базу данных структурированных изменений кода с 2020 года. Их отчёт за 2025 год основан на анализе 211 миллионов строк и фиксирует несколько параллельных трендов.

Рост дублирования. Доля дублированных строк в изменениях выросла с 8.3% в 2021 году до 12.3% в 2024. Блоки из 5+ одинаковых строк стали появляться в 8 раз чаще. AI склонен копировать паттерн, который видит в кодовой базе, вместо того чтобы вынести общую логику в переиспользуемый компонент.

Copy-paste вместо рефакторинга. В 2024 году количество скопированных строк впервые превысило количество перемещённых (moved) строк. Разработчик просит AI написать обработчик ошибок, и AI копирует аналогичный обработчик из соседнего файла вместо того, чтобы создать общую функцию. Рефакторинг как практика упал с 25% изменённых строк в 2021 году до менее 10% в 2024.

Рост code churn. Доля нового кода, который разработчики переписывали в течение двух недель после коммита, выросла с 3.1% в 2020 до 5.7% в 2024. Код, написанный AI и принятый разработчиком, чаще оказывается неправильным и требует исправлений.

Эти три тренда складываются в одну картину: AI генерирует больше кода, этот код содержит больше дублирования, реже проходит через рефакторинг и чаще требует переделки.

Отчёт Ox Security: «армия джуниоров»

В октябре 2025 года Ox Security опубликовала отчёт «Army of Juniors: The AI Code Security Crisis». Команда исследовала 300+ open-source репозиториев и выявила 10 антипаттернов, которые AI-генерированный код воспроизводит систематически.

Avoidance of Refactors (80-90% AI-кода). AI предпочитает добавлять новый код, а не реструктурировать существующий. Мейнтейнер попросит человека-разработчика вынести дублирующуюся логику в отдельный модуль. AI этого не сделает, если его об этом не попросят.

Bugs Deja-Vu (70-80% AI-кода). AI повторяет баги, которые уже есть в кодовой базе. Модель обучена на коде проекта и воспроизводит его паттерны — включая ошибочные.

Fake Test Coverage (40-50% AI-кода). AI генерирует тесты, которые формально увеличивают coverage, но проверяют тривиальные сценарии и пропускают edge cases. Метрика coverage растёт, а реальная защита от багов — нет.

Return of Monoliths (40-50% AI-кода). AI склонен помещать логику в один файл или одну функцию, вместо того чтобы распределить ответственность по модулям. Разработчик, который принимает такой код без ревью, получает монолитную архитектуру по кусочкам.

Ox Security сформулировала главный вывод: AI-код «функционален, но систематически лишён архитектурного суждения». AI решает задачу, которую перед ним поставили. Он не задаёт вопросов «а нет ли уже похожей функции?», «не нарушает ли это принцип единственной ответственности?», «как это повлияет на кодовую базу через год?».

Три вектора AI-технического долга

Авторы из CERFACS выделяют три источника технического долга, который AI-инструменты создают.

Model versioning chaos. Команда начинает с Copilot на GPT-4, через полгода переключается на Cursor с Claude, через квартал добавляет Claude Code. Каждый инструмент и каждая модель генерирует код в своём стиле. Кодовая база превращается в мозаику из разных «почерков», и новый разработчик тратит больше времени на понимание, почему один модуль написан в одном стиле, а соседний — в другом.

Code generation bloat. AI генерирует verbose-код. Там, где опытный разработчик напишет три строки, AI выдаст пятнадцать с подробными комментариями и обработкой edge cases, которые в данном контексте невозможны. Объём кодовой базы растёт, а вместе с ним растёт когнитивная нагрузка на всех, кто этот код читает.

Organization fragmentation. В крупных компаниях разные команды выбирают разные AI-инструменты и используют их по-разному. Одна команда пишет промпты для Copilot, другая настроила Cursor rules, третья запускает Claude Code с кастомным CLAUDE.md. Стандарты кода расходятся, и общий code review становится сложнее.

Парадокс Harness: больше времени на дебаг

Отчёт State of Software Delivery 2025 от Harness добавил ещё один штрих. Большинство опрошенных разработчиков сказали, что тратят больше времени на дебаг AI-генерированного кода, чем тратили на дебаг собственного кода до внедрения AI. Ту же картину зафиксировали для security-уязвимостей: разработчики проводят больше времени за устранением проблем безопасности в AI-коде.

Это не значит, что AI-код хуже по каждой строке. Ox Security подчеркивает, что AI-код «не более уязвим в расчёте на строку, чем код человека». Проблема в объёме: AI генерирует значительно больше кода за единицу времени, и абсолютное число проблем растёт, даже если плотность дефектов остаётся прежней.

Рекомендации для команд

Настройте линтеры и static analysis на AI-код. Если команда использует AI, правила дублирования (DRY violations) в линтере должны быть строже, а не мягче. Инструменты типа SonarQube, Semgrep или eslint с кастомными правилами ловят паттерн «скопировал вместо вынес в функцию».

Ревьюйте AI-код как код джуниора. Ox Security буквально называет AI-код «армией джуниоров». Практики code review здесь критически важны: ревьюер должен проверять не только корректность, но и архитектурные решения — создаёт ли этот PR новую абстракцию, где нужна существующая? Растёт ли дублирование?

Отслеживайте code churn. Если процент кода, который переписывают в течение двух недель после коммита, растёт — это сигнал. GitClear предоставляет инструменты для трекинга, но можно построить аналогичную метрику на данных из git.

Давайте AI контекст об архитектуре. Cursor rules, CLAUDE.md, .github/copilot-instructions.md — все три инструмента поддерживают кастомные инструкции. Опишите архитектурные принципы, укажите на существующие абстракции, запретите дублирование. AI следует инструкциям лучше, когда эти инструкции существуют.

Инвестируйте в тестовую инфраструктуру. AI генерирует тесты с фейковым coverage. Единственная защита — mutation testing (Stryker, pitest) и ревью тестов с тем же вниманием, что и ревью продуктового кода.

Код, который AI пишет сегодня, команда будет поддерживать годами. Решения о качестве нужно принимать до того, как технический долг станет неуправляемым.