¿Cómo detecta MOSS (Measure Of Software Similarity), Stanford el plagio?

MOSS permite comprobar de forma objetiva y automática todas las soluciones de los programas en busca de evidencias de copia. MOSS trabaja con programas
escritos en C, C++, Java, Pascal, Ada y otros lenguajes y busca estructuras de código similares en diferentes documentos. Cuando alguien cambia el nombre de la variable o intenta introducir espacios en blanco, algún código aleatorio para engañarlo, normalmente no funciona a su favor ya que la estructura del programa no cambia, mientras que el número de coincidencias de tokens y líneas entre los documentos sigue siendo el mismo.

Una salida típica del servidor MOSS vista por el instructor es la siguiente:

main-qimg-014005b1d81a14a2d8fe79e63feeb4fe

Como se puede ver en la salida anterior, cada documento de los estudiantes se compara con cada uno de los otros documentos y se devuelve el número de coincidencias de tokens, coincidencias de líneas y el porcentaje en el que el MOSS piensa que ha habido plagio. La detección real del plagio en las tareas del programa se hace relativamente indolora y sencilla utilizando el MOSS. Una vez instalado el script de MOSS, la detección de plagio es sólo cuestión de que el profesorado invoque un comando de una línea, espere un breve tiempo para recibir un correo electrónico del servidor de MOSS y, a continuación, navegue por una página web que tiene
codificadas en color las secciones correspondientes en los pares de programas sospechosos.
Muchas veces los estudiantes tienen que implementar un algoritmo particular, en esos casos la estructura está destinada a ser similar en esos casos. ¡El instructor puede establecer un porcentaje de umbral más alto en estas circunstancias para detectar el caso de plagio.
Aunque Moss es eficiente en comparación con la mayoría de los otros sistemas, puede romperse con el cambio en la estructura del código, ya que hay varias maneras de escribir la misma lógica.

Por ejemplo
1)
si (A)
// Haz X
si
/ /Haz Y
también se puede escribir como

si (!A)
// Hacer Y
sólo
// Hacer X

2)
for (int i=0; i{
}
se puede escribir como
i=0;
while (i{
i++;
}

Pero si la estructura es drásticamente diferente, entonces llegamos a la zona gris de la toma de decisiones en cuanto a si el código puede considerarse realmente como plagiado de la web o no.

PS: No animo a ningún tipo de plagio, esta respuesta es sólo con fines informativos.
Sólo trabaja duro en tu propio código y cree en tus habilidades, terminarás creando maravillas.

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