Я всегда скептически относился к переписыванию рабочего кода - портирование кода не является исключением. Однако с появлением TDD и автоматизированного тестирования гораздо разумнее переписать и реорганизовать код.
Кто-нибудь знает, есть ли инструмент TDD, который можно использовать для портирования старого кода? В идеале вы могли бы сделать следующее:
- Запишите независимые от языка модульные тесты для старого кода, который проходит (или не проходит, если вы обнаружите ошибки!).
- Запустите модульные тесты на другой базе кода, которые не пройдут.
- Напишите код на вашем новом языке, который проходит тесты, не глядя на старый код.
Альтернативой может быть разделение шага 1 на «Записать модульные тесты на языке 1» и «Переносить модульные тесты на язык 2», что значительно увеличивает требуемые усилия и трудно обосновать, если старая кодовая база перестанет поддерживаться после порт (то есть вы не получаете преимуществ от непрерывной интеграции на этой базе кода).
РЕДАКТИРОВАТЬ: Стоит отметить этот вопрос на StackOverflow.
expect
. Если у вас есть устаревшая система в стиле Unix, которая взаимодействует с каналами с использованием stdin и stdout, тогда этот инструмент можно использовать наверняка. На самом деле, было бы довольно легко протестировать и на любом языке сценариев.
legacy language x
к fancy new language y
. Я не пытался что-либо подразумевать в Unix!
expect
для реализации ваших тестов.