Herramienta de comparación que determina el grado de similitud entre dos proyectos (también conocido como el Cazador de Buitres). Está pensado para detectar si los alumnos se han copiado en proyectos de desarrollo de software, comparando el código fuente entregado.
<dependency>
<groupId>io.github.fvarrui</groupId>
<artifactId>VultureHunter</artifactId>
<version>{latest.version}</version>
</dependency>
Vulture Hunter también se puede utilizar desde la línea de comandos. Descarga y descomprime el fichero ZIP con la aplicación, y dentro encontrarás el comando hunt
.
Para consultar la ayuda del comando, ejecutamos hunt
sin parámetros o con las opciones -h
o --help
:
hunt --help
El resultado sería algo similar a lo siguiente:
Comparison tool to determine the degree of similarity between two projects (aka "Vulture Hunter")
usage: hunt
-a,--all <folder> compare all projects in specified folder
-b,--binary <ext1,ext2,...> extensions of the included binary files (default value: all files)
-c,--compare <folder1,folder2> compare two projects
-e,--excluded <path1,path2,...> excluded relative paths (default value: empty)
-h,--help print this message
-s,--similarity <arg> degree of similarity between projects (default value: 75.0)
-t,--text <ext1,ext2,...> extensions of the included text files (default value: empty)
-th,--threshold <arg> degree of similarity between files to be considered equal (default value: 80.0)
Para comparar dos proyectos y ver el grado de similitud entre ambos, utilizamos la opción -c
o --compare
:
hunt --compare path/to/project1,path/to/project2
Es posible comparar entre sí todos los proyectos almacenados en una carpeta con la opción -a
o --all
:
hunt --all path/to/parent/folder
Esta opción está pensada para comparar proyectos entregados a través de un plataforma e-Learning como Moodle, donde es posible descargar un ZIP con todos las entregas. Una vez descomprimimos el ZIP con las entregas, podemos lanzar
hunt
con la opción--all
.
Al comparar proyectos, tanto con --compare
como con --all
, disponemos de las siguientes opciones:
Opción | Descripción |
---|---|
-s , --similarity |
Porcentaje de similitud entre dos proyectos para ser considerados sospechosos. Por defecto es 75%. |
-th , --threshold |
Porcentaje de similitud entre dos ficheros para ser considerados iguales. Por defecto es 80%. |
El siguiente comando compara los proyectos "alumno1" y "alumno2", ambos de tipo Maven:
hunt --compare alumno1,alumno2 --threshold 75 --text java,xml,fxml --excluded "target/.*","\..*"
En el ejemplo anterior, se establece el umbral de similitud de ficheros en un 75%, se comparan sólo los ficheros de texto con extensión
java
,xml
ofxml
, y se excluyen todas las rutas que comiencen portarget/
y las que comiencen por un.
(punto).
Con el siguiente resultado:
+-------------------------------+
| alumno1 compared with alumno2 |
+-------------------------------+
Compared files threshold: 75.0%
Estimated similarity between projects: 100,00%
Matches:
* [alumno1:pom.xml] compared with [alumno2:pom.xml]: files match in a 96,88%.
* [alumno1:src/main/java/App.java] compared with [alumno2:src/main/java/App.java]: files match in a 100,00%.
* [alumno1:src/main/java/Configuracion.java] compared with [alumno2:src/main/java/Configu.java]: files match in a 100,00%.
* [alumno1:src/main/java/Controlador.java] compared with [alumno2:src/main/java/Controller.java]: files match in a 100,00%.
* [alumno1:src/main/java/Main.java] compared with [alumno2:src/main/java/Main.java]: files match in a 100,00%.
* [alumno1:src/main/java/Modelo.java] compared with [alumno2:src/main/java/Model.java]: files match in a 100,00%.
* [alumno1:src/main/resources/fxml/Ventana.fxml] compared with [alumno2:src/main/resources/fxml/Window.fxml]: files match in a 100,00%.
- El icono del buitre ha sido creado por Freepik en www.flaticon.com.