Najpierw utwórz NOWY interfejs API, który będzie działał tak, jak chcesz. Jeśli zdarza się, że ten nowy interfejs API ma taką samą nazwę jak interfejs OLDER API, to dołączam nazwę _NEW do nowej nazwy interfejsu API.
int DoSomethingInterestingAPI ();
staje się:
int DoSomethingInterestingAPI_NEW (int takes_more_arguments); int DoSomethingInterestingAPI_OLD (); int DoSomethingInterestingAPI () {DoSomethingInterestingAPI_NEW (what_default_mimics_the_old_API); OK - na tym etapie - wszystkie testy regresji przechodzą pomyślnie - używając nazwy DoSomethingInterestingAPI ().
NASTĘPNIE, przejrzyj kod i zmień wszystkie wywołania DoSomethingInterestingAPI () na odpowiedni wariant DoSomethingInterestingAPI_NEW (). Obejmuje to aktualizację / przepisywanie dowolnych części testów regresji, które należy zmienić, aby korzystać z nowego interfejsu API.
NASTĘPNY, oznacz DoSomethingInterestingAPI_OLD () jako [[przestarzałe ()]]. Trzymaj się przestarzałego interfejsu API tak długo, jak chcesz (dopóki nie zaktualizujesz bezpiecznie całego kodu, który może od niego zależeć).
Dzięki takiemu podejściu wszelkie niepowodzenia w testach regresji są po prostu błędami w teście regresji lub identyfikują błędy w kodzie - dokładnie tak, jak byś tego chciał. Ten etapowy proces przeglądu interfejsu API poprzez jawne tworzenie wersji API _NEW i _OLD pozwala na współdziałanie przez jakiś czas nowego i starego kodu.
Oto dobry (twardy) przykład tego podejścia w praktyce. Miałem funkcję BitSubstring () - w której zastosowałem podejście polegające na tym, że trzecim parametrem jest LICZBA bitów w podciągu. Aby zachować spójność z innymi interfejsami API i wzorcami w C ++, chciałem przełączyć na początek / koniec jako argumenty funkcji.
https://github.com/SophistSolutions/Stroika/commit/003dd8707405c43e735ca71116c773b108c217c0
Utworzyłem funkcję BitSubstring_NEW z nowym API i zaktualizowałem cały mój kod, aby z niej korzystać (pozostawiając NIE WIĘCEJ POŁĄCZEŃ dla BitSubString). Ale zostawiłem implementację na kilka wydań (miesiące) - i zaznaczyłem, że jest przestarzała - aby każdy mógł przełączyć się na BitSubString_NEW (i wtedy zmienić argument z stylu liczenia na początek / koniec).
NASTĘPNIE - kiedy przejście zostało zakończone, zrobiłem kolejne zatwierdzenie, usuwając BitSubString () i zmieniając nazwę BitSubString_NEW-> BitSubString () (i przestałem używać nazwy BitSubString_NEW).