Eu sempre fui cético em reescrever códigos de trabalho - portar códigos não é uma exceção a isso. No entanto, com o advento do TDD e dos testes automatizados, é muito mais razoável reescrever e refatorar o código.
Alguém sabe se existe uma ferramenta TDD que pode ser usada para portar código antigo? Idealmente, você pode fazer o seguinte:
- Escreva testes de unidade independentes de idioma para o código antigo que passa (ou falha se você encontrar erros!).
- Execute testes de unidade na sua outra base de código que falharem.
- Escreva um código no seu novo idioma que passe nos testes sem examinar o código antigo.
A alternativa seria dividir a etapa 1 em "Escrever testes de unidade no idioma 1" e "Testes de unidade de porta no idioma 2", o que aumenta significativamente o esforço necessário e é difícil de justificar se a antiga base de códigos deixará de ser mantida após a porta (ou seja, você não obtém o benefício da integração contínua nessa base de código).
EDIT: Vale a pena notar esta pergunta no StackOverflow.
expect
. Se você possui um sistema legado no estilo Unix que se comunica com pipes usando stdin e stdout, essa ferramenta pode ser usada com certeza. De fato, seria muito fácil testar também com qualquer linguagem de script.
legacy language x
para fancy new language y
. Eu não estava tentando sugerir nada sobre o Unix!
expect
para implementar seus testes.