Google Gemini 4 Argon: Оценка модели

Источник: SonarSource•

Google Gemini 4 Argon: Оценка модели

Узнайте, как Gemini 4 Argon справляется с бенчмарком кодирования на Java для LLM: процент успешных прохождений составляет 85,66%, а количество уязвимостей — 193. Ознакомьтесь с полными результатами на Sonar.

Gemini 4 Argon успешно справляется с 85,66% протестированных задач. В ходе нашей оценки она также создает больше блокирующих уязвимостей, чем блокирующих багов. Прохождение тестов и безопасность кода для выпуска — это разные вещи, и данная модель четко демонстрирует этот разрыв. Большинство обнаруженных проблем связаны с удобством поддержки (maintainability). Большинство серьезных проблем связаны с безопасностью.

Как оценивалась Gemini 4 Argon?

Модель: Gemini 4 Argon, высокий уровень рассуждений

Язык: Java

Бенчмарк: тот же Java-бенчмарк, который мы используем для каждой модели, охватывающий HumanEval, MBPP и ComplexCodeEval. Запуск регистрирует 4444 задачи. Все они анализируются на предмет качества и безопасности кода, откуда и берутся все приведенные ниже показатели плотности. Из них 544 поставляются с исполняемыми тестами, и процент успешных прохождений охватывает только их.

Анализатор: систематический анализ кода SonarQube. Плотность сложности и запахов кода (code smells) указана на 1000 строк кода (kLOC). Плотность багов и уязвимостей, а также все распределения по категориям указаны на миллион строк (mLOC).

Три термина, которые стоит определить в первую очередь:

  • Цикломатическая сложность: подсчитывает независимые пути выполнения функции.
  • Когнитивная сложность: метрика SonarQube, которая придаёт большиий вес вложенной и сильно разветвленной логике, отражая то, насколько трудно код читается человеком.
  • Серьезность (Severity): уровень влияния проблемы, унаследованный от правила, которое ее выявило. Он описывает, насколько сильно проблема влияет на качества программного обеспечения, измеряемые Sonar. Это не предсказание того, насколько вероятно попадание этого кода в продакшн.

Ключевые метрики Gemini 4 Argon с первого взгляда

Метрика

Gemini 4 Argon

Строки кода (всего)

619,852

Функции

85,245

Плотность комментариев (% от строк кода)

4.6%

Цикломатическая сложность на kLOC

244.39

Когнитивная сложность на kLOC

148.97

Баги

347

Уязвимости

193

Запахи кода

9,626

Все проблемы

10,166

Общая плотность проблем на kLOC

16.40

Функциональный навык (процент успешных прохождений)

85.66%

Отсутствующие решения

1.55%

Каков функциональный процент успешных прохождений Gemini 4 Argon?

Процент успешных прохождений составляет 85,66% для 544 задач с тестами: 466 решений прошли успешно, а 78 нет. Примерно одно из семи заданий не проходит тесты. Из всех 4444 задач 69 не вернули никакого пригодного кода вообще (1,55%).

Это важно, потому что 33 из них приходятся на 544 задачи с тестами — тот же набор, по которому рассчитывается процент успешных прохождений. Задача без решения не дает ничего для анализа и запуска, поэтому это скорее отсутствие попытки, чем неудачная попытка. Если вы планируете работу с учетом этой модели, рассматривайте процент успешных прохождений и процент завершения как два независимых вопроса.

Сколько кода генерирует Gemini 4 Argon?

Gemini 4 Argon сгенерировала 619 852 строки кода в рамках бенчмарка, распределенные по 85 245 функциям и 22 656 классам.

Количество функций — это то, на что стоит обратить внимание. Получается около 7,3 строк на функцию и примерно по 3 оператора в каждой, при этом на один класс приходится примерно 27 строк. Этот код состоит из множества мелких частей, а не из нескольких крупных.

