Crea innanzitutto una NUOVA API, che fa ciò che vuoi che sia il tuo nuovo comportamento dell'API. Se accade che questa nuova API abbia lo stesso nome di un'API OLDER, quindi aggiungo il nome _NEW al nuovo nome dell'API.
int DoSomethingInterestingAPI ();
diventa:
int DoSomethingInterestingAPI_NEW (int takes_more_arguments);
int DoSomethingInterestingAPI_OLD ();
int DoSomethingInterestingAPI () {DoSomethingInterestingAPI_NEW (whatever_default_mimics_the_old_API);
OK - in questa fase - tutti i tuoi test di regressione passano - utilizzando il nome DoSomethingInterestingAPI ().
NEXT, passa attraverso il tuo codice e cambia tutte le chiamate a DoSomethingInterestingAPI () nella variante appropriata di DoSomethingInterestingAPI_NEW (). Ciò include l'aggiornamento / riscrittura di qualsiasi parte dei test di regressione che devono essere modificati per utilizzare la nuova API.
NEXT, contrassegna DoSomethingInterestingAPI_OLD () come [[deprecato ()]]. Mantieni l'API obsoleta per tutto il tempo che desideri (finché non hai aggiornato in modo sicuro tutto il codice che potrebbe dipendere da esso).
Con questo approccio, eventuali errori nei test di regressione sono semplicemente bug in quel test di regressione o identificano bug nel codice, esattamente come si vorrebbe. Questo processo graduale di revisione di un'API creando esplicitamente le versioni _NEW e _OLD dell'API consente di avere bit del codice nuovo e vecchio che coesistono da un po '.
Ecco un buon (duro) esempio di questo approccio nella pratica. Avevo la funzione BitSubstring () - dove avevo usato l'approccio di avere il terzo parametro come COUNT di bit nella sottostringa. Per coerenza con altre API e pattern in C ++, volevo passare all'inizio / fine come argomenti alla funzione.
link
Ho creato una funzione BitSubstring_NEW con la nuova API e aggiornato tutto il mio codice per usarlo (lasciando NON PIÙ CHIAMATE a BitSubString). Ma ho lasciato l'implementazione per diverse versioni (mesi) e l'ho contrassegnata come deprecata, quindi tutti potevano passare a BitSubString_NEW (e in quel momento modificare l'argomento da un conteggio allo stile begin / end).
THEN - quando la transizione è stata completata, ho eseguito un altro commit cancellando BitSubString () e rinominando BitSubString_NEW- > BitSubString () (e ho disapprovato il nome BitSubString_NEW).