Primero cree una NUEVA API, que haga lo que quiere que sea su NUEVO comportamiento de API. Si sucede que esta nueva API tiene el mismo nombre que una API ANTERIOR, entonces agrego el nombre _NUEVO al nuevo nombre de la API.
int DoSomethingInterestingAPI ();
se convierte en:
int DoSomethingInterestingAPI_NEW (int takes_more_arguments); int DoSomethingInterestingAPI_OLD (); int DoSomethingInterestingAPI () {DoSomethingInterestingAPI_NEW (whatever_default_mimics_the_old_API); OK, en esta etapa, todas sus pruebas de regresión todavía pasan, usando el nombre DoSomethingInterestingAPI ().
SIGUIENTE, revise su código y cambie todas las llamadas a DoSomethingInterestingAPI () a la variante apropiada de DoSomethingInterestingAPI_NEW (). Esto incluye actualizar / reescribir las partes de las pruebas de regresión que se deban cambiar para usar la nueva API.
SIGUIENTE, marque DoSomethingInterestingAPI_OLD () como [[en desuso ()]]. Mantenga la API obsoleta todo el tiempo que desee (hasta que haya actualizado de forma segura todo el código que pueda depender de ella).
Con este enfoque, cualquier falla en sus pruebas de regresión simplemente son errores en esa prueba de regresión o identifican errores en su código, exactamente como lo desearía. Este proceso por etapas de revisión de una API mediante la creación explícita de versiones _NEW y _OLD de la API le permite tener partes del código nuevo y antiguo coexistiendo por un tiempo.
Aquí hay un buen (difícil) ejemplo de este enfoque en la práctica. Tenía la función BitSubstring (), donde había utilizado el enfoque de tener el tercer parámetro como el CONTEO de bits en la subcadena. Para ser coherente con otras API y patrones en C ++, quería cambiar para comenzar / finalizar como argumentos de la función.
https://github.com/SophistSolutions/Stroika/commit/003dd8707405c43e735ca71116c773b108c217c0
Creé una función BitSubstring_NEW con la nueva API y actualicé todo mi código para usarla (sin dejar MÁS LLAMADAS a BitSubString). Pero me dejé en la implementación durante varios lanzamientos (meses), y lo marqué como obsoleto, para que todos pudieran cambiar a BitSubString_NEW (y en ese momento cambiar el argumento de un conteo al estilo de inicio / finalización).
ENTONCES: cuando se completó esa transición, hice otra confirmación eliminando BitSubString () y renombrando BitSubString_NEW-> BitSubString () (y desaprobé el nombre BitSubString_NEW).