Comment MOSS (Measure Of Software Similarity), Stanford détecte-t-il le plagiat ?


MOSS permet de vérifier objectivement et automatiquement toutes les solutions de programme
pour trouver des preuves de copie. MOSS fonctionne avec des programmes
écrits en C, C++, Java, Pascal, Ada et autres langages et recherche une structure de code similaire dans différents documents. Lorsque quelqu'un change le nom d'une variable ou essaie d'introduire des espaces blancs, un peu de code aléatoire pour le tromper, cela ne joue généralement pas en sa faveur car la structure du programme est inchangée, alors que le nombre de correspondances de jetons et de lignes entre les documents est toujours le même.


Une sortie typique du serveur MOSS vue par l'instructeur est la suivante:

main-qimg-014005b1d81a14a2d8fe79e63feeb4fe


Comme vous pouvez le voir dans la sortie ci-dessus, chaque document des étudiants est comparé à tous les autres documents et le nombre de correspondances entre les jetons, les lignes et le pourcentage auquel le MOSS pense qu'il y a plagiat est renvoyé. La détection effective du plagiat dans les travaux de programme est relativement simple et sans douleur grâce à MOSS. Une fois que le script MOSS est installé, la détection du plagiat est juste une question de membre de la faculté invoquant une commande d'une ligne, attendant un court moment pour un e-mail du serveur MOSS, et puis naviguant sur une page Web qui a
codé en couleur les sections correspondantes dans les paires de programmes suspects.
Bien des fois, les étudiants doivent mettre en œuvre un algorithme particulier, dans ces cas, la structure est forcément similaire dans ces cas. L'instructeur peut fixer un pourcentage seuil plus élevé dans ces circonstances pour détecter le cas de Plagiat.
Bien que Moss soit efficace par rapport à la plupart des autres systèmes, il peut être brisé avec un changement dans la structure du code car il existe plusieurs façons d'écrire la même logique.

Par exemple
1)
if (A)
// Do X
else
/ /Do Y
peut également être écrit comme

if ( !A)
// Do Y
else
// Do X

2)
for (int i=0 ; i{
}
peut être écrit comme
i=0;
while (i{
i++ ;
}

Mais si la structure est drastiquement différente, alors nous arrivons sur la zone grise de décision pour savoir si le code peut vraiment être considéré comme plagié du web ou non.

PS : Je n'encourage aucune sorte de plagiat, cette réponse n'a qu'un but informatif.
Travaillez dur sur votre propre code et croyez en vos compétences, vous finirez par créer des merveilles.

Références : http://www3.nd.edu/~kwb/nsf-ufe/1110.pdf