2012-06-06 9 views
14

Estoy buscando una herramienta que pueda comparar los códigos fuente de similitud.Detector de código similar

Tenemos un sistema muy trivial en este momento que tiene una gran cantidad de falsos positivos y los verdaderos positivos pueden enterrarse fácilmente en ellos.

Mis requisitos son:

  • razonablemente pequeña cantidad de falsos positivos
  • buena tasa de detección (sí estos van uno contra el otro)
  • a ser posible con una salida más complejo que un solo valor
  • utilizable para C (C99) y C++ (C++ 03 y óptimamente C++ 11)
  • todavía mantiene
  • utilizable para co mparing dos archivos fuente de uno contra el otro
  • utilizable en modo no interactivo

EDIT:

Para evitar confusiones, los siguientes dos fragmentos de código son idénticos y deben ser detectados como tales:

for (int i = 0; i < 10; i++) { bla; }

int i; while (i < 10) { bla; i++; }

Lo mismo aquí:

int x = 10; y = x + 5;

int a = 10; y = a + 5;

+1

¿La diferencia satisface algunas de sus necesidades? –

+1

@HighPerformanceMark LOL, no, no es así. –

+2

Parece como si quisiera una herramienta que compara la similitud semántica de 2 códigos, en lugar de la sintáctica. Sospecho que este es un problema sin resolver y que SO tendrá dificultades para encontrar una solución satisfactoria para usted. Creo que, tal como está escrito, su pregunta original engañará a muchos lectores al igual que me engañó. También creo que debería reescribirlo completamente para indicar claramente el tipo de comparación que le interesa. –

Respuesta

15

que he usado en el pasado MOSS: http://theory.stanford.edu/~aiken/moss/ para detectar código plagiado. Como funciona en un nivel semántico, detectará las situaciones que presentaste arriba. La herramienta tiene en cuenta el lenguaje, por lo que los comentarios no se tienen en cuenta en el análisis, y va un largo camino en la detección de código que se ha modificado mediante la simple búsqueda y reemplazo de nombres de variables y/o funciones.

Nota: utilicé la herramienta hace unos años cuando enseñaba informática en la escuela de postgrado, y funcionó maravillosamente al detectar código que había sido extraído de Internet. Aquí está una cuenta bien documentada de aplicación similar: http://fie2012.org/sites/fie2012.org/history/fie99/papers/1110.pdf

Si google "similitud software de medida", que debe encontrar algunos golpes más útiles: http://www.ics.heacademy.ac.uk/resources/assessment/plagiarism/detectiontools_sourcecode.html

+0

Parece que el enlace a fie1012.org ya no es válido. ¿Podría proporcionar un enlace alternativo? – Eric

+1

Pruebe este: http://www3.nd.edu/~kwb/nsf-ufe/1110.pdf – Throwback1986

3

Puede ser Copiar-pegar-detector de PMD?

6

Su problema en Terminología de Informática puede estar indicado como Detección de Plagio de Código Fuente. Un buen comienzo sería leer este artículo sobre el Dr. Dobbs: Detecting Source-Code Plagiarism. Enumera los algoritmos para detectar el plagio en el código fuente.

Nota: Lo que usted ha pedido es de hecho un problema difícil de computación :)

1

Usted podría intentar duplo. Encontrará líneas comunes. Tiene cierta capacidad para ignorar los cambios en el espacio en blanco, pero no detecta el código con las variables renombradas, por lo que es más una ayuda de limpieza que una ayuda para detectar el plagio.

1

Empiezo a usar JPLAG (https://github.com/jplag/jplag) para verificar la similitud de los códigos y comparar los trabajos de los estudiantes en Java y archivos de texto. Funciona bien para verificar la misma estructura de código y la Sustitución variable.

Cuestiones relacionadas