Primero cree una API NUEVA, que haga lo que usted quiere que sea su comportamiento de API NUEVA. Si sucede que esta nueva API tiene el mismo nombre que una API ANTIGUA, entonces agrego el nombre _NEW 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);
Bien, en esta etapa, todas sus pruebas de regresión se pasarán, usando el nombre DoSomethingInterestingAPI ().
SIGUIENTE, revisa tu código y cambia todas las llamadas a DoSomethingInterestingAPI () a la variante apropiada de DoSomethingInterestingAPI_NEW (). Esto incluye actualizar / reescribir cualquier parte de sus pruebas de regresión que deba cambiarse para usar la nueva API.
SIGUIENTE, marca DoSomethingInterestingAPI_OLD () como [[obsoleto ()]]. Mantente cerca de la API obsoleta todo el tiempo que quieras (hasta que hayas actualizado de forma segura todo el código que pueda depender de él).
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 desearía. Este proceso por etapas de revisión de una API mediante la creación explícita de las versiones _NEW y _OLD de la API le permite tener bits del código nuevo y antiguo coexistiendo por un tiempo.
Este es un buen ejemplo (difícil) de este enfoque en la práctica. Tenía la función BitSubstring (), en la que había utilizado el método de tener el tercer parámetro como COUNT de bits en la subcadena. Para ser coherente con otras API y patrones en C ++, quise cambiar para comenzar / terminar como argumentos a la función.
enlace
Creé una función BitSubstring_NEW con la nueva API y actualicé todo mi código para usarlo (dejando NO MÁS LLAMADAS a BitSubString). Pero dejé la implementación para varias versiones (meses), y la marqué en desuso, para que todos puedan cambiar a BitSubString_NEW (y en ese momento, cambiar el argumento de una cuenta para comenzar / finalizar el estilo).
ENTONCES: cuando se completó la transición, hice otro compromiso eliminando BitSubString () y cambiando el nombre de BitSubString_NEW- > BitSubString () (y desaprobé el nombre de BitSubString_NEW).