Vous êtes ici : FIL > Portail > Master Informatique > M1S1 > PJE1

PJE A - analyse de plagiat

L'objectif du PJE est de développer un logiciel, en équipe, en utilisant des outils de travail collaboratif. Dans le cadre du PJE "analyse de plagiat", le logiciel développé a pour but de mesurer la ressemblance entre deux codes. Soulignons que les méthodes mises en œuvre dans ce type d'outil ne servent pas uniquement pour détecter la triche entre étudiants mais peut avoir des utilisations dans l'étude de l'évolution des codes. Le développement d'un logiciel pour traiter ce problème sera l'occasion de découvrir des méthodes de traitement du texte.

Compétences acquises

  • travail collaboratif
  • gestion de projet
  • utilisation d'API

Connaissances acquises

  • analyse de texte
  • algorithmes de recherche de mots dans un texte
  • algorithmes de comparaison de texte

Mode de travail

Le projet est développé en groupes de 4 ou 5 étudiants. Chaque groupe développe sous un dépôt GIT. L'évaluation en cours de projet et de la version finale se fera par clone à une heure donnée (voir planning sur le portail). Les séances de cours/TD servent à mener une réflexion sur les développements algorithmiques du projet. Des notions sont apportées par les enseignants sans nécessairement expliciter comment elles peuvent être utilisées dans le projet. A chaque début de séance de TP, chaque groupe fait le point avec l'enseignant en quelques minutes, en présentant les réussites, les difficultés rencontrées et la répartition du travail pour la semaine à venir. Une évaluation publique des développements effectués est également présentée à chaque début de séance.

Responsables

  • Mikaël Salson
  • Jean-Stéphane Varré

Volume horaire

3h30 de TD/TP par semaine sur 10 semaines

Crédits

5 ECTS

Ce planning est donné à titre indicatif.

Séance Cours Travail préparatoire TP Remarque
du 10/09 au 15/09 festival MIX CITE jeudi 13 septembre
1 du 17/09 au 22/09 Présentation du sujet et première réflexions. Outils de développement. Lire les chapitres du livre ProGit indiqués dans l'onglets Documents. Effectuez le petit tutoriel de découverte de Git dont le lien est fourni dans l'onglet Documents. TP sur Git
Exemple de codes à comparer
2 du 24/09 au 29/09 Lexémisation Rappels sur l'analyse lexicale et syntaxique. Voir comment mettre en place un projet Maven (cf portail L3-COO) TP sur la lexémisation. Premier outil naïf de mesure de la similarité entre deux codes source.
3 du 01/10 au 06/10 Q-gram. Fingerprint. Karp-Rabin. Mise en oeuvre d'un premier outil utilisant les Q-gram. Livrable 1 pour le jeudi 4/10, 9h.
4 du 08/10 au 13/10 Distance de Levenshtein. Alignement local.
5 du 15/10 au 20/10 Suffix tree. Suffix array. Mise en oeuvre d'une troisième version s'inspirant des méthodes vues en cours. Livrable 2 pour le jeudi 18/10, 9h.
du 22/10 au 26/10 pas de séance pour cause de JMI ? Livrable 3 pour le vendredi 26/10, 19h.
du 29/10 au 03/11 interruption pédagogique automne
6 du 5/11 au 10/11 Mesures de similarité.
7 du 12/11 au 17/11 Présentation des stratégies des différentes équipes. Extension à l'analyse d'un ensemble de travaux. Livrable 4 pour le jeudi 15/11, 9h.
8 du 19/11 au 24/11 Représentation graphique.
9 du 26/11 au 01/12 Un peu de clustering. Livrable 5 pour le jeudi 30/11, 9h
10 du 03/12 au 08/12 Livrable 6 pour le jeudi 7/12, 9h
11 du 12/12 au 16/12 pas de séance

Soutenances

