No estoy hablando de una herramienta diff. Realmente estoy buscando ver si un proyecto contiene código que puede haber sido "refactorizado" de otro proyecto. Es probable que los nombres de funciones, nombres de variables y demás se modifiquen. Los condicionales pueden ser revertidos, etc.
tools
comparison
Tamara Wijsman
fuente
fuente
Respuestas:
Cuando enseñaba ingeniería de software, utilicé el servicio (gratuito) en Stanford llamado MOSS (Measure of Software Similarity). Esto me permitió detectar plagio entre proyectos de estudiantes muy fácilmente. El sistema también me permitió ingresar ejemplos de código de "bien conocido" que había usado durante la clase que debían ignorarse.
Lo mejor (un problema secundario) acerca de los resultados que se obtuvieron fue que pudimos determinar qué estudiantes trabajaron juntos --- incluso si no copiaron descaradamente el código, discutieron los problemas lo suficiente como para que su código fuera similar. La parte triste fue encontrar al extraño estudiante SIN SIMILARIDAD con ningún otro código. Por lo general, no les fue tan bien.
fuente
Es posible que pueda utilizar la herramienta PMD para encontrar lo que está buscando. Está destinado a detectar cortar y pegar dentro de una base de código, pero si incluye la fuente del proyecto de origen sospechoso, podría ayudarlo a ver dónde se copió el código.
fuente
Lo más cercano que sé de lo que estás buscando es Clone Detective. Es un complemento de Visual Studio.
fuente
Parece que desea calcular la diferencia entre dos árboles de sintaxis abstracta (AST), por lo que podría estar interesado en la herramienta Smart Differencer .
Encontrado en https://stackoverflow.com/questions/974855/eclipse-abstract-syntax-tree-diff .
fuente
Incluso si no estás hablando de una herramienta diff, puedes usar una para esto, al menos en cierta medida. Si veo dos secciones de código que se parecen, por ejemplo, frecuentemente pego ambas en BeyondCompare para ver cuánto trabajo sería simplificarlo refactorizando la funcionalidad común.
Por otro lado, si no sabe dónde está el código similar, pero se pregunta si existe en alguna parte ... ¿qué está buscando? ¿Una herramienta automatizada para detectar plagio? No estoy seguro de que tal cosa exista.
fuente
Este artículo en wikipedia sobre el tema también incluye enlaces a varias herramientas que se pueden utilizar para encontrar código similar o duplicado. Tenemos una herramienta interna para esto, así que no estoy familiarizado con las herramientas externas mencionadas en el artículo.
fuente
Lo que realmente quiere hacer es ver si hay código clonado (copiado) en los dos proyectos (ambos proyectos que posiblemente contengan conjuntos de archivos posiblemente grandes). Puede hacerlo ejecutando una herramienta de detección de clones. Wikipedia enumera una variedad de ellos.
Para decidir groseramente si hay muchas copias, solo necesita hacer coincidir las líneas de origen, y hay una variedad de detectores de clones de línea de origen exactos. Creo que PMD es uno de ellos. Lo que estos no harán es buscar código editado con copiar y pegar; encontrarán un código sin formato copia-pegar-sin cambios probablemente envuelto alrededor de las cosas copiadas y editadas.
Si desea ver los detalles de la copia del código copiar-editar-pasado, necesita un detector de clones que encuentre clones "parametrizados". Los detectores basados en tokens hacen esto para ediciones que reemplazan solo nombres de variables o constantes.
Los detectores basados en el árbol de sintaxis abstracta (AST) hacen esto para ediciones que involucran fragmentos más grandes, como expresiones, declaraciones, inserciones, eliminaciones, etc. Estos últimos tienden a dar mejores respuestas, porque a diferencia de los detectores de tokens, pueden usar la estructura del lenguaje del código fuente de la computadora como guía.
Nuestra herramienta CloneDR es un detector de este tipo.
No conozco herramientas que realmente encuentren código "equivalente" (condicionales invertidos), etc. Los investigadores han construido detectores de clones que hacen algo como esto, pero la combinatoria hace que su ejecución sea muy costosa, y los prototipos de investigación escalan mal.
fuente
Realmente me gusta cómo CCFinderX visualiza la similitud, por lo que es posible que desee verificar eso también. Admite varios idiomas, es gratuito y bastante fácil de configurar (Python 2.6).
fuente