Innanzitutto crea una NUOVA API, che fa quello che vuoi che sia il tuo NUOVO comportamento API. Se succede che questa nuova API ha lo stesso nome di un'API OLDER, allora aggiungo il nome _NEW al nuovo nome API.
int DoSomethingInterestingAPI ();
diventa:
int DoSomethingInterestingAPI_NEW (int take_more_arguments); int DoSomethingInterestingAPI_OLD (); int DoSomethingInterestingAPI () {DoSomethingInterestingAPI_NEW (whatever_default_mimics_the_old_API); OK - in questa fase - tutti i test di regressione superano il davanzale - usando il nome DoSomethingInterestingAPI ().
SUCCESSIVO, scorrere il codice e modificare tutte le chiamate a DoSomethingInterestingAPI () nella variante appropriata di DoSomethingInterestingAPI_NEW (). Ciò include l'aggiornamento / riscrittura delle parti dei test di regressione che devono essere modificate per utilizzare la nuova API.
SUCCESSIVO, contrassegnare DoSomethingInterestingAPI_OLD () come [[deprecated ()]]. Mantieni l'API obsoleta per tutto il tempo che desideri (fino a quando non avrai aggiornato in modo sicuro tutto il codice che potrebbe dipendere da esso).
Con questo approccio, qualsiasi errore nei test di regressione è semplicemente un bug in quel test di regressione o identifica i bug nel tuo codice, esattamente come vorresti. Questo processo graduale di revisione di un'API mediante la creazione esplicita delle versioni _NEW e _OLD dell'API consente di far coesistere per un po 'parti del vecchio e nuovo codice.
Ecco un buon (difficile) esempio di questo approccio in pratica. Avevo la funzione BitSubstring () - dove avevo usato l'approccio del terzo parametro come COUNT dei bit nella sottostringa. Per essere coerente con altre API e modelli in C ++, volevo passare all'inizio / alla fine come argomenti della funzione.
https://github.com/SophistSolutions/Stroika/commit/003dd8707405c43e735ca71116c773b108c217c0
Ho creato una funzione BitSubstring_NEW con la nuova API e ho aggiornato tutto il mio codice per usarlo (lasciando NESSUNA CHIAMATA a BitSubString). Ma ho lasciato l'implementazione per diverse versioni (mesi) - e l'ho contrassegnato come obsoleto - in modo che tutti potessero passare a BitSubString_NEW (e in quel momento cambiare l'argomento da un conteggio allo stile di inizio / fine).
ALLORA - quando quella transizione è stata completata, ho fatto un altro commit eliminando BitSubString () e rinominando BitSubString_NEW-> BitSubString () (e ho deprecato il nome BitSubString_NEW).