PasClair

C'est pas clair

Fonctionnalités générales

Brouille l'écran

Domaine

Thématique

Mot clé libre

Type de la ressource

Méthode d'accès des clients

Non Applicable

Méthode d'authentification des clients

Aucune

Cycle de vie du projet

Non Applicable

Date de début du projet

Etablissement du Référent

UM

Unité du référent

LIRMM

Plade

Plate-forme de recherche de similarité sur du code source

Fonctionnalités générales

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 :

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).

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.

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.

Domaine

Thématique

Mot clé

Mot clé libre

Type de la ressource

Méthode d'accès des clients

Non Applicable

Méthode d'authentification des clients

Aucune

Cycle de vie du projet

Non Applicable

Date de début du projet

Etablissement du Référent

UM

Unité du référent

LIRMM

Doxygen

Doxygen est un système de génération de documentation à partir du code source

Fonctionnalités générales

Doxygen permet de créer des documentations à partir du code source sous différents formats qui vont du site web très interactif au document pdf (mais aussi LaTeX, XML, RTF, Man pages, ...).
La documentation est générée à partir de la syntaxe et de la grammaire du langage (classe, fonctions, ...) et peut être complétée par des informations (balises) insérées sous forme de commentaires interprétables par Doxygen (ex : /** ..**/)
Il accepte, entre autres, comme source les langages C++, C, Objective-C, C#, PHP, Java, Python, IDL, Fortran, VHDL, Tcl et peut-être étendu à d'autres langages non supportés nativement.

Domaine

Thématique

Mot clé

Mot clé libre

Type de la ressource

Méthode d'accès des clients

Non Applicable

Méthode d'authentification des clients

Aucune

Cycle de vie du projet

Non Applicable

Date de début du projet

Etablissement du Référent

UM

Unité du référent

LIRMM

Emacs

Editeur de texte

Fonctionnalités générales

Emacs est un éditeur de texte multiplateforme qui permet de créer, d'éditer et de traiter presque tous types de documents texte au travers de très nombreux modes d'édition : développement dans plusieurs langages (coloration syntaxique, édition dirigée par la syntaxe en C, Perl, Python, HTML, SGML, XML, TeX/LaTeX et des dizaines d'autres), mais aussi le shell (et ses commandes), la lecture/écriture de mail/news, agenda, voire navigation web. Il a une très longue histoire (premières versions vers 1985). Il en existe même plusieurs déclinaisons, les principales étant gnuemacs et XEmacs.

Il est conçu à partir d'un interpréteur Lisp (elisp pour Emacs LISP) qui lui permet d'être très facilement programmable donc :

d'être facilement paramétrable et donc personnalisable (le fichier de configuration étant un simple fichier texte) ;
de pouvoir réaliser des tâches complexes en mode non interactif ;
d'enregistrer puis d'automatiser des traitements répétitifs (macros).

Comme son concurrent direct Vim, il possède les fonctions habituelles d'un éditeur de texte comme :

multi-fenêtrage, multi-fichiers ;
auto-complétion et auto-indentation ;
comparaison visuelle de 2 fichiers ;
coloration syntaxique ;
replis de portion de texte ;
recherche et substitution de texte par expressions régulières ;
possibilité de définir des abréviations ;
système de plugins ;
fonction défaire/refaire multi-niveau ;
correction orthographique.

Bien qu'ayant des objectifs multiples, il ne peut être utilisé comme traitement de texte WYSIWYG, mais il contient de nombreux outils permettant de réaliser de l'édition de texte sophistiquée (qui ont été ensuite inclus dans d'autres outils) comme par exemple :

Le "chercher/remplacer" par expressions rationnelles (query-replace-regexp ) ;
Le "chercher/remplacer" dans une multitude de fichiers (tags-query-replace) ;
La "sélection rectangulaire" (kill-rectangle) ;
La lecture de courrier électronique (gnus ou rmail) ;
L'édition de fichiers à distance via un protocole réseau (ftp, ssh, etc via le mode tramp ou ange-ftp) ;
Il permet de faire le lien entre un débogueur (gdb) et le code source (C ou C++) en cours d'édition.

Domaine

Mot clé

Type de la ressource

Méthode d'accès des clients

Non Applicable

Méthode d'authentification des clients

Aucune

Cycle de vie du projet

Non Applicable

Date de début du projet

Etablissement du Référent

UM

Unité du référent

LIRMM