GitHub : des chercheurs estiment que plus de la moitié des codes écrits en Java, Python, C/C++ et JavaScript
Sont dupliqués

Le , par Stéphane le calme, Chroniqueur Actualités
Une équipe internationale de huit chercheurs n'a pas cherché à mesurer la duplication de GitHub. Leur objectif initial était d'essayer de définir la « granularité » de la copie, c'est-à-dire la quantité de fichiers échangés entre différents clones. Mais en chemin, ils ont atteint un « taux impressionnant de duplication de fichiers. »

Présentée lors de la conférence OOPSLA de cette année à Vancouver, l'université de Californie à Irvine a découvert que sur 428 millions de fichiers sur GitHub, seuls 85 millions sont uniques.

« Des études antérieures ont montré qu'il y a une quantité non triviale de duplication dans le code source. Cet article analyse un corpus de 4,5 millions de projets non forkés hébergés sur GitHub représentant plus de 428 millions de fichiers écrits en Java, C ++, Python et JavaScript. Nous avons découvert que ce corpus ne contient que 85 millions de fichiers uniques. En d'autres termes, 70 % du code sur GitHub est constitué de clones de fichiers créés précédemment. Il existe une variation considérable entre les écosystèmes de langage. JavaScript a le plus haut taux de duplication de fichiers, seulement 6 % des fichiers sont distincts. Java, d'autre part, a le moins de duplication, 60 % des fichiers sont distincts. Enfin, une analyse au niveau du projet montre qu'entre 9 % et 31 % des projets contiennent au moins 80 % de fichiers qui peuvent être trouvés ailleurs. Ces taux de duplication ont des implications pour les systèmes basés sur des logiciels open source ainsi que pour les chercheurs intéressés par l'analyse de bases de code importantes », ont résumé les chercheurs.

Comme l’explique Adrian Colyer, qui a participé au projet, la raison d’être de l'étude est d'aider les chercheurs à sélectionner des échantillons aléatoires de bases de code dont ils pourraient se servir comme base pour d'autres études (il est courant dans la recherche en génie logiciel d'analyser des projets sur GitHub). En effet, la « sélection aléatoire simple pourrait conduire à des échantillons incluant une duplication élevée, ce qui pourrait fausser les résultats de la recherche », de sorte que l'indice public de duplication de code aide à « comprendre les relations de similarité dans des échantillons de projets, ou à organiser un échantillon pour réduire les doublons. »

Par exemple, selon l'étude, si un chercheur étudie combien de programmes en C et en C ++ utilisent des assertions, la duplication fausse clairement leur résultat. De même, une étude de qualité du logiciel doit prendre en compte la duplication.

Les chercheurs en ont profité pour faire une cartographie des codes dupliqués sur GitHub qu’ils ont baptisée DéjaVu.

Les chercheurs ont évalué la duplication de code en utilisant une variété de techniques de hachage. Identifier le code identique était facile, car ils produisaient des hachages identiques, mais il fallait aussi prendre en compte les logiciels avec de petits changements (espaces ou tabulations), ou même des changements plus importants.

Pour incorporer ces autres doublons dans leur échantillon, les chercheurs ont appliqué un « token hash » appelé SourcererCC qui a capturé des changements mineurs dans les espaces, les commentaires et les commandes pour identifier des clones avec des modifications trop importantes.


D’après les résultats de leur étude, en termes de pourcentage, c’est Java qui s’en sort le mieux avec 30 % de ses fichiers qui sont des originaux contre 3 % chez JavaScript.

Dans les détails, ils ont analysé 1,8 million de projets non forkés JavaScript, 1,5 million en Java, 893 000 en Python et 363 000 en C++.


Pourquoi une étude portée sur GitHub ?

Les chercheurs ont fait valoir que Github a été l'une des destinations les plus populaires pour les projets de partage, et elle a également gagné en popularité dans la recherche en tant que source d'ensembles de données à extraire pour trouver des modèles d'intérêt. « Lorsque nous expérimentons un logiciel et faisons des déclarations, statistiquement, on pourrait s'attendre à ce que la conclusion soit tirée d'un corpus de logiciels constitué de projets sélectionnés au hasard et indépendants », ont-ils fait valoir.

Selon eux, l’indépendance est tenue pour acquise dans plusieurs études, « cependant, il existe plusieurs façons dont un projet peut en influencer un autre, et la réutilisation d’un programme en est une façon importante et commune. Un ensemble de données est biaisé s'il y a trop de duplication entre les projets. »

Ils ont mis à la disposition des développeurs une Web App de DéjaVu. Il vous est également possible de télécharger pour chaque langage individuellement les Dumps MySQL.

Web App DéjàVu

Source : résultats de l'étude, billet Colyer


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse

Avatar de hotcryx hotcryx - Membre émérite https://www.developpez.com
le 24/11/2017 à 11:13
"des chercheurs estiment que plus de la moitié des codes sont dupliqués"

forcement si ce sont des forks!
Sans parler des codes backupés sur les Git repos et le master sur l'un d'entre eux.
Avatar de pokap pokap - Nouveau membre du Club https://www.developpez.com
le 24/11/2017 à 11:19
Cette étude n'a aucun intérêt, je suis même surpris (voir triste) de voir que des "chercheurs" ont passé du temps à analyser des millions de ligne de code pour ça.
Le but d'un code est de créé un algorithme, différent code peut avoir au final le même algorithme, du coup cette étude n'est pas rigoureuse car elle ne cherche que du code dupliqué (genre "int i = 0").


Le code dupliqué on s'en fout totalement, ce qui compte c'est la responsabilité d’exécution d'un algorithme.

EDIT: Autant pour moi, je n'avais pas vu qu'il parlais de fichier, du coup ça dépend du langage.
Avatar de BugFactory BugFactory - Membre éprouvé https://www.developpez.com
le 24/11/2017 à 11:37
L'article mentionne explicitement que les chercheurs ont analysé du code non forké.

Ensuite, l'étude ne compare pas des lignes de code uniques comme int i = 0 mais des fichiers entiers.

Pour en revenir à l'article lui-même, je me demande si les taux de duplication très différents de Java et Javascript viennent de leurs outils de build. C'est très facile de trouver toutes les dépendances Java sur un dépôt, alors que j'ai eu occasionnellement à copier une librairie Javascript dans un dossier lib. Moins souvent ces derniers temps il est vrai.
Avatar de micka132 micka132 - Membre expert https://www.developpez.com
le 24/11/2017 à 11:39
Citation Envoyé par hotcryx Voir le message
"des chercheurs estiment que plus de la moitié des codes sont dupliqués"

forcement si ce sont des forks!

Cet article analyse un corpus de 4,5 millions de projets non-forké hébergé
Citation Envoyé par pokap Voir le message
Cette étude n'a aucun intérêt, je suis même surpris (voir triste) de voir que des "chercheurs" ont passé du temps à analyser des millions de ligne de code pour ça.
Les interets sont multiples. Rien qu'en terme de sécurité c'est dramatique.
Combien de projet n'auront jamais de correctif parcequ'une partie du code a été duppliqué, mais qui seront tres facilement trouvable pour le hackeur ?
Avatar de transgohan transgohan - Expert éminent https://www.developpez.com
le 24/11/2017 à 11:57
Et quid des frameworks intégrés à un projet ou bien les librairies ?
En général sur les dépôts on retrouve une version d'un framework et les librairies associées.
Donc il y a bien copie, mais je vois mal voir un readme avec la liste des librairies à aller chercher ailleurs, surtout pour les incompatibilités de version...

Du coup je trouve le résultat de l'étude tout à fait normal...
Avatar de captaindidou captaindidou - Membre confirmé https://www.developpez.com
le 24/11/2017 à 12:08
Citation Envoyé par micka132 Voir le message


Les interets sont multiples. Rien qu'en terme de sécurité c'est dramatique.
Combien de projet n'auront jamais de correctif parcequ'une partie du code a été duppliqué, mais qui seront tres facilement trouvable pour le hackeur ?
Étant donné que la duplication consiste à l'intégrer aux sources du projet, il n'y a pas de raison de penser qu'il soit réservé un traitement à part au code plagié. D'autant plus que les techniques de sécurisation de code sont du fuzzing de boites noires.
Avatar de Zefling Zefling - Membre expert https://www.developpez.com
le 24/11/2017 à 13:45
Citation Envoyé par transgohan Voir le message
Et quid des frameworks intégrés à un projet ou bien les librairies ?
En général sur les dépôts on retrouve une version d'un framework et les librairies associées.
Donc il y a bien copie, mais je vois mal voir un readme avec la liste des librairies à aller chercher ailleurs, surtout pour les incompatibilités de version...

Du coup je trouve le résultat de l'étude tout à fait normal...
Quand on reprends des outils dans sont projets, forcement on se retrouve avec du code dupliqué. Combien de projets on Jquery ou 3Djs directement dans leur code.
Avatar de lulu7 lulu7 - Inactif https://www.developpez.com
le 24/11/2017 à 15:03
ce n'est pas justement le but de ces sites comme github justement de partager/copier/coller du code ?
Comme stackoverflow aussi... tous le monde copie-colle.
Avatar de kilroyFR kilroyFR - Membre confirmé https://www.developpez.com
le 24/11/2017 à 15:06
La morale de tous ces chiffres c'est que plus le degré de copie est important plus ca signifie que le langage est indigeste ? (javascript je ne suis pas surpris comme beaucoup je pense)
Avatar de micka132 micka132 - Membre expert https://www.developpez.com
le 24/11/2017 à 15:09
Citation Envoyé par lulu7 Voir le message
ce n'est pas justement le but de ces sites comme github justement de partager/copier/coller du code ?
Comme stackoverflow aussi... tous le monde copie-colle.
Les chercheurs ne sont généralement pas là pour dire si c'est bien ou si ca l'est pas. Il ne font que constater.
Je parlais tout à l'heure d'éventuel problème de sécurité, mais plus terre à terre on peut également conclure qu'on ne peut pas se fier aux volumes de fichier pour en conclure le volume de réelle création.
Contacter le responsable de la rubrique Accueil