Сравнение качества кода: люди против AI‑ассистентов
Исследователи из компании CodeRabbit провели системное сравнение кода, написанного разработчиками вручную, и кода, сгенерированного AI‑ассистентами. В рамках работы были проанализированы 470 pull‑запросов в открытых проектах на GitHub:
- 350 из них были созданы с помощью инструментов искусственного интеллекта;
- 150 — написаны полностью вручную.
Результаты исследования оказались довольно тревожными для сторонников тотальной автоматизации разработки. В среднем в одном AI‑генерируемом pull‑запросе было обнаружено 10,83 проблемы, тогда как в изменениях, созданных людьми, — 6,45 проблемы. То есть код, предложенный алгоритмами, содержал заметно больше дефектов.
Насколько больше ошибок в коде от AI
Если сравнивать не общее число, а именно значимость ошибок, картина становится еще более показательной. В коде, сгенерированном AI‑ассистентами:
- значительных дефектов — в 1,7 раза больше, чем в коде людей;
- критических проблем — в 1,4 раза больше.
То есть автоматическая генерация кода чаще приводит не только к мелким недочетам, но и к ошибкам, которые могут повлиять на корректность работы системы или даже на ее безопасность.
Какие типы проблем чаще всего создает искусственный интеллект
Разбор категорий дефектов показал, что AI особенно склонен «спотыкаться» на фундаментальных аспектах качества кода:
- логических ошибок — в 1,75 раза больше, чем в человеческом коде;
- проблем, связанных с качеством и сопровождаемостью (читаемость, структура, избыточность) — в 1,64 раза больше;
- уязвимостей безопасности — в 1,56 раза больше;
- проблем с производительностью — в 1,41 раза больше.
Это важный сигнал: модели не просто «делают опечатки» — они генерируют решения, которые выглядят правдоподобно, но содержат ошибки в самой логике работы и создают долговременные риски для проекта.
Риски для безопасности: где AI ошибается чаще всего
Особое внимание исследователи уделили уязвимостям, связанным с безопасностью. В AI‑коде было выявлено заметное увеличение частоты критических нарушений:
- вероятность некорректной обработки паролей — выше в 1,88 раза;
- случаи небезопасного предоставления доступа к объектам — чаще в 1,91 раза;
- количество уязвимостей по типу межсайтового скриптинга (XSS) — выше в 2,74 раза;
- проблемы с небезопасной десериализацией данных — в 1,82 раза больше.
Фактически, код, сгенерированный AI, гораздо чаще нарушает базовые практики безопасной разработки. Это особенно опасно в веб‑сервисах, финансовых системах, любых продуктах, работающих с личными данными или критичной бизнес‑логикой.
В чём люди всё ещё лучше машин
При этом полностью «обелять» человеческий код тоже нельзя. Исследование показало, что у людей есть свои слабые места. Так, в ручных правках:
- орфографических ошибок — в 1,76 раза больше;
- проблем, связанных с тестированием (например, неполные или некорректные тесты) — в 1,32 раза больше.
То есть разработчики чаще допускают мелкие текстовые огрехи, могут забыть про тесты или написать их неаккуратно. Но в плане логики и безопасности они пока что в среднем надёжнее, чем генеративные модели.
Почему AI производит больше серьёзных дефектов
Причина в том, как именно работает современный AI для программирования. Языковые модели:
- не «понимают» код так же, как человек, а статистически предсказывают наиболее вероятное продолжение;
- часто воспроизводят шаблоны из обучающей выборки, в том числе устаревшие или небезопасные практики;
- склонны к так называемым галлюцинациям — уверенно генерируют фрагменты, которые выглядят правдоподобно, но не имеют под собой реальной основы (несуществующие функции, некорректные API, логически противоречивые ветки кода).
В результате AI прекрасно заполняет «пространство синтаксиса» — умеет быстро написать много кода, следуя формату и стилю, — но значительно хуже справляется с глубоким смыслом и ситуациями, требующими доменной экспертизы и продуманной архитектуры.
Можно ли использовать AI как критерий отличия «машинного» кода от человеческого
На фоне этих данных появляется интересный побочный эффект: статистический профиль ошибок в коде, сгенерированном AI, заметно отличается от profиля человеческого кода. Более высокие доли логических дефектов, нарушений безопасности и типичных шаблонных решений могут действительно служить косвенным признаком того, что изменения были получены с помощью машинной генерации.
Однако полагаться только на это как на «детектор AI‑кода» опасно. Опытный разработчик может писать код со схожими недостатками, а качественно скомбинированная работа человека и AI может, наоборот, выглядеть более чистой, чем средний человеческий вклад. Тем не менее, для аналитики качества больших репозиториев эта метрика становится всё более интересной.
Как вписать AI‑ассистентов в процесс разработки безопасно
Ключевой вывод: использовать AI‑инструменты можно и нужно, но не как замену разработчиков, а как вспомогательный инструмент, который ускоряет рутину. Практически это означает:
1. Обязательный код‑ревью человеком
Любой фрагмент, сгенерированный AI, должен проходить тот же уровень проверки, что и код стажёров или новых сотрудников. Полагаться на «умный помощник сам всё сделал правильно» недопустимо.
2. Жёсткие стандарты безопасной разработки
Если в компании формализованы правила работы с паролями, сессиями, криптографией, десериализацией и вводом‑выводом, AI можно «зажать» в рамки:
— запрещённые конструкции и практики;
— обязательные паттерны;
— шаблоны безопасных обёрток.
3. Автоматические статические и динамические анализаторы
Генеративный код должен всегда проходить через инструменты статического анализа, линтеры, сканеры безопасности. Они не заменят человека, но отловят часть характерных промахов моделий.
4. Тесты как первый барьер
Если AI пишет код, он же (под контролем человека) может помогать писать тесты. Но запуск этих тестов перед слиянием в основную ветку должен быть жёстким требованием, а сами тесты — периодически пересматриваться.
Будущее — за специализированными моделями, а не за «универсальными гениями»
Один из возможных путей снижения числа ошибок — узкая специализация моделей. Вместо одной громадной системы «на все случаи жизни» всё больше обсуждаются варианты:
- модели, обученные строго на коде ядра Linux и системном C, с учётом стиля и требований к безопасности;
- системы, ориентированные на конкретные стеки (например, безопасную разработку на PHP или Java для корпоративных веб‑приложений);
- модели, заточенные под рефакторинг и ревью, а не генерацию новых сущностей.
Такие модели могут быть меньше по размеру, работать быстрее и проявлять себя лучше в своей нише, потому что будут подчиняться заранее заданным ограничениям и паттернам конкретного домена.
Связка «несколько моделей вместо одной»
Реальный сценарий работы в будущем может выглядеть так:
1. Модель общего назначения переводит формулировку задачи на естественном языке в детализированное техническое описание: сценарии, сущности, ограничения.
2. Узкоспециализированная модель генерирует код, строго следуя заранее определённым правилам, стилю и ограничениям безопасности.
3. Одна или несколько отдельных моделей выступают в роли критиков: проверяют логическую непротиворечивость, оценивают риск уязвимостей, предлагают улучшения.
4. Затем всё это всё равно просматривает человек, принимающий окончательное решение.
Так появляется многоступенчатый конвейер, где AI не один «пишет как бог», а несколько уровней систем по очереди уточняют постановку задачи, генерируют и проверяют результат.
Почему статистика ошибок — не приговор AI, а повод менять подход
Рост числа ошибок в AI‑коде — это не аргумент против самого факта использования искусственного интеллекта, а показатель того, что его внедряют часто без адаптации процессов. Если относиться к ассистенту как к «суперсеньору, который всегда прав», итог закономерен: больше критичных дефектов и дыр в безопасности.
Но если воспринимать AI как:
- ускоритель рутины (инструмент автодополнения, генерации шаблонов, болванок тестов),
- источник вариантов решений,
- помощника при рефакторинге и документировании,
и при этом сохранять строгий инженерный контроль, показатели качества могут быть значительно лучше, чем у «среднего» разработчика без инструментов.
Итог: люди пока надёжнее, но синергия перспективнее, чем конкуренция
Судя по приведённым цифрам, человеческий код по‑прежнему в среднем качественнее и безопаснее, чем то, что сегодня генерируют популярные AI‑ассистенты. Особенно это заметно в областях, где важны архитектура, безопасность и продуманная логика.
Однако это не означает, что AI нужно запретить или игнорировать. Правильнее воспринимать его как мощный, но потенциально опасный инструмент, требующий:
- жёстких регламентов использования,
- технических и организационных барьеров,
- культуры ревью и тестирования.
Там, где здравый смысл разработчиков и руководителей побеждает иллюзии «полной автоматизации», AI уже сейчас помогает сокращать рутину, ускорять разработку и повышать качество за счёт того, что человек тратит больше времени не на набор кода, а на анализ и архитектуру.
Именно такой комбинированный подход — когда AI не заменяет инженеров, а усиливает их — даёт шанс превратить текущую статистику с 1,7‑кратным ростом дефектов в обратную тенденцию.



