Кто лучший программист (все еще), человек или машина?
Полное исследование можно почитать по ссылке.
Ниже перевод вступления
Генерация кода с помощью LLM (вместо написания кода с нуля) резко выросла в популярности. Однако последствия для безопасности такого кода остаются неизвестными.
Мы провели исследование, сравнив безопасность и качество кода, написанного людьми, с кодом, сгенерированным LLM, на широком наборе задач: структуры данных, алгоритмы, криптографические процедуры и задачи уровня LeetCode.
• Для оценки безопасности использовались модульные тесты, fuzzing и статический анализ.
• Для оценки качества учитывались сложность и размер кода.
Результаты:
• LLM может генерировать некорректный код, который не реализует требуемый функционал, особенно на сложных задачах. Ошибки могут быть тонкими.
Пример: реализация алгоритма SHA1 компилировалась, но была неверной.
• Даже если функциональность верная, код от LLM часто менее безопасен: отсутствуют защитные конструкции (defensive programming), что приводит к уязвимостям (переполнение буфера, переполнение целых чисел).
• Fuzzing показал, что код от LLM чаще подвержен зависаниям и крашам, чем написанный человеком.
• По качеству: LLM генерирует «скелетный» код без защитных конструкций, при этом более сложный на строку кода, чем человеческий.
Попытка улучшить:
Мы создали цикл обратной связи: просили LLM повторно сгенерировать код и устранить найденные проблемы (например, malloc overflow, выход за границы массива, null dereference).
Результат:
• Иногда LLM устраняет уязвимость,
• но часто появляются новые проблемы,
• а также были случаи, когда в изначально корректный код после доработки LLM вносил ошибки.
Post #348
464