На GitHub гораздо меньше уникального контента, чем вы думали

 

Уникальность кода

Анализ проектов на GitHub показал, что только 1/5 часть всего кода на сайте (т.е., примерно 85 млн. файлов) является уникальной. Остальные 4/5 — дублируют уникальный код в той или иной мере. Исследование охватило 4,5 миллиона проектов (без учета ответвлений) на Java, C++, Python и JavaScript.

Для выявления дубликатов исследователи применяли не один метод. В частности, сравнивали хэши файлов (так определяли стопроцентные клоны), хэши сгруппированных токенов файла (без учета комментариев и форматирования). Применяя SourcererCC, выявляли частичное заимствование кода.

Результаты анализа показали, что больше всего дубликатов припадает на проекты на JavaScript: если в среднем по GitHub уникальны 20% кода, то в случае с JS — только 6%. А меньше всего повторов в коде на Java: там уникальны 3/5 всех файлов. Подробную сводку можно посмотреть в таблице:

Уникальность кода в процентах

Из всех файлов лидер по повторам… пустой файл. Таких на GitHub 2,2 млн. Впрочем, без учета подобных случаев (и вообще всех маленьких файлов) общее соотношение уникального и заимствованного кода практически не меняется.

Уникальность без учета мелких файлов

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

Соотношение по языкам

Процентное соотношение для разных языков

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

В частности, становится понятным такой большой процент дубликатов на JavaScript: там очень много копий модулей NPM (они составляют 70% всех дубликатов для этого языка). Частое включение в проекты библиотеки jQuery также влияет на результаты.

Что касается других языков, в проектах на Python заимствование происходит из разных библиотек, без каких-то явных лидеров. В C/C++ самые копируемые — boost и freetype, а в Java — ActionBarSherlock и Cordova.

Определенная часть совпадающего кода обусловлена применением обычных фреймворков и включением в проект автогенерированного ими кода. В проектах на JavaScript это код, созданный при помощи Angular, на Python — Django, на Java — Apache Axis, Android SDK и JAXB.

***
Подписывайтесь на наш канал в Telegram!
[customscript]techrocks_custom_after_post_html[/customscript]
[customscript]techrocks_custom_script[/customscript]

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Прокрутить вверх