Come fa MOSS (Measure Of Software Similarity), Stanford a rilevare il plagio?

MOSS rende possibile controllare oggettivamente e automaticamente tutte le soluzioni di programma per prove di copiatura. MOSS lavora con programmi scritti in C, C++, Java, Pascal, Ada e altri linguaggi e cerca una struttura di codice simile in documenti diversi. Quando qualcuno cambia il nome della variabile o cerca di introdurre spazi bianchi, qualche codice casuale per ingannarlo, tipicamente non funziona a loro favore, poiché la struttura del programma è invariata, mentre il numero di token e le corrispondenze di linea tra i documenti sono ancora le stesse.

Un tipico output del server MOSS visto dall'istruttore è il seguente:

main-qimg-014005b1d81a14a2d8fe79e63feeb4fe

Come potete vedere dall'output di cui sopra, ogni documento dello studente viene confrontato con ogni altro documento e viene restituito il numero di corrispondenze di token, di linee e la percentuale in cui il MOSS pensa si sia verificato il plagio. L'effettivo rilevamento del plagio sui compiti del programma è reso relativamente indolore e semplice utilizzando MOSS. Una volta che lo script MOSS è installato, il rilevamento del plagio è solo una questione di un membro della facoltà che invoca un comando di una riga, aspetta un breve tempo per una e-mail dal server MOSS, e poi naviga in una pagina web che ha
codificato in colore le sezioni corrispondenti in coppie di programmi sospetti.
Molte volte gli studenti devono implementare un algoritmo particolare, in quei casi la struttura è destinata ad essere simile in quei casi. L'istruttore può impostare una percentuale di soglia più alta in queste circostanze per rilevare il caso di plagio.
Anche se Moss è efficiente rispetto alla maggior parte degli altri sistemi, può essere rotto con il cambiamento della struttura del codice in quanto ci sono diversi modi di scrivere la stessa logica.

Per esempio
1)
if (A)
// Do X
else
/ /Do Y
può anche essere scritto come

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

2)
for (int i=0; i{
}
può essere scritto come
i=0;
while (i{
i++;
}

Ma se la struttura è drasticamente diversa, allora arriviamo nella zona grigia della decisione se il codice può davvero essere considerato come plagiato dal web o no.

PS: Non incoraggio alcun tipo di plagio, questa risposta è solo a scopo informativo.
Basta lavorare sodo sul proprio codice e credere nelle proprie capacità, si finirà per creare meraviglie.

Riferimenti: http://www3.nd.edu/~kwb/nsf-ufe/1110.pdf