2009-09-22 14 views
14

He buscado en Internet por un tiempo y no he podido encontrar herramientas/utilidades/módulos gratuitos (o baratos) que puedan analizar un conjunto de archivos Perl (módulos o scripts) y marcar duplicados o clonados o copiar/pegar el código.¿Cómo puedo encontrar el código copiar/pegar (duplicar, clonar) en Perl?

Estoy mejor ahora, pero solía copiar y pegar secciones de código por todas partes. Me gustaría limpiarlo y arreglar mi antigua duplicación de código, pero un poco de ayuda con la herramienta sería apreciada, así no tendré que pasar por todo mi viejo código con un peine de dientes finos. Además, el reconocimiento manual de este tipo de ofensa es propenso a errores.

+0

Usted puede encontrar este nodo Perl monjes interesante: http://www.perlmonks.org/index.pl?node_id=667084 – daotoad

+2

Mejor sería para no copiar y pegar código en primer lugar. Valdría la pena revisar tu código anterior de todos modos y (re) familiarizarte con él; a menos que tenga millones de líneas de código, debe tener un concepto general de ello en su cabeza de todos modos, y estar al tanto de los posibles candidatos para reescribir/refactorizar. – Ether

+0

Pregunta relacionada - http://stackoverflow.com/questions/2490884/why-is-copy-and-paste-of-code-dangerous – Oded

Respuesta

5

divertido un similar question se envió a SO sólo algunos Hace minutos.

Aquí hay un enlace con algunas herramientas que puede encontrar uso ful.

Code Comparison and Plagirism Detection

+0

¿Podría vincular esa otra pregunta? – innaM

+1

http://stackoverflow.com/questions/1461805/how-can-i-compare-similar-codebases - una pregunta similar sobre C++ – mob

+0

Estoy evaluando el producto CodeMatch. Sin embargo, tuve que subirme a una lista de correo electrónico del boletín corporativo para descargar el software. Afortunadamente, utilicé una dirección de correo electrónico desechable. –

4

¿Qué quiere decir con código duplicado? Solo coincidencias exactas de personajes o coincidencias semánticas.

Hay varias herramientas como http://pmd.sourceforge.net/ que pueden detectar código duplicado por cadena, esta herramienta es para Java pero la fuente que coincide funciona en texto sin formato.

Si desea coincidencia semántica, como

sub A 
{return 1;} 

para que coincida con

sub B 
{ 
    return 1; 
} 

entonces necesitará algo más :(

+0

Gracias.Acabo de probar el plugin PMD para Eclipse y no parece poder escanear archivos perl (o texto sin formato). Las opciones son Java, JSP, CPP, C, PHP, Ruby, Fortran. Para risas, probé un par y me da un informe de copiar/pegar vacío. –

+0

De forma predeterminada, busca bloques de aproximadamente 30 líneas de longitud. Lo usamos para nuestro lenguaje interno, basado libremente en Javascript y funciona bien para nosotros. – chollida

+3

Puede ejecutar todo el código a través de perlidy para suavizar las diferencias estilísticas (pero no los nombres de la subrutina). – Schwern

0

diseños semánticos hace un producto llamado Clone Dr. que parece ser capaz de analizar un gran número de tipos de lenguaje para las secciones de código clonados. Pero parece que su versión de evaluación gratuita solo funciona en Java y Cobol.

+0

Soy el gerente de producto de CloneDR. Proporciona (creemos) muy buenos resultados en virtud de la comparación de los AST para los programas, lo que elimina por completo cualquier problema de formato. Maneja muchos idiomas, pero Perl no es actualmente uno de ellos. Después de todo, "solo Perl puede analizar Perl": -} [En realidad, tenemos muy buenos motores de análisis sintáctico; Llegaremos a Perl algún día.] –

+1

Es bueno saberlo. Sin embargo, puede que no haya muchos clientes para Perl. Hace un tiempo probé su versión de evaluación de Clone Dr. en un viejo proyecto mío de JAVA y me impresionaron los resultados. Fue esta experiencia la que me hizo darme cuenta de que necesitaba analizar todo el resto de mi código (algunos de los cuales incluyen algunos scripts grandes de Perl) para ofensas de copiar/pegar. –

+0

Puede obtener versiones de evaluación para Java, C#, C, C++, COBOL y PHP. Puede que tenga que preguntar en el sitio web. –

0

Acabo de evaluar Simian. Tiene un período de evaluación gratuito de 15 días y cuesta cien dólares por una licencia de usuario único. No es compatible oficialmente con Perl, pero sí los trata como texto sin formato y los analiza de todos modos. ¡Esta es una utilidad súper rápida! Y súper fácil de usar. El informe generado a partir de esta herramienta fue simple y fácil de interpretar. Estoy totalmente de acuerdo con esta herramienta. Ahora solo necesito hablar con mi jefe y conseguir que compre una licencia.

+0

P.S. Envié un correo electrónico a los desarrolladores de Simian y les pregunté si tenían la intención de apoyar a Perl, y de inmediato respondieron que nunca se les había ocurrido apoyar a Perl, pero que lo pondrían en su lista de cosas por hacer. Ni siquiera soy un cliente que paga. Ahora es un gran apoyo. (a menos que me estuvieran echando) –

+0

¿Lo hicieron? Las mentes inquisitivas quieren saber. Creo que Simian requiere análisis léxico, y Perl es perra para leer y mucho menos analizar. –

2

He usado CCFinder en el pasado para encontrar secciones de código que son duplicados. Funciona bastante bien, pero tiene una ... interfaz interesante. No tiene soporte nativo para perl, pero tiene una opción de texto sin formato que debería funcionar para detectar copiar y pegar al menos. Hay una solución de Windows y Ubuntu: Freeware, no de código abierto, lamentablemente.

+0

Oh wow ... ¡esta es una gran utilidad! ¡Y la forma en que te muestra visualmente tu código duplicado en un diagrama de dispersión es increíble! Creo que esta es la mejor pieza de software libre que jamás haya experimentado. La interfaz de usuario es un poco klunky al principio, pero una vez que te acostumbras a la interfaz, es un analizador de duplicación de código maravillosamente poderoso. Dos liendres, sin embargo. No es multiplataforma.Y deja un montón de archivos temporales detrás en el árbol de código fuente. –

+0

Pude modificar fácilmente uno de los archivos de Python para reconocer e ignorar los comentarios de POD y Perl. ¡Ahora estoy aún más entusiasmado con CCFinder! (Tuvo que eliminar todos los archivos temporales a mano y reiniciar para que funcione, sin embargo). –

+0

El código fuente está disponible bajo licencia de MIT: http://www.ccfinder.net/ccfinderxos.html – hexcoder

Cuestiones relacionadas