Tôi luôn hoài nghi về việc viết lại mã làm việc - mã porting cũng không ngoại lệ. Tuy nhiên, với sự ra đời của TDD và kiểm tra tự động, việc viết lại và tái cấu trúc mã sẽ hợp lý hơn nhiều.
Có ai biết nếu có một công cụ TDD có thể được sử dụng để chuyển mã cũ? Lý tưởng nhất bạn có thể làm như sau:
- Viết các bài kiểm tra đơn vị bất khả tri ngôn ngữ cho mã cũ vượt qua (hoặc thất bại nếu bạn tìm thấy lỗi!).
- Chạy thử nghiệm đơn vị trên cơ sở mã khác của bạn không thành công.
- Viết mã bằng ngôn ngữ mới của bạn vượt qua các bài kiểm tra mà không cần nhìn vào mã cũ.
Giải pháp thay thế sẽ là tách bước 1 thành "Viết các bài kiểm tra đơn vị bằng ngôn ngữ 1" và "Kiểm tra đơn vị cổng thành ngôn ngữ 2", điều này làm tăng đáng kể nỗ lực và rất khó để biện minh nếu cơ sở mã cũ sẽ ngừng được duy trì sau cổng (nghĩa là bạn không nhận được lợi ích của việc tích hợp liên tục trên cơ sở mã này).
EDIT: Đáng chú ý câu hỏi này trên StackOverflow.
expect
. Nếu bạn có một hệ thống kế thừa kiểu Unix giao tiếp với các đường ống bằng cách sử dụng stdin và stdout thì công cụ đó có thể được sử dụng chắc chắn. Trên thực tế, nó cũng khá dễ dàng để kiểm tra với bất kỳ ngôn ngữ kịch bản nào.
legacy language x
đến fancy new language y
. Tôi đã không cố gắng ám chỉ bất cứ điều gì về Unix!
expect
để thực hiện các thử nghiệm của bạn.