Мелкозернистые функции, как правило, легче читать и тестировать по отдельности. Обратная сторона заключается в том, что отслеживание единой операции может потребовать перехода через большее их количество, поэтому ревьюеры тратят больше времени на пути вызовов и меньше на любое отдельное тело функции.

Строки комментариев в сумме составляют 30 029, что равно 4,6% вывода. Здесь содержится достаточное количество встроенного контекста для любого, кто будет разбираться в коде позже.

Насколько сложен сгенерированный Gemini 4 Argon код?

Цикломатическая сложность составляет 244,39 на kLOC, а когнитивная сложность — 148,97 на kLOC.

Читайте эти две метрики вместе, а не по отдельности. Цикломатическая считает точки принятия решений. Когнитивная придает больший вес вложенным решениям. Тот факт, что когнитивная сложность находится значительно ниже цикломатической, говорит о том, что ветвление происходит часто, но в основном оно плоское: здесь много решений и сравнительно мало логики, скрытой внутри другой логики.

В сочетании с 7,3 строками на функцию это создает целостную картину: короткие функции, обилие ветвлений, неглубокая вложенность. Ни один из показателей не говорит вам, работает ли код, но оба показывают, сколько всего ревьюер должен держать в голове одновременно, и неглубокий код превосходит глубокий по этому параметру.

Какие баги генерирует Gemini 4 Argon?

Модель произвела 347 багов по всему бенчмарку, что составляет плотность 560 на mLOC.

Серьезность надежности

На mLOC

BLOCKER

CRITICAL

MAJOR

310

MINOR

182

Профиль серьезности смещен к средним значениям. Блокирующие (blocker) и критические (critical) проблемы вместе составляют 42 находки, или 12% всех багов, причем на долю мажорных (major) приходится более половины от общего числа. Для команды, занимающейся приоритизацией надежности, большая часть проблем находится на том уровне, который требует исправления без остановки релиза.

Категория бага

На mLOC

Параллельность / потоки

Производительность / структура

Обработка исключений

Безопасность типов / приведения типов

Нарушение контракта API

Утечки ресурсов / потоков

Значения NULL / данные

Шаблоны / регулярные выражения

Ошибки управления потоком выполнения

Без категории

Структура данных

Ни одна категория багов не доминирует, и это имеет практические последствия. Самая крупная категория, параллельность и потоки, насчитывает 58 находок, или 17% от общего числа. Следующие шесть категорий попадают в диапазон от 34 до 57. Таким образом, семь категорий охватывают 319 из 347 багов, и ни одна из них не доминирует в группе.

Следовательно, здесь нет какого-то одного рычага для устранения багов. Команда, которая исправит все проблемы с параллельностью, устранит 17% работы по обеспечению надежности и оставит шесть других категорий практически нетронутыми.

Проблемы с параллелизмом по-прежнему заслуживают внимания, непропорционального их количеству. Это одни из самых труднообнаруживаемых при ревью и трудновоспроизводимых после релиза багов, поскольку они зависят от таймингов и среды выполнения. Правила, которые их выявляют, узкие и специфические: блокировка с двойной проверкой (double-checked locking), блокировка, которая не снимается на каком-то из путей выхода из метода, синхронизация по полю, которое перезаписывается, инкремент счетчика для volatile-поля и вызовы wait или notify без удержания блокировки.

Какие уязвимости безопасности генерирует Gemini 4 Argon в коде?

Gemini 4 Argon произвела 193 уязвимости, что составляет плотность 311 на mLOC. Это наименьшая группа находок по объему и самая серьезная по профилю.

Серьезность безопасности

На mLOC

BLOCKER

CRITICAL

213

MAJOR

MINOR

Блокирующие и критические проблемы в сумме составляют 154 из 193 находок. Четыре из пяти находок, связанных с безопасностью, находятся на критическом уровне или выше, что противоположно профилю багов, где те же два уровня составляли 12%.

