
Ce billet présente un logiciel détecteur de fraude. Ce programme à été réalisé avec des étudiants (voir ici
le premier billet décrivant le projet). Le type de fraude dont on parle est une fraude typique des TP d'informatique ou de TDAO (Travaux Dirigé Assisté par Ordinateur, en math' par exemple), en un mot : toute activité dont le résultat est un fichier informatique utilisé par un programme. La fraude consiste à copier le travail d'un autre étudiant et de le "maquiller" (faire des éditions qui changent l'allure du programme mais pas son fonctionnement.)
le "
challenge Loki" vous propose d'essayer de défier Baldr...
Voyez ici
la vidéo d'une présentation d'introduction à la problématique du plagiat de code et à Baldr en particulier.
En voici les étapes clés :
- le chargement des fichiers à analyser
- lancement de l'analyse
- affichage de l'histogramme des distances calculées entre les fichiers
- repérage d'un "pic" de distance faible sur l'histogramme
- recherche dans la matrice de distance du couple de fichiers donnant lieu au pic de faible distance (c'est à dire la case la plus rouge)
- ouverture de Kompare pour confirmer la fraude.
Pourquoi ce type d'activité pédagogique est-il sujet à fraude ?
- La fraude est alors une action « simple et apparemment anodine » : il suffit de reprendre le fichier d'un camarade, et éventuellement de le modifier un minimum pour que la ressemblance ne soit pas trop flagrante...
- L'évaluation du travail ne passe pas forcément par une lecture humaine du fichier. C'est souvent via un programme que le travail effectué est évalué. Les étudiants pensent alors avoir moins de chance de se faire attraper. Exemples :
- Les programmes via des langages classiques : C, java, etc...
- Les fichiers d'outils comme matlab, scilab, ou mathematica.
- Les tables de base de données.
- ...
Tous les travaux de ce type seront évalués en les utilisant mais sans forcément lire le contenu. Ainsi, si l'apparence (ce que l'on voit quand on utilise le fichier) est changée on peut ne pas détecter une fraude lors de la correction. D'ailleurs même si on lit les fichiers pour regarder en détail le travail effectué, il est très difficile de se souvenir du cinquième fichier traité et être capable de voir qu'il ressemble au 27 ième surtout si les fraudeur auront tout fait pour le rendre apparemment différent.
Pourquoi est-ce qu'on peut détecter ces fraudes ?
Tout d'abord par ce que ceux qui cherchent à frauder sont en général mauvais, sinon ils n'auraient que peu de raisons de le faire... Cela implique que les modifications que les fraudeurs vont apporter au fichier copié sont relativement simples, car sinon il y a le risque que le fichier ne « fonctionne » plus (typiquement le programme rendu ne compilera plus ou bien « plante » à l'exécution) . Même si ces modifications sont visuellement efficaces pour masquer la copie, le fond, le sens, lui reste le même, et par chance c'est typiquement ce que la distance informationnelle mesure.
Pour une description de la technique de mesure de distance informationnelle, je vous conseille de lire cet
article. Il est très bien écrit et tout à fait abordable, c'est cet article qui m'a donné l'idée de ce projet. Mieux encore, lisez ce
livre de Jean-Paul Delahaye sur la notion de complexité, il est tout simplement génial.
Pour affiner les système on peut même imaginer comparer les fichier exécutable (au lieu des sources) pour être encore plus indépendant des commentaires, noms de variables , et bel et bien comparer les algorithmes...
Ce que le logiciel fait, et ce qu'il ne fait pas
Ce que le logiciel fait
Il mesure la similarité entre les fichiers rendus. Pour cela il faut d'abord spécifier la liste des fichiers à analyser, cela se fait en cliquant sur le bouton « + » dans la partie gauche de l'interface.
Une fois les document sélectionnés, cliquez sur le symbole ∑ pour lancer l'analyse ...
La barre de progression s'anime alors, une fois l'analyse terminée un histogramme est affiché:
Cet histogramme est calculé pour donner une idée de la distribution des distances entre les fichiers. L'axe X représente toutes les distances possibles. L'axe Y représente le nombre de paires de fichiers ayant cette distance. Le « slider » en dessous permet de modifier le nombre de classes de l'histogramme (= la largeur des barres).
Note : la distance utilisée est comprise entre 0 et 1, 0 signifie que c'est les mêmes fichiers, 1 qu'il sont totalement différents.
L'histogramme permet de rapidement se faire une idée sur la distance moyenne entre les fichiers, ce qui est un paramètre important dans la mesure où un niveau de similarité « minimal » est inévitable dans la mesure où :
- Tous ces fichiers visent le même objectif (tous les étudiants avaient le même sujet)
- Ils ont appris avec le même professeur et se sont potentiellement entraidé
- Le sujet comporte peut-être un fichier de base servant comme point de départ (c'est le cas sur l'exemple utilisé ici). Ainsi
Sur cet exemple la distance la plus probable entre 2 fichiers est environ de 0.75, ce qui est différent de 1 donc les fichiers se ressemblent tous un petit peu, ce qui est normal au vu du contexte. Par contre on remarque un pic vers la distance 0.46 qui lui semble relativement éloigné du reste de la distribution (il est fort probable qu'il s'agisse d'une fraude)...
Lors de la création de l'histogramme une matrice de distance a aussi été affichée :
Les lignes et le colonnes représentent les fichiers, donc chaque case correspond à une comparaison de deux fichiers. Plus la case est verte plus les fichiers sont éloignés, plus la case est rouge plus les fichiers sont proches. La valeur à l'intérieur de chaque case est la distance multiplié par 10 (donc une valeur entre 0 et 10), il s'agit la simplement de rendre les valeur plus facile à lire.
Note la zone de texte au dessus de la matrice est une zone ou vous pouvez prendre des notes, notes qui seront bien sûr sauvegardées au moment ou vous sauvegarderez le résultat de votre analyse.
On va donc naturellement commencer notre recherche par les cases rouges (celle qui correspondent aux similarités les plus fortes.) Vous pouvez choisir l'applicatif de comparaison qui est automatiquement lancé lors d'un double clic sur une case de la matrice. Cela ce fait via le menu « options » -> « préférences ». Deux applicatifs sont demandés : celui à utiliser lors d'un double clic sur la liste de fichier et celui correspondant au double clic sur une case de la matrice. Dans la mesure ou il s'agit ici de fichiers de code j'ai donc configuré Baldr de manière à ce qu'il lance
Kompare (un comparateur de code) lors d'un double clic sur la matrice.
Voilà le résultat de la comparaison de code (avec Kompare) correspondant à la case entourée sur l'image précédente.
Il ne faut pas bien longtemps pour constater que la similarité, ici , correspond bien à une fraude...
Vous avez probablement noté la présence d'un bouton, près de la matrice permettant de passer d'une vue « globale à « locale ». La vue « locale » est la plus adaptée pour détecter la fraude. La vue « globale » elle est plus adaptée pour analyser la globalité des fichiers. Elle permet, entre autre de faire ressortir les fichiers qui sont le plus éloignés des autres. Dans l'image ci-dessous il s'agit des quatre ou cinq dernière colonnes qui sont manifestement plus verte que les autres... Il se trouve que ce sont les 4 meilleurs notes du TP. C'est aussi ceux qui, en général, ont les meilleures notes sur le cours théorique correspondant à ce TP !
Cet outil peut donc permettre à la fois de découvrir de la fraude mais aussi de faire ressortir l' « exceptionnel ».
Note : la case rouge correspond à la fraude précédemment découverte, comme souvent les fraudeurs demandent leur code à de très bons étudiants, qui justement codent différemment des autres, ce qui rend la fraude encore plus facile à repérer...
Conclusion : en 5minutes on a identifié une fraude et cinq travaux exceptionnels sur une liste de 30 fichiers. Si on mettait une minute pour comparer « à la main » deux fichiers (il faut clairement bien plus) il faudrait alors environ 7 heure et demi pour faire l'analyse complète !
Ce que le logiciel ne fait pas
Évidement ce système n'a pas pour but d'être parfait, et il ne le sera certainement jamais. L'objectif est de rendre l'acte de fraude suffisement compliqué et dangereux pour qu'il ne vaille pas la peine d'être tenté. Grâce à ce système on détecte plus de fraude, cela devient donc naturellement plus dangereux de frauder. C'est plus compliqué aussi car les opérations de masquage de base sont très facilement identifiées. Pour espérer passer au travers du système il faut mettre en place des stratégies bien plus compliquées que la difficultés des TP demandés.
Il est à noter que ce système ne fait que donner des indications. La détection de fraude est au final faite par l'utilisateur. Le système ne fait que porter à l'utilisateur les couples de fichier ayant une ressemblance « étrange »... Cela veux dire que les résultats doivent être interprété dans leur contexte. C'est en particulier le cas, si un fichier de base ,commun à tous les rendu de projet, est donné pour le TP... Bien sûr le programme aidera à identifier les paires de fichiers « trop » similaires mais ne dira pas quel fichier est le fichier original...
En pratique, ces deux points que ne traite pas le logiciels :
- s'agit-il vraiment d'une fraude ?
- qui à fraudé sur qui ?
sont généralement les plus simples à élucider par l'expertise du professeur, à la fois sur la matière enseignée, et sur les étudiants encadrés...
Attention :
- Baldr ne recherche que les similarité à l'intérieur d'un groupe de fichier. Le plagiat via internet ne sera pas détecté (sauf si il sont plusieurs à prendre la même source).
- La méthode utilisant la notion de compression de donnés, elle ne marchera probablement pas sur tout type de fichier utilisant (directement ou non) des données (déjà) compressées.
- En cas de rendu composé de plusieurs fichiers, une simple concaténation des fichiers provenant d'un même projet étudiant, permet de faire l'analyse comme si il s'agissait d'un seul fichier.
Téléchargement
Le logiciel est disponible gratuitement en téléchargement sur
sourceforge.