Trước tiên, hãy tạo API MỚI, đó là những gì bạn muốn hành vi API MỚI của mình. Nếu điều đó xảy ra là API mới này có cùng tên với API OLTER, thì tôi sẽ thêm tên _NEW vào tên API mới.
int DoS SomethingInterestingAPI ();
trở thành:
int DoS SomethingInterestingAPI_NEW (int takes_more_argument); int DoS SomethingInterestingAPI_OLD (); int DoS SomethingInterestingAPI () {DoS SomethingInterestingAPI_NEW (anything_default_mimics_the_old_API); OK - ở giai đoạn này - tất cả các bài kiểm tra hồi quy của bạn đều vượt qua - sử dụng tên DoS SomethingInterestingAPI ().
TIẾP THEO, xem qua mã của bạn và thay đổi tất cả các cuộc gọi thành DoS SomethingInterestingAPI () thành biến thể thích hợp của DoS SomethingInterestingAPI_NEW (). Điều này bao gồm cập nhật / viết lại bất kỳ phần nào trong các bài kiểm tra hồi quy của bạn cần được thay đổi để sử dụng API mới.
TIẾP THEO, đánh dấu DoS SomethingInterestingAPI_OLD () là [[deprecated ()]]. Giữ xung quanh API không dùng nữa miễn là bạn muốn (cho đến khi bạn cập nhật an toàn tất cả các mã có thể phụ thuộc vào nó).
Với phương pháp này, mọi thất bại trong kiểm tra hồi quy của bạn chỉ đơn giản là các lỗi trong kiểm tra hồi quy đó hoặc xác định các lỗi trong mã của bạn - chính xác như bạn muốn. Quá trình dàn dựng này để sửa đổi API bằng cách tạo rõ ràng các phiên bản _NEW và _OLD của API cho phép bạn có các bit của mã mới và mã cũ cùng tồn tại trong một thời gian.
Dưới đây là một ví dụ tốt (khó) của phương pháp này trong thực tế. Tôi đã có chức năng BitSub chuỗi () - trong đó tôi đã sử dụng cách tiếp cận để có tham số thứ ba là COUNT bit trong chuỗi con. Để phù hợp với các API và mẫu khác trong C ++, tôi muốn chuyển sang bắt đầu / kết thúc làm đối số cho hàm.
https://github.com/SophistSolutions/Stroika/commit/003dd8707405c43e735ca71116c773b108c217c0
Tôi đã tạo một hàm BitSubopes_NEW với API mới và cập nhật tất cả mã của mình để sử dụng hàm đó (không để lại NHIỀU CUỘC GỌI THÊM nào cho BitSubString). Nhưng tôi đã để lại việc triển khai trong một vài bản phát hành (tháng) - và đánh dấu nó không được chấp nhận - vì vậy mọi người có thể chuyển sang BitSubString_NEW (và tại thời điểm đó, thay đổi đối số từ kiểu đếm sang kiểu bắt đầu / kết thúc).
THEN - khi quá trình chuyển đổi đó được hoàn thành, tôi đã thực hiện một cam kết khác xóa BitSubString () và đổi tên BitSubString_NEW-> BitSubString () (và không dùng tên BitSubString_NEW).