Строка блокирующих проблем заслуживает отдельного внимания. Здесь имеется 22 блокирующих уязвимости, что больше, чем 21 блокирующий баг, несмотря на общее наличие 347 багов и всего 193 уязвимостей. В масштабах всего запуска уязвимости составляют 1,9% от всех проблем и 28% от проблем блокирующего уровня. Безопасность — это малая доля работы и огромная доля риска.

Категория уязвимостей

На mLOC

Неправильная конфигурация криптографии

127

Небезопасная обработка системных ресурсов

Неадекватная обработка ошибок (ввод-вывод)

Внешние сущности XML (XXE)

Без категории

Инъекционные атаки

Жестко закодированные учетные данные

Пропуски валидации сертификатов

Неправильная конфигурация безопасности веб-API

Инъекция обхода пути (path traversal)

Там, где ошибки распределены неравномерно, концентрируются уязвимости. Ошибки конфигурации криптографии и небезопасная обработка системных ресурсов составляют 129 из 193 обнаруженных проблем, то есть на две категории приходится две трети всей поверхности безопасности. Обе они отлично покрываются автоматизированным анализом. Если проверка надежности должна оставаться широкой, проверку безопасности можно сузить до двух категорий и при этом охватить большую ее часть.

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

«Длинный хвост» здесь короткий, но его стоит упомянуть, поскольку категории весьма специфичны. Жестко закодированные учетные данные встречаются 7 раз, а обход каталога — 1 раз. Это небольшие цифры, и речь идет о тех типах находок, где проблемой является сам факт попадания хотя бы одного экземпляра в продакшн-ветку, а не их общее количество.

Насколько поддерживаемым является код, сгенерированный Gemini 4 Argon?

В ходе этого запуска было выявлено 9 626 запахов кода (code smells), что составляет плотность 15,53 на 1 000 строк кода (kLOC). Это 95% от общего объема всех находок.

Серьезность запахов кода

На миллион строк кода (mLOC)

БЛОКЕР

КРИТИЧЕСКИЙ

2 691

МАЖОРНЫЙ

6 321

МИНОРНЫЙ

5 814

ИНФО

645

На мажорные и минорные проблемы приходится 7 522 из 9 626 обнаружений, а на блокирующие — 36. Объем реален, но он находится на нижней шкале серьезности. 1 668 критических проблем (17% от общего числа) — это то, чему следует уделить первоочередное внимание.

Категория запаха кода

На миллион строк кода (mLOC)

Тип параметров коллекций / дженериков

3 896

Лучшие практики проектирования / фреймворков

2 559

Регулярные выражения / паттерны / формат строк

1 881

Когнитивная вычислительная сложность

1 721

Именование / стиль / документация

1 497

Мертвый / неиспользуемый / избыточный код

1 366

Видимость присваивания / полей / областей видимости

1 144

Управление / условная логика

994

Устаревание / устаревшие API

329

Без категории

137

Структура / архитектура

Коллекции и дженерики — крупнейшая категория, на которую приходится 25% всех запахов. Одно предостережение при чтении любой строки в этой таблице: каждая категория объединяет множество правил (17 правил Java в случае коллекций и дженериков), и все они представляют собой разные типы проблем. Эта строка охватывает сырые типы и пропущенные параметры типов, избыточные приведения типов и работу с коллекциями, которую можно было бы сделать проще, поэтому общая сумма не говорит вам, какая именно доля приходится на каждую из этих проблем.

Сколько токенов использует Gemini 4 Argon?

Токены

Gemini 4 Argon

Входные

1 517 336

Выходные

6 362 719

Рассуждения

11 886 018

Всего

19 766 073

Одно замечание по учету перед тем, как изучать эти данные. В этом запуске токены рассуждений учитываются отдельно от выходных токенов, а не внутри них, и эти три показатели в сумме дают итоговое значение. Не каждый провайдер сообщает данные именно так, поэтому не стоит сравнивать это число с показателем рассуждений другой модели без предварительной проверки.

