2009-02-02 13 views
14

Actualmente estoy trabajando en un estilo LAMPARA aplicación web Perl y recientemente tropezamos con este laberinto muerte de código dejado por algún desarrollador anterior. Dejó tantos números mágicos y lógica extraña que me da dolor de cabeza cada vez que tuve que pasar por eso.¿Hay alguna buena herramienta para refactorizar el código web de Perl?

estoy aprendiendo la unidad de pruebas en este momento, así que quiero encontrar alguna herramienta útil para refactorizar el código y escribir prueba de la unidad a lo largo del camino para asegurarse de que no se rompen accidentalmente nada.

Cualquier recomendación para cualquier buena herramienta de refactorización para Perl lámpara? preferiblemente libre :)

Gracias.

Respuesta

13

creo Eclipse/EPIC tiene "algunas" herramientas de refactorización Perl ... pero no me cita en ese ;-)

también podrían ser vale la pena mirar Komodo. Sin embargo, la versión completa no es gratuita como Eclipse/EPIC. Podrías probar su versión opensource Komodo Edit pero supongo que no tendrá todas las características?

No he utilizado ninguna de las herramientas de refactorización anteriores ... Me las arreglo con vi/vim & editores TextMate y lo que ofrecen (o lo que he encontrado hasta ahora en cada uno de estos editores).

Haciendo pruebas de unidad es un buen comienzo. También eche un vistazo perltidy/Perl::Tidy & Perl::Critic que puede ayudar entre pares a través del desorden y encontrar algunos de los "código de olores".

+0

EPIC le permite convertir trozos de código en subrutinas, pero hasta donde sé, no le permitirá cambiar el nombre rutinas ni variables. No puedo esperar hasta que agreguen esta característica ... ¡Me estoy cansando de buscar y reemplazar! –

+1

Creo que Padre: http://padre.perlide.org/howto.html tiene refactorización léxica (busque en esta página "refactor"). No he probado esta herramienta todavía, ¡pero estoy planeando hacerlo! Parece que todavía está en desarrollo temprano (pero al menos actualmente activo). – FrustratedWithFormsDesigner

+0

Acabo de probar Padre, la refactorización no funciona correctamente. O bien obtiene un "error desconocido" o no puede cambiar el nombre de todas las ocurrencias de la variable. –

7

Probablemente, los voluntarios en Refactor :my => 'code' pueden ayudarle. De todos modos, es libre de hacer :)

+0

Parece un sitio interesante. +1 por traerlo a nuestra atención! – draegtun

0

vim! (O cualquier otro editor de texto)

Realmente no hay una herramienta mágica para refractar su código, hay herramientas para (por ejemplo) cambiar el nombre de variables/funciones, pero no hay forma de que pueda arreglar mágicamente la estructura de código horrible o lógica extraña.

+0

Bueno, yo estaba buscando herramientas que me pueden ayudar a identificar olores de código incorrecto para refactor, etc. :) – melaos

5

Si bien en realidad no se está refabricando a gran profundidad, este PerlMonks node describe un par de asignaciones de Vim para desofuscar el código perl usando B::Deparse.

Sus ejemplos:

Puede escribir _d cuando el cursor está sobre esta línea en modo normal:

--$|&&s|\n|-|; 

... y será reemplazado con:

s/\n/-/ if --$|; 

y esta línea:

$foo and $bar or $baz = 1; 

... sería reemplazado con:

$baz = 1 unless $foo and $bar; 
6

naturaleza dinámica de Perl significa que es muy duro para crear herramientas de refactorización para ello.

Sin embargo en lo que respecta a las pruebas que debe ser capaz de reunir algunas pruebas de regresión para ayudarle en su camino.Esto funciona comenzando con el código tal como está ahora y capturando su salida actual. Esto podría estar ejecutando el script CGI desde la línea de comandos y guardando el HTML resultante en el archivo.

Una vez que haya capturado esto, puede cambiar el código y, a medida que avanza, verifique que el código HTML no haya cambiado, lo que significa que el código no se ha roto. Cuando se producen cambios, puede encontrar el error o cambiar la prueba para aceptar el nuevo HTML como correcto.

Esto puede ser un poco difícil de configurar, pero hará que su vida sea más fácil a largo plazo. Debe tratar de automatizar estas pruebas para que sea más fácil de ejecutar. Checkout Test :: WWW :: Mechanize and Test :: LongString, así como todos los demás.

1

Eclipse con el complemento EPIC tiene soporte de refactorización. No es tan sofisticado como la herramienta de refactorización de IntelliJ para Java. Sin embargo, no estoy 100% seguro de que te ayude con tu problema. La forma en que lo he usado es resaltar bloques de código y moverlos a funciones/métodos. En su caso, es probable que desee hacer una gran cantidad de búsqueda/reemplazo en esos números mágicos ...

Supongo que va a utilizar Test :: More para escribir sus pruebas unitarias. Algunas de las otras herramientas EPIC podrían ayudar con eso (por ejemplo, etiquetas "todo").

También es posible usar Test :: WWW :: Mecanizar y Test :: WWW :: Selenio - sería útil en su caso de tener pruebas de selenio definidos para asegurarse de que no se rompen cualquier funcionalidad para el usuario final. EPIC no tiene nada en particular para ayudar con eso, pero debería ser ser posible usarlo para recorrer el código al depurar.

Buena suerte. :-)

0

Padre tiene algunas herramientas de refactorización. El cambio de nombre de variables funciona bastante bien por un tiempo (dos años más o menos) ahora.

http://padre.perlide.org/

responsabilidad: yo soy un contribuyente Padre.

Cuestiones relacionadas