Как стать автором
Обновить

Анализ 153 млн строк позволяет обвинить Copilot в снижении качества кода разработчиков

Время на прочтение6 мин
Количество просмотров20K

Code churn по годам, для 2024 года — прогноз. GitClear

Система автодополнения кода Copilot популярна. По данным компании GitHub, разработчика продукта, у инструмента миллион пользователей, и подписку на него купили 20 тыс. организаций.

Сервис GitClear попытался оценить, как появление Copilot повлияло на качество работы разработчиков. Анализ 153 млн изменённых строк кода приходит к выводу: код пишут хуже.

Мир узнал про Copilot ещё в 2021 году. В июне GitHub рассказала о техническом превью программиста-помощника. В октябре Copilot вышел в виде плагина JetBrains и Neovim, в марте 2022 года его встроили в Visual Studio. Через год после первого объявления, в июне 2022 года, Copilot вышел для всех желающих.

Ещё через год, в июне 2023 года, компания GitHub отчиталась об успешности Copilot. Помощником пользовался миллион разработчиков и 20 тыс. организаций, которые приняли 3 млрд строк кода от Copilot. Результаты другого опроса показали, что 92 % разработчиков из США хоть раз пробовали писать код с помощью ИИ. Не без гордости GitHub заявила, что 30-процентный скачок производительности от Copilot сулит нанести мировой экономике пользы на $1,5 млрд.


Github.blog

Компания-разработчик инструмента отчиталась: Copilot на 55 % ускоряет труд, а среди разработчиков 75 % заявили, что им с «вторым пилотом» приятнее. В последующем GitHub продолжила нахваливать свой продукт. Сторонние наблюдатели и исследователи характеризовали Copilot более сдержанно, иногда переходя на критику.

Как правило, научные статьи про Copilot рассказывают про попытки оценить качество кода. Делать это бросились сразу. Ещё в августе 2021 года, когда продукт был в бета-тесте, научная работа Нью-Йоркского университета указала, что в двух из пяти случаев код от Copilot содержит ошибки безопасности. Исследователи дали искусственному интеллекту сгенерировать 1689 программ, из которых около 40 % содержали уязвимости.

Дальнейшие исследования (к примеру, arXiv:2209.01766, doi:10.1145/3558489.3559072, arXiv:2306.15033, arXiv:2302.06590, arXiv:2301.04991) критиковали качество кода и указывали на неоднозначность его восприятия в сообществе, но также отмечали зарождение нового вида разработки программного обеспечния.

При желании можно оспорить даже слова про популярность. В опросе O'Reily Media от августа 2023 года 67 % разработчиков говорят, что у них в организации Copilot, ChatGPT или другими инструментами на искусственном интеллекте не пользуются.

Отчёт компании GitClear не пытается рассмотреть код, а измеряет изменения в человеческой производительности. GitClear — сервис аналитики, который рекомендует себя как дружественный разработчику. Не сто́ит забывать, что эта аналитика нужна менеджерам, чтобы оценить эффективность сотрудников.

24-страничный документ GitClear с первых страниц поясняет, что хочет бросить вызов рекламным заявлениям GitHub. Чтобы сделать это, анализу подвергли 153 млн изменённых строк кода за последние 48 месяцев, с января 2020 года по декабрь 2023.

Как заявляет GitClear, компания располагает самой крупной и подробной базой данных со структурированной информацией по изменениям кода. GitHub, GitLab, Bitbucket и прочие сервисы подразделяют изменения примитивно: на добавление и удаление. Документация GitClear описывает, что сохраняются данные о 7 операциях:

  1. Добавление. Сюда относятся все новые уникальные строки, кроме тех, которые попали в другие категории.
  2. Обновление. Любая строка, основанная на уже существующей и изменяющей её на примерно три слова.
  3. Удаление — код, который оставался удалённым больше 2 недель. Вообще, для основного бизнеса GitClear отслеживает данные для подсчёта индекса diff delta для последующей оценки вклада разработчика. Любопытно, что за добавление и обновление дают по 10 очков, за удаление — 25.
  4. Вставка/копирование. Под этим понимается повторное добавление одинаковых строчек кода в нескольких местах в одном или более коммитах.
  5. Операции «найти/заменить». Такое обнаруживается как крупное одинаковое изменение нескольких строк.
  6. Перемещение. Под этим понимают перемещение кода в этом же файле или вынос в новый файл. При этом изменения не допускаются, кроме седьмой категории.
  7. Различные манипуляциях с пробелами — то, что на сленге компании называется no-op code. В исследовании эта категория не участвовала.

В распоряжении GitClear было около миллиарда изменённых строчек. Это были как коммерческие клиенты компании (например, NextGen Health, Verizon), так и популярные открытые проекты (Facebook React, Google Chrome и так далее). Из них строчек с нужными изменениями набралось лишь 153 млн.