Главный итог — это соотношение. Gemini 4 Argon потратила 11,9 миллиона токенов на рассуждения и 6,4 миллиона на генерацию кода, что составляет примерно 1,9 токена размышлений на каждый написанный токен. На одни только рассуждения уходит 60% от общего объема затрат.

В расчете на одну строку сгенерированного кода Java это составляет примерно 10 выходных токенов и 19 токенов рассуждений. Эта модель склонна к глубокому анализу, что согласуется с высокой настройкой усилий на рассуждения, использованной в данном запуске. Если вы планируете бюджет, затраты на рассуждения с большим отрывом являются более крупной статьей расходов.

Каковы наибольшие риски использования кода, сгенерированного Gemini 4 Argon, в продакшне?

Три направления, на которые стоит направить усилия по верификации.

Безопасность стоит на первом месте, причем по степени серьезности, а не по объему. Здесь зафиксировано 22 блокирующие уязвимости и 132 критические в группе, которая составляет менее 2% от всех находок. На две категории приходится две трети этого объема, и обе они хорошо покрываются автоматизированным анализом, так что из трех рисков этот проще всего четко локализовать.

На втором месте находится распределение ошибок. С учетом того, что 347 ошибок распределены по семи категориям примерно одинакового размера, проверку надежности нельзя сузить до одной или двух групп правил. Устранение самой крупной категории, связанной с многопоточностью, позволяет решить 58 проблем, но оставляет еще 289. Планируйте широкий охват.

На третьем месте — пропущенные результаты генерации. В общей сложности 69 задач не дали никакого результата, причем 33 из них приходятся на подмножество, обеспеченное тестами. Это вообще не показатель качества кода, и именно поэтому его легко упустить из виду. Задача, которая не создает кода, не порождает ни находок, ни результатов тестов, поэтому в каждой таблице этой статьи она выглядит безупречно.

Три основных вывода:

  • Большинство находок — это проблемы с поддержкой кода. Находки, связанные с безопасностью, являются наиболее серьезными. Запахи кода составляют 95% из 10 166 находок. На долю уязвимостей приходится 1,9%, но 80% из них являются блокирующими или критическими (для сравнения: среди багов этот показатель составляет 12%, а среди запахов кода — 18%).
  • Устранение ошибок не имеет какого-то одного универсального рычага. Крупнейшая категория ошибок составляет 17% от общего числа, причем семь категорий имеют примерно одинаковый размер. Проверка надежности должна оставаться масштабной.
  • Модель тратит на рассуждения больше, чем на написание кода. Она использовала 11,9 миллиона токенов на рассуждения против 6,4 миллиона выходных токенов и 19,8 миллиона в общей сложности. Общая сумма примерно в два с половиной раза превышает результаты запусков GPT-6, которые мы публиковали ранее и в которых использовался средний уровень усилий, в то время как здесь применялся высокий. Если вы оцениваете расходы, отталкивайтесь от показателей рассуждений, а не от ожидаемого объема кода.

Что делать дальше

Если вы внедряете Gemini 4 Argon, в первую очередь направьте автоматические проверки на ошибки конфигурации криптографии и небезопасную обработку ресурсов. Вместе они составляют две трети находок, связанных с безопасностью. Проверку надежности оставляйте широкой, так как ни одна отдельно взятая категория багов не доминирует по объему. И отслеживайте пропущенные результаты генерации отдельно, поскольку задача, не возвращающая код, никогда не отображается как найденная проблема. SonarQube выявляет первые две проблемы посредством алгоритмического анализа при каждом изменении и со скоростью, с которой модель пишет код.

Полные результаты оценки Gemini 4 Argon, как и всех остальных измеренных нами моделей, представлены на странице Sonar LLM Leaderboard.

О чём эта статья

Ещё в разделе «Разработка ПО»

Все →

Ещё от SonarSource