Siempre he sido escéptico de reescribir el código de trabajo; el código de transferencia no es una excepción a esto. Sin embargo, con la llegada de TDD y las pruebas automatizadas, es mucho más razonable reescribir y refactorizar el código.
¿Alguien sabe si hay una herramienta TDD que se pueda usar para portar código antiguo? Idealmente, podría hacer lo siguiente:
- Escriba pruebas de unidad agnósticas de lenguaje para el código antiguo que pasa (¡o falla si encuentra errores!).
- Ejecute pruebas unitarias en su otra base de código que fallan.
- Escriba el código en su nuevo idioma que pase las pruebas sin mirar el código anterior.
La alternativa sería dividir el paso 1 en "Escribir pruebas unitarias en el idioma 1" y "Realizar pruebas unitarias de puertos en el idioma 2", lo que aumenta significativamente el esfuerzo requerido y es difícil de justificar si la antigua base de código dejará de mantenerse después de el puerto (es decir, no obtiene el beneficio de la integración continua en esta base de código).
EDITAR: Vale la pena señalar esta pregunta en StackOverflow.
expect
. Si tiene un sistema heredado de estilo Unix que se comunica con tuberías mediante stdin y stdout, entonces esa herramienta se puede usar con seguridad. De hecho, sería bastante fácil probar con cualquier lenguaje de script también.
legacy language x
a fancy new language y
. ¡No estaba tratando de implicar nada sobre Unix!
expect
para implementar sus pruebas.