Анализ на основе этих данных приводит к неутешительным выводам. Возросла доля категорий добавленного кода и вставки/копирования относительно категорий обновлённого, удалённого и перемещённого кода. Исследование приходит к выводу, что в 2023 году принципы DRY всё чаще нарушаются.

Code churn или показатель оттока — это процентное соотношение строчек кода, которые были удалены или значительно обновлены меньше чем через две недели после написания. Churn — это нежелательное явление, поскольку это изменения в коде без пользы для проекта. В таблице ниже процент оттока не суммируется с другими операциями, а пересекается с некоторыми из них.

Последняя строка (2024 год) — это прогноз, который составила большая языковая модель gpt-4-1106-preview компании OpenAI с помощью квадратичной регрессии и Python. Хотя GitClear ругает ИИ, сотрудники компании не побрезговали его услугами при написании отчёта.

Год Добав-ление Удаление Обнов-ление Переме-щение Копирование и вставка Найти и заменить Churn
2020 39.2 % 19.5 % 5.2 % 25.0 % 8.3 % 2.9 % 3.3 %
2021 39.5 % 19.0 % 5.0 % 24.8 % 8.4 % 3.4 % 3.6 %
2022 41.0 % 20.2 % 5.2 % 20.5 % 9.4 % 3.7 % 4.0 %
2023 42.3 % 21.1 % 5.5 % 16.9 % 10.5 % 3.6 % 5.5 %
2024 43.6 % 22.1 % 5.8 % 13.4 % 11.6 % 3.6 % 7.1 %

Как видно, доля churn начала уверенно расти в 2022 — именно в том году, во второй половине которого вышел Copilot, а OpenAI запустила ChatGPT. Отчёт GitClear связывает рост показателя с выходом Copilot. Если верить прогнозу, в этом году более 7 % всех изменений кода будут откачены обратно в течение двух недель.

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

Заметно, что в категории перемещения наблюдается спад с того же 2022 года. Системы на искусственном интеллекте создают соблазн повториться и вновь что-то написать, а не использовать уже существующий код.


Те же данные, но в графическом виде

В интерпретации данных досталось и копированию/вставке уже существующего кода. GitClear ругает подобную практику и рекомендует избегать бездумных добавлений совпадающего кода в нескольких местах. Поскольку в эту категорию попадает только то, что совершено в одном коммите, реальный показатель может быть даже выше, чем 11 % в 2023 году.

Другой метод оценки качества — одна из метрик инструмента Code Provenance. В таблице ниже указано, сколько прошло времени между написанием кода и его последующим обновлением или удалением.

Как и в прошлый раз, данные 2024 года — это прогноз.

Год Менее 2 недель Менее 1 месяца Менее 1 года 1–2 года
2020 65.9 % 8.7 % 21.8 % 3.6 %
2021 66.7 % 9.0 % 20.5 % 3.8 %
2022 64.7 % 9.9 % 21.1 % 4.4 %
2023 71.3 % 9.3 % 16.4 % 3.0 %
2024 74.4 % 9.1 % 14.1 % 2.4 %

Тренд схожий: в 2022 и 2023 код без изменений проводит времени меньше, чем в 2020 и 2021 годах. В частности, доля кода, который меняют в течение первых двух недель, подскочила на 10 %. При этом доля кода, который меняют после 1 месяца, в 2023 году упала с 25,5 % до 19,4 %.

Отчёт GitClear связывает последнее с длиной спринта в гибких методологиях разработки. После 2–3 недель спринта команда проводит ретроспективу, где обсуждается, как найти коду новое применение в следующем спринте.

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


Те же данные, но в графическом виде

Искусственный интеллект может выдавать неплохой код. Отсюда и берёт корень проблема: слишком легко написать то, чего в итоге не должно быть вовсе. Такое мнение высказал Адам Торнхилл, автор книги «Ваш код как сцена преступления». В книге «Чистый код» Роберта Мартина высказывается другая идея: на чтение кода тратится на порядок больше времени, чем на его написание.

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


Как рассказывает GitHub, Copilot популярней среди менее опытных разработчиков. Github.blog

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



Отчёт компании GitClear опубликован на странице раздела исследований и доступен по прямой ссылке.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Полезен ли для вас GitHub Copilot?
22.19% Да77
23.63% Нет82
54.18% Не пользовался и/или не пишу код188
Проголосовали 347 пользователей. Воздержался 41 пользователь.
Теги:
Хабы:
Всего голосов 8: ↑5 и ↓3+4
Комментарии42

Другие новости

Истории

Работа

Data Scientist
78 вакансий

Ближайшие события

7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн
15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
22 – 24 ноября
Хакатон «AgroCode Hack Genetics'24»
Онлайн
28 ноября
Конференция «TechRec: ITHR CAMPUS»
МоскваОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань