Программисты десятилетиями создавали код для моделей искусственного интеллекта (ИИ), а теперь ИИ используется для написания кода. В исследовании, в июньском номере журнала IEEE Transactions on Software Engineering, была оценена работа ИИ-кодогенератора ChatGPT 3.5 от OpenAI с точки зрения функциональности, сложности и безопасности.
Результаты показывают, что успех ChatGPT в написании функционального кода варьируется от 0,66% до 89%, в зависимости от сложности задачи, языка программирования и других факторов. Хотя в некоторых случаях ИИ может создавать код лучше, чем люди, анализ также выявляет проблемы с безопасностью кода, сгенерированного ИИ.
Исследование, проведенное под руководством Ютиана Танга, лектора Университета Глазго, показало, что генерация кода на основе ИИ может повысить производительность и автоматизировать задачи разработки программного обеспечения. Однако важно понимать сильные и слабые стороны этих моделей. Команда Танга тестировала способность ChatGPT решать 728 задач на платформе LeetCode на пяти языках программирования: C, C++, Java, JavaScript и Python.
Общий успех ChatGPT в решении задач был высоким, особенно для задач, существовавших до 2021 года. Например, для легких, средних и сложных задач успех составил около 89%, 71% и 40% соответственно. Однако для задач, появившихся после 2021 года, способность ChatGPT генерировать корректный код значительно снизилась: с 89% до 52% для легких задач и с 40% до 0,66% для сложных.
Это объясняется тем, что ChatGPT обучен на данных до 2021 года и не сталкивался с новыми задачами и решениями. Он лишен критического мышления человека и может решать только те проблемы, которые уже видел ранее.
Кроме того, ChatGPT способен генерировать код с меньшими затратами по времени выполнения и памяти по сравнению как минимум с 50% решений людей на тех же задачах LeetCode . Исследователи также изучили способность ChatGPT исправлять свои ошибки после получения обратной связи от LeetCode. Из 50 случайно выбранных сценариев, где ChatGPT изначально сгенерировал некорректный код, он хорошо справлялся с исправлением ошибок компиляции, но не всегда успешно исправлял логические ошибки.
Также было обнаружено, что сгенерированный ChatGPT код имел уязвимости, такие как отсутствие проверки на null, однако многие из них легко устраняются. Наиболее сложным оказался код на языке C, за ним следуют C++ и Python, чья сложность схожа с кодом, написанным человеком.
Ютиан Танг отмечает, что для улучшения работы ChatGPT разработчики должны предоставлять дополнительную информацию и указывать потенциальные уязвимости, чтобы ИИ мог лучше понимать задачи и избегать ошибок.
Таким образом, несмотря на значительный прогресс в использовании ИИ для генерации кода, человеческий контроль и дополнения остаются важными для создания безопасного и функционального программного обеспечения.