О компании     Как оплатить?     А в кредит можно?     А привезете?     А как вас найти?     А у меня сломалось...      
 
 
Компьютерный интернет-магазин
Товаров: 0
Сумма: 0
Курс (нал): 62.00
Безнал: 64.50
(499) 700-00-40
ICQ12325772 ICQ21969923  
 
 
 
 
 
 
 
 
Подарки выбери себе сам

Кредит

Trade-In

 
 

Анализ степени дублирования кода на GitHub

Проанализировано 4.5 млн различных проектов (без форков репозиториев), включающих более 428 млн файлов с кодом на языках Java, C++, Python и JavaScript. Представлены результаты изучения дублирования кода в общем объёме исходных текстов, размещённых на GitHub. 80% кода на GitHub являются копиями других файлов. Из этих файлов лишь 85 млн оказались уникальными, т.е.

Определение дубликатов выполнялось несколькими методами: путём сравнения хэшей файлов (полные копии), хэшей сгруппированного набора токенов из файла (не учитывает форматирование и комментарии) и оценки частичного заимствования кода при помощи SourcererCC (определён отредактированный код с 80% общих токенов).

94% файлов являются полными клонами 6% файлов), 5% не совпадают по хэшу набора токенов и 2% отличаются с учётом редактирования кода. Наиболее часто дубликаты встречаются в коде на языке JavaScript, для которого лишь 6% файлов не совпадают (т.е. Для C++ эти показатели составляют 27%, 23% и 10%, а для Python — 29%, 27% и 9%. Наименьшее число дубликатов выявлено для кода на языке Java, для которого не повторяется 60% файлов, 56% наборов токенов и 26% отличаются с учётом редактирования кода.

Но игнорирование при проверке мелких файлов, в которых встречаются менее 50 токенов, почти не сказывается на уровне совпадений: Наиболее часто повторяющимся стал пустой файл, размером 0 байт, который встречается 2.2 млн раз.

Например, около 15% проектов на JavaScript являются полными клонами других проектов, 31% проектов копируют более 80% кода из других проектов, а 48% копируют более 50% кода. Распределение языков по уровню дублирования кода также сохраняется, если провести сравнение не на уровне файлов, а на уровне проектов. Для Java эти показатели составляют 6%, 9% и 14%.

Например, для JavaScript очень велика доля копий библиотек, распространяемых через NPM. Попытки разобраться почему степень дублирования кода столь велика показали, что наиболее частой причиной появление дубликатов, является включение в репозитории проектов кода из сторонних библиотек и фреймворков, вместо подключения их как внешних зависимостей. Несмотря на то, что только 6% проектов включают каталог node_modules, 70% из всех дубликатов на JavaScript связаны с копированием модулей NPM.

Кроме NPM-модулей достаточно часто в проект включается библиотека jQuery. В среднем в JavaScript-проект включается 63 зависимости, а уровень вложенности зависимостей составляет 5 (максимальное зафиксированное число зависимостей — 1261, максимальный уровень вложенности — 47). В Java чаще остальных дублируются компоненты ActionBarSherlock и Cordova, в C/C++ — boost и freetype, в Python копирование распределено более равномерно по разнообразным библиотекам.

Например, для Java чаще всего совпадения выявлялись в коде, сгенерированном при помощи Apache Axis, Android SDK и JAXB, для Python при помощи Django, а для JavaScript — Angular. Совпадения на уровне изменённого кода (частичное совпадение при проверке SourcererCC)чаще всего оказались вызванными использованием «копипастинга», а также ненамеренным копированием кода или автогенерацией кода в процессе применения типовых фреймворков.

Определение дубликатов выполнялось несколькими методами: путём сравнения хэшей файлов (полные копии), хэшей сгруппированного набора токенов из файла (не учитывает форматирование и комментарии) и оценки частичного заимствования кода при помощи SourcererCC (определён отредактированный код с 80% общих токенов).

Проанализировано 4.5 млн различных проектов (без форков репозиториев), включающих более 428 млн файлов с кодом на языках Java, C++, Python и JavaScript. Представлены результаты изучения дублирования кода в общем объёме исходных текстов, размещённых на GitHub. 80% кода на GitHub являются копиями других файлов. Из этих файлов лишь 85 млн оказались уникальными, т.е.

94% файлов являются полными клонами 6% файлов), 5% не совпадают по хэшу набора токенов и 2% отличаются с учётом редактирования кода. Наиболее часто дубликаты встречаются в коде на языке JavaScript, для которого лишь 6% файлов не совпадают (т.е. Для C++ эти показатели составляют 27%, 23% и 10%, а для Python — 29%, 27% и 9%. Наименьшее число дубликатов выявлено для кода на языке Java, для которого не повторяется 60% файлов, 56% наборов токенов и 26% отличаются с учётом редактирования кода.

Но игнорирование при проверке мелких файлов, в которых встречаются менее 50 токенов, почти не сказывается на уровне совпадений: Наиболее часто повторяющимся стал пустой файл, размером 0 байт, который встречается 2.2 млн раз.

Например, около 15% проектов на JavaScript являются полными клонами других проектов, 31% проектов копируют более 80% кода из других проектов, а 48% копируют более 50% кода. Распределение языков по уровню дублирования кода также сохраняется, если провести сравнение не на уровне файлов, а на уровне проектов. Для Java эти показатели составляют 6%, 9% и 14%.

Кроме NPM-модулей достаточно часто в проект включается библиотека jQuery. В среднем в JavaScript-проект включается 63 зависимости, а уровень вложенности зависимостей составляет 5 (максимальное зафиксированное число зависимостей — 1261, максимальный уровень вложенности — 47). В Java чаще остальных дублируются компоненты ActionBarSherlock и Cordova, в C/C++ — boost и freetype, в Python копирование распределено более равномерно по разнообразным библиотекам.

Например, для JavaScript очень велика доля копий библиотек, распространяемых через NPM. Попытки разобраться почему степень дублирования кода столь велика показали, что наиболее частой причиной появление дубликатов, является включение в репозитории проектов кода из сторонних библиотек и фреймворков, вместо подключения их как внешних зависимостей. Несмотря на то, что только 6% проектов включают каталог node_modules, 70% из всех дубликатов на JavaScript связаны с копированием модулей NPM.

Например, для Java чаще всего совпадения выявлялись в коде, сгенерированном при помощи Apache Axis, Android SDK и JAXB, для Python при помощи Django, а для JavaScript — Angular. Совпадения на уровне изменённого кода (частичное совпадение при проверке SourcererCC)чаще всего оказались вызванными использованием «копипастинга», а также ненамеренным копированием кода или автогенерацией кода в процессе применения типовых фреймворков.

Дата публикации: 20-11-2017

Ещё новости


  19.10.2022  Вышел Node.js 19.0

  19.04.2023  «Старший брат» «Москвича 3»: в России начались «живые» продажи 180-сильного JAC JS6

По габаритам он сопоставим с Haval F7 и Nissan X-Trail: они составляют 4605?1890 х 1700 мм при колесной базе 2720 мм. JAC JS6 — это «старший брат» JS4, который выпускают в России под названием «Москвич...

  26.08.2022  Huawei Mate 50 Pro удивит своим экраном: вырез такой же, как у iPhone 13 Pro

Зачем Huawei понадобилось расширять вырез, когда большинство флагманов обходятся обычными врезанными камерами, — вопрос. В Сети появились новые изображения будущего флагмана Huawei Mate 50 Pro, и...

  20.11.2022  Многие производители кабелей Lightning уже закрылись: из-за перехода iPhone на USB-C закроется до 80% таких компаний

Он заявил в своем посте, что скорость проводной передачи новых смартфонов существенно увеличится. Известный аналитик Минг-Чи Куо заявил на прошлой неделе, что все смартфоны серии iPhone 15 получат разъёмы...

  26.08.2022  Народные GeForce RTX 4060 и RTX 4060 Ti будут работать на частоте свыше 2,6 ГГц. Производительность RTX 4060 Ti окажется на уровне RTX 3080

Согласно данным информатора, старшая модель набирает около 8600 баллов, средняя частота ее GPU — около 2,6 ГГц, а потребление энергии при этом составляет 270–280 Вт. Инсайдер опубликовал результаты...



Все новости
 
 
  © 2003-2024 Ноутбуки и компьютеры
Все права защищены