Plade

Fiche dév Ens Sup - Recherche
  • Création ou MAJ importante : 11/10/13
  • Correction mineure : 11/10/13
Mots-clés

Plade : plate-forme de recherche de similarité sur du code source

Ce logiciel a été développé (ou est en cours de développement) dans la communauté de l'Enseignement Supérieur et de la Recherche. Son état peut être variable (cf champs ci-dessous) donc sans garantie de bon fonctionnement.
  • Site web
  • Système : UNIX-like
  • Version actuelle : version en préparation
  • Licence(s) : GPL - Affero GPL v3
  • Etat : en développement
  • Concepteur(s) : Michel Chilowicz (LIGM)
  • Contact concepteur(s) : michel.chilowicz @ univ-mlv.fr
  • Laboratoire(s), service(s)... : LIGM

 

Fonctionnalités générales du logiciel

Plade est une plate-forme de recherche de correspondances de code source similaire développée en Java et Python. La recherche de similarité a des applications variées telles que la réorganisation du code au sein d'un projet par factorisation de redondances ou la mise en évidence d'opérations de copie légitime ou non entre différents projets. Dans l'hypothèse d'une copie non légitime, des opérations d'édition entre le code original et sa copie peuvent être présentes. Plade cherche à identifier les portions de code présentant une similarité exacte ou approchée suite à des opérations d'édition.

Trois axes sont actuellement développés par Plade :

  1. L'usage de représentations abstraites et transformées pour le code source. Il s'agit par cette première étape de gommer certaines opérations d'édition (modification de formatage, renommage d'identificateurs...). Plade propose des représentations par séquences de lexèmes ou arbres de syntaxe (avec intégration de graphe d'appel), ces représentations pouvant être caractérisées par des niveaux d'abstraction variables. Elles sont obtenues à partir d'analyseurs lexicaux et syntaxiques externes (Plade gère actuellement les langages C++ et Java).

  2. L'utilisation de méthodes algorithmiques pour localiser et caractériser des similarités sur ces représentations. Plade ne s'oriente pas vers des méthodes de comparaison extensive de paires déterminant des chemins d'édition entre séquences ou arbres. L'approche privilégiée s'oriente vers une technique d'indexation d'empreintes de séquences ou sous-arbres avec différents profils d'abstraction pour ensuite réaliser des requêtes sur ces bases constituées. Les éléments locaux quasi-similaires retrouvés peuvent ensuite être consolidés pour former des macro-similarités. Une approche permettant la recherche de facteurs similaires sur des séquences de lexèmes par indexation de suffixe est notamment employée : elle permet de lier des groupes de correspondances avec prise en compte des relations de chevauchement. Une application pratique est la factorisation de graphes d'appel d'un jeu de projets en un graphe d'appel commun ; ce graphe peut comprendre des fonctions factorisées issues de plusieurs projets ce qui révèle la copie de code.

  3. La présentation des résultats de similarité trouvés à destination d'un utilisateur humain. Plade permet d'évaluer et filtrer les correspondances trouvées selon différents critères structurels, contextuels et statistiques. Une interface graphique basique de visualisation est proposée permettant de replacer dans leur contexte les similarités. Un service web (Tartan) permet de transmettre des projets, soumettre des travaux d'indexation et de recherche de similarité et récupérer leur résultat.

Plade est architecturé autour des modules suivants :

  • Complade (companion for Plade) qui propose une bibliothèque Java implantant les structures et algorithmes afférents couramment utilisés par Plade (graphes génériques et plus spécifiquement graphes de facteurs répétés, tables d'indexation, etc.).
  • Plade-core qui implante les primitives de définition et manipulation des représentations issues du code source et de modélisation et d'évaluation des correspondances.
  • Plade-parsers proposant des exemples de représentations concrètes de code source sous la forme d'arbres de syntaxe (augmentés par des graphes d'appel de fonctions) et de séquences de lexèmes pour les langages Java et C++. Ce module peut être étendu afin de supporter facilement de nouveaux langages.
  • Plade-fact qui s'emploie à fusionner des graphes d'appel de projets en graphe commun avec factorisation des portions de code en fonctions partagées (outlining permissif).
  • Plade-fingertree qui se préoccupe des problématiques d'indexation adaptative et parcimonieuse des représentations (séquences et arbres) à plusieurs échelles et à l'aide de plusieurs niveaux d'abstraction.
  • Plade-cons qui s'intéresse à la consolidation de correspondances locales en macro-similarités.
  • Plade-gui qui propose une interface graphique Swing de visualisation et évaluation de jeux de correspondances.

Ces différents modules principalement développés en Java sont organisés autour de modules d'interfaçage en Python (Pyplade) permettant la réalisation rapide de scripts afin d'assurer l'indexation de code et la recherche de similarité en combinant les différentes approches proposées. Une implantation de service web (Tartan) reposant sur la plate-forme Plade est également en cours de développement.

Plade est encore actuellement en phase de développement interne ; une version sous licence libre Affero GPL sera prochainement accessible en ligne.

Contexte d’utilisation du logiciel

Plade a été initié pendant la thèse de doctorat de l'auteur, et a été principalement testé en interne pour retrouver des similarités sur du code source issu de projets soumis par des étudiants.

Publications liées au logiciel