Спершу створіть НОВИЙ API, який виконує те, що ви хочете, щоб було ваше поведінка NEW API. Якщо трапляється, що цей новий API має те саме ім'я, що і API OLDER, я додаю ім'я _NEW до нового імені API.
int DoSomethingInterestingAPI ();
стає:
int DoSomethingInterestingAPI_NEW (int takes_more_arguments); int DoSomethingInterestingAPI_OLD (); int DoSomethingInterestingAPI () {DoSomethingInterestingAPI_NEW (what_default_mimics_the_old_API); Гаразд - на цьому етапі всі ваші регресійні тести проходять підвіконня - використовуючи назву DoSomethingInterestingAPI ().
НАСТУПНО, перейдіть через свій код і змініть всі дзвінки на DoSomethingInterestingAPI () на відповідний варіант DoSomethingInterestingAPI_NEW (). Це включає оновлення / перезапис будь-яких частин регресійних тестів, які потрібно змінити, щоб використовувати новий API.
NEXT, позначте DoSomethingInterestingAPI_OLD () як [[застаріле ()]]. Тримайте застарілий API, скільки завгодно (поки ви безпечно не оновите весь код, який може від нього залежати).
При такому підході будь-які збої у ваших тестах регресії просто є помилками в цьому регресійному тесті або виявлення помилок у вашому коді - саме так, як ви хотіли. Цей поетапний процес перегляду API шляхом явного створення _NEW та _OLD версій API дозволяє деякий час співіснувати біти нового та старого коду.
Ось хороший (важкий) приклад такого підходу на практиці. У мене була функція BitSubstring () - там, де я застосував підхід третього параметра, бути COUNT біт у підрядку. Щоб відповідати іншим API та шаблонам у C ++, я хотів переключитися на початок / кінець як аргументи функції.
https://github.com/SophistSolutions/Stroika/commit/003dd8707405c43e735ca71116c773b108c217c0
Я створив функцію BitSubstring_NEW з новим API і оновив весь свій код, щоб використовувати це (залишаючи НЕ БІЛЬШЕ ЗВ'ЯЗКУ для BitSubString). Але я залишив у реалізації кілька випусків (місяців) - і позначив її застарілою - щоб кожен міг перейти на BitSubString_NEW (і в цей час змінити аргумент із стипу підрахунку на початок / кінець).
ТОГО - коли цей перехід був завершений, я здійснив черговий комітет, видаляючи BitSubString () та перейменувавши BitSubString_NEW-> BitSubString () (і застаріле ім'я BitSubString_NEW).