Vous aborderez notamment (dans l'ordre que vous souhaitez) les points suivants :
  • description de la méthode implantée
  • justification des choix réalisés : paramètres, méthodes retenues, … mesures à l'appui
  • explication du contenu du rapport HTML fourni à l’utilisateur
  • explication de la méthodologie de travail du groupe
  • conception logicielle
Livrable 7 pour le jeudi 15/12, 9h.
15 du 18/12 au 22/12

Résultats

Description des benchmarks

  1. exemple 0
  2. exemple 1 : modification de noms de variables, ajout de commentaires, réorganisation de lignes de code
  3. exemple 2 : variations autour de la structure d'une classe, méthodes dans des ordres différents mais le contenu reste identique
  4. exemple 3 : une interface et des classes implémentants celle-ci, différentes implémentations provenant de TP étudiants
  5. exemple 4 : une classe, différentes implémentations provenant d'un TP étudiant, mais sans ressemblance évidente entre les différentes implantations
  6. exemple 5 : proposé par l'équipe Wallaby en 2016/2017
  7. exemple 6 : proposé par l'équipe Wallaby en 2016/2017
  8. exemple 7 : proposé par l'équipe VEMP (deux gros fichiers) en 2016/2017
  9. exemple 8 : toutes les classes d'un projet étudiant
  10. exemple 9 : toutes les classes d'un projet étudiant

Evolution des commits par équipe (maj le 6/12/2018)

Evolution des commits par équipe

Evolution du nombre de merge requests

Evolution du nombre de merge requests width=

Evolution de la couverture de code

Evolution de la couverture de code

Livrables

  1. Livrable 1
  2. Livrable 2
  3. Livrable 3
  4. Livrable 4
  5. Livrable 5
  6. Livrable 6

TEAM Inglorious Basterds

**** Version v1.0 ****
**** Compiling package ****
**** Launching benchmarks ****
**** Running exemple0 ****
**** Running exemple0_17-18 ****
**** Running exemple0_18-19 ****
**** Running exemple1 ****
**** Running exemple2 ****
**** Running exemple3 ****
**** Running exemple4 ****

TEAM PlagiatChecker

**** Version v1.0 **** **** Compiling package **** **** Creating JAR **** **** Launching benchmarks **** **** Running exemple0 **** **** Running exemple0_17-18 **** **** Running exemple0_18-19 **** **** Running exemple1 **** **** Running exemple2 **** **** Running exemple3 **** **** Running exemple4 ****

TEAM PSG

**** Version v1.0 ****
**** Compiling package ****
**** Launching tests ****
**** Creating JAR ****
**** Launching benchmarks ****
**** Running exemple0 ****
aucun attribut manifest principal dans target/yapt-v1.0.jar
exemple0 Inglorious Basterds PlagiatChecker secrettool
exemple0_17-18 Inglorious Basterds PlagiatChecker secrettool
exemple0_18-19 Inglorious Basterds PlagiatChecker secrettool
exemple1 Inglorious Basterds PlagiatChecker secrettool
exemple2 Inglorious Basterds PlagiatChecker secrettool
exemple3 Inglorious Basterds PlagiatChecker secrettool
exemple4 Inglorious Basterds PlagiatChecker secrettool

TEAM Inglorious Basterds

**** Version v2.0 ****
**** Compiling package ****
**** Launching tests ****
**** Creating JAR ****
**** Launching benchmarks ****
**** Running exemple0 ****
Error: Unable to access jarfile target/yapt-v2.0.jar
**** Running exemple0_17-18 ****
Error: Unable to access jarfile target/yapt-v2.0.jar
**** Running exemple0_18-19 ****
Error: Unable to access jarfile target/yapt-v2.0.jar
**** Running exemple1 ****
Error: Unable to access jarfile target/yapt-v2.0.jar
**** Running exemple2 ****
Error: Unable to access jarfile target/yapt-v2.0.jar
**** Running exemple3 ****
Error: Unable to access jarfile target/yapt-v2.0.jar
**** Running exemple4 ****
Error: Unable to access jarfile target/yapt-v2.0.jar

TEAM PlagiatChecker

**** Version v2.0 ****
**** Compiling package ****
**** Launching tests ****
**** Launching benchmarks ****
**** Running exemple0 ****
WARNING: Percentages should be between 0% and 100%
**** Running exemple0_17-18 ****
WARNING: Percentages should be between 0% and 100%
**** Running exemple0_18-19 ****
WARNING: Percentages should be between 0% and 100%
**** Running exemple1 ****
**** Running exemple2 ****
WARNING: Percentages should be between 0% and 100%
**** Running exemple3 ****
WARNING: Percentages should be between 0% and 100%
**** Running exemple4 ****
WARNING: Percentages should be between 0% and 100%

TEAM PSG

**** Version v2.0 ****
**** Compiling package ****
**** Launching tests ****
**** Creating JAR ****
**** Launching benchmarks ****
**** Running exemple0 ****
**** Running exemple0_17-18 ****
**** Running exemple0_18-19 ****
**** Running exemple1 ****
**** Running exemple2 ****
**** Running exemple3 ****
**** Running exemple4 ****
exemple0 PSG secrettool
exemple0_17-18 PSG secrettool
exemple0_18-19 PSG secrettool
exemple1 PlagiatChecker PSG secrettool
exemple2 PSG secrettool
exemple3 PSG secrettool
exemple4 PSG secrettool

TEAM Inglorious Basterds

**** Version v3.0 ****
**** Compiling package ****
**** Launching tests ****
**** Creating JAR ****
**** Launching benchmarks ****
**** Running exemple0 ****
**** Running exemple0_17-18 ****
**** Running exemple0_18-19 ****
**** Running exemple1 ****
**** Running exemple2 ****
**** Running exemple3 ****
**** Running exemple4 ****
**** Running exemple5 ****
**** Running exemple6 ****
**** Running exemple7 ****
**** Running exemple8 ****
Exception in thread "main" java.lang.IllegalArgumentException: wSize has to be between 1 and the list length
        at pje.kmer.Winnower.transform(Winnower.java:23)
        at pje.comparator.Comparator.lambda$compare$1(Comparator.java:45)
        at pje.kmer.Kmerisator_Abstract.transform(Kmerisator_Abstract.java:69)
        at pje.kmer.Kmerisator_Abstract.hashCodes(Kmerisator_Abstract.java:62)
        at pje.comparator.Comparator.compare(Comparator.java:45)
        at pje.App.main(App.java:19)
**** Running exemple9 ****

TEAM PlagiatChecker

**** Version v3.0 ****
**** Compiling package ****
**** Launching tests ****
**** Creating JAR ****
**** Launching benchmarks ****
**** Running exemple0 ****
Error: Unable to access jarfile target/yapt-v3.0.jar
**** Running exemple0_17-18 ****
Error: Unable to access jarfile target/yapt-v3.0.jar
**** Running exemple0_18-19 ****
Error: Unable to access jarfile target/yapt-v3.0.jar
**** Running exemple1 ****
Error: Unable to access jarfile target/yapt-v3.0.jar
**** Running exemple2 ****
Error: Unable to access jarfile target/yapt-v3.0.jar
**** Running exemple3 ****
Error: Unable to access jarfile target/yapt-v3.0.jar
**** Running exemple4 ****
Error: Unable to access jarfile target/yapt-v3.0.jar
**** Running exemple5 ****
Error: Unable to access jarfile target/yapt-v3.0.jar
**** Running exemple6 ****
Error: Unable to access jarfile target/yapt-v3.0.jar
**** Running exemple7 ****
Error: Unable to access jarfile target/yapt-v3.0.jar
**** Running exemple8 ****
Error: Unable to access jarfile target/yapt-v3.0.jar
**** Running exemple9 ****
Error: Unable to access jarfile target/yapt-v3.0.jar

TEAM PSG

**** Version v3.0 ****
**** Compiling package ****
**** Launching tests ****
**** Creating JAR ****
**** Launching benchmarks ****
**** Running exemple0 ****
**** Running exemple0_17-18 ****
**** Running exemple0_18-19 ****
**** Running exemple1 ****
**** Running exemple2 ****
**** Running exemple3 ****
**** Running exemple4 ****
**** Running exemple5 ****
**** Running exemple6 ****
**** Running exemple7 ****
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
        at fil.pje.comparator.LevenshteinGlobalComparator.distanceGlobal(LevenshteinGlobalComparator.java:32)
        at fil.pje.comparator.LevenshteinGlobalComparator.compare(LevenshteinGlobalComparator.java:24)
        at fil.pje.comparator.LevenshteinGlobalComparator.compare(LevenshteinGlobalComparator.java:9)
        at fil.pje.Main4.main(Main4.java:52)
**** Running exemple8 ****
**** Running exemple9 ****
exemple0 Inglorious Basterds PSG secrettool
exemple0_17-18 Inglorious Basterds PSG secrettool
exemple0_18-19 Inglorious Basterds PSG secrettool
exemple1 Inglorious Basterds PSG secrettool
exemple2 Inglorious Basterds PSG secrettool
exemple3 Inglorious Basterds PSG secrettool
exemple4 Inglorious Basterds PSG secrettool
exemple5 Inglorious Basterds PSG secrettool
exemple6 Inglorious Basterds PSG secrettool
exemple7 Inglorious Basterds secrettool
exemple8 PSG secrettool
exemple9 Inglorious Basterds PSG secrettool

TEAM Inglorious Basterds

**** Version v4.0 ****
**** Compiling package ****
**** Launching tests ****
**** Creating JAR ****
**** Launching benchmarks ****
**** Running exemple0 ****
**** Running exemple0_17-18 ****
**** Running exemple0_18-19 ****
**** Running exemple1 ****
**** Running exemple2 ****
**** Running exemple3 ****
**** Running exemple4 ****
**** Running exemple5 ****
**** Running exemple6 ****
**** Running exemple7 ****
**** Running exemple8 ****
**** Running exemple9 ****

TEAM PlagiatChecker

**** Version v4.0 ****
**** Compiling package ****
**** Launching tests ****
**** Creating JAR ****
**** Launching benchmarks ****
**** Running exemple0 ****
**** Running exemple0_17-18 ****
**** Running exemple0_18-19 ****
**** Running exemple1 ****
**** Running exemple2 ****
**** Running exemple3 ****
**** Running exemple4 ****
**** Running exemple5 ****
**** Running exemple6 ****
**** Running exemple7 ****
**** Running exemple8 ****
**** Running exemple9 ****

TEAM PSG

**** TEAM PSG ****
**** Version v4.0 ****
**** Compiling package ****
**** Launching tests ****
**** Creating JAR ****
**** Launching benchmarks ****
**** Running exemple0 ****
**** Running exemple0_17-18 ****
**** Running exemple0_18-19 ****
**** Running exemple1 ****
**** Running exemple2 ****
**** Running exemple3 ****
**** Running exemple4 ****
**** Running exemple5 ****
**** Running exemple6 ****
**** Running exemple7 ****
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
        at fil.pje.comparator.LevenshteinGlobalComparator.distanceGlobal(LevenshteinGlobalComparator.java:32)
        at fil.pje.comparator.LevenshteinGlobalComparator.compare(LevenshteinGlobalComparator.java:24)
        at fil.pje.comparator.LevenshteinGlobalComparator.compare(LevenshteinGlobalComparator.java:9)
        at fil.pje.Main4.main(Main4.java:52)
**** Running exemple8 ****
**** Running exemple9 ****
exemple0 Inglorious Basterds PlagiatChecker PSG secrettool
exemple0_17-18 Inglorious Basterds PlagiatChecker PSG secrettool
exemple0_18-19 Inglorious Basterds PlagiatChecker PSG secrettool
exemple1 Inglorious Basterds PlagiatChecker PSG secrettool
exemple2 Inglorious Basterds PlagiatChecker PSG secrettool
exemple3 Inglorious Basterds PlagiatChecker PSG secrettool
exemple4 Inglorious Basterds PlagiatChecker PSG secrettool
exemple5 Inglorious Basterds PlagiatChecker PSG secrettool
exemple6 Inglorious Basterds PlagiatChecker PSG secrettool
exemple7 Inglorious Basterds PlagiatChecker secrettool
exemple8 Inglorious Basterds PlagiatChecker PSG secrettool
exemple9 Inglorious Basterds PlagiatChecker PSG secrettool

TEAM Inglorious Basterds

**** Version v5.0 ****
**** Compiling package ****
**** Launching tests ****
**** Creating JAR ****
**** Launching benchmarks ****
**** Running exemple0 ****
**** Running exemple0_17-18 ****
**** Running exemple0_18-19 ****
**** Running exemple1 ****
**** Running exemple2 ****
**** Running exemple3 ****
**** Running exemple4 ****
**** Running exemple5 ****
**** Running exemple6 ****
**** Running exemple7 ****
**** Running exemple8 ****
**** Running exemple9 ****

TEAM PlagiatChecker

**** Version v5.0 ****
**** Compiling package ****
**** Launching tests ****
**** Creating JAR ****
**** Launching benchmarks ****
**** Running exemple0 ****
**** Running exemple0_17-18 ****
**** Running exemple0_18-19 ****
**** Running exemple1 ****
**** Running exemple2 ****
**** Running exemple3 ****
**** Running exemple4 ****
**** Running exemple5 ****
**** Running exemple6 ****
**** Running exemple7 ****
**** Running exemple8 ****
**** Running exemple9 ****

TEAM PSG

**** Version v5.0 ****
**** Compiling package ****
**** Launching tests ****
**** Creating JAR ****
**** Launching benchmarks ****
**** Running exemple0 ****
**** Running exemple0_17-18 ****
**** Running exemple0_18-19 ****
**** Running exemple1 ****
**** Running exemple2 ****
**** Running exemple3 ****
**** Running exemple4 ****
**** Running exemple5 ****
**** Running exemple6 ****
**** Running exemple7 ****
**** Running exemple8 ****
WARNING: Percentages should be between 0% and 100%
**** Running exemple9 ****
exemple0 Inglorious Basterds PlagiatChecker PSG secrettool
exemple0_17-18 Inglorious Basterds PlagiatChecker PSG secrettool
exemple0_18-19 Inglorious Basterds PlagiatChecker PSG secrettool
exemple1 Inglorious Basterds PlagiatChecker PSG secrettool
exemple2 Inglorious Basterds PlagiatChecker PSG secrettool
exemple3 Inglorious Basterds PlagiatChecker PSG secrettool
exemple4 Inglorious Basterds PlagiatChecker PSG secrettool
exemple5 Inglorious Basterds PlagiatChecker PSG secrettool
exemple6 Inglorious Basterds PlagiatChecker PSG secrettool
exemple7 Inglorious Basterds PlagiatChecker PSG secrettool
exemple8 Inglorious Basterds PlagiatChecker secrettool
exemple9 Inglorious Basterds PlagiatChecker PSG secrettool

TEAM Inglorious Basterds

**** Version v6.0 ****
**** Compiling package ****
**** Launching tests ****
**** Creating JAR ****
**** Launching benchmarks ****
**** Running exemple0 ****
**** Running exemple0_17-18 ****
**** Running exemple0_18-19 ****
**** Running exemple1 ****
**** Running exemple2 ****
**** Running exemple3 ****
**** Running exemple4 ****
**** Running exemple5 ****
**** Running exemple6 ****
**** Running exemple7 ****
**** Running exemple8 ****
**** Running exemple9 ****

TEAM PlagiatChecker

**** Version v6.0 ****
**** Compiling package ****
**** Launching tests ****
**** Creating JAR ****
**** Launching benchmarks ****
**** Running exemple0 ****
**** Running exemple0_17-18 ****
**** Running exemple0_18-19 ****
**** Running exemple1 ****
**** Running exemple2 ****
**** Running exemple3 ****
**** Running exemple4 ****
**** Running exemple5 ****
**** Running exemple6 ****
**** Running exemple7 ****
**** Running exemple8 ****
**** Running exemple9 ****

TEAM PSG

**** Version v6.0 ****
**** Compiling package ****
**** Launching tests ****
**** Creating JAR ****
**** Launching benchmarks ****
**** Running exemple0 ****
**** Running exemple0_17-18 ****
**** Running exemple0_18-19 ****
**** Running exemple1 ****
**** Running exemple2 ****
**** Running exemple3 ****
**** Running exemple4 ****
**** Running exemple5 ****
**** Running exemple6 ****
**** Running exemple7 ****
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
        at fil.pje.comparator.LevenshteinGlobalComparator.distanceGlobal(LevenshteinGlobalComparator.java:32)
        at fil.pje.comparator.LevenshteinGlobalComparator.compare(LevenshteinGlobalComparator.java:24)
        at fil.pje.comparator.LevenshteinGlobalComparator.compare(LevenshteinGlobalComparator.java:9)
        at fil.pje.Main_Levenshtein_NComparator.main(Main_Levenshtein_NComparator.java:90)
**** Running exemple8 ****
**** Running exemple9 ****
exemple0 Inglorious Basterds PlagiatChecker PSG secrettool
exemple0_17-18 Inglorious Basterds PlagiatChecker PSG secrettool
exemple0_18-19 Inglorious Basterds PlagiatChecker PSG secrettool
exemple1 Inglorious Basterds PlagiatChecker PSG secrettool
exemple2 Inglorious Basterds PlagiatChecker PSG secrettool
exemple3 Inglorious Basterds PlagiatChecker PSG secrettool
exemple4 Inglorious Basterds PlagiatChecker PSG secrettool
exemple5 Inglorious Basterds PlagiatChecker PSG secrettool
exemple6 Inglorious Basterds PlagiatChecker PSG secrettool
exemple7 Inglorious Basterds PlagiatChecker secrettool
exemple8 Inglorious Basterds PlagiatChecker PSG secrettool
exemple9 Inglorious Basterds PlagiatChecker PSG secrettool