Créez d'abord une NOUVELLE API, qui fait ce que vous voulez que votre comportement de NOUVELLE API soit. S'il arrive que cette nouvelle API porte le même nom qu'une ancienne API, j'ajoute le nom _NEW au nouveau nom de l'API.
int DoSomethingInterestingAPI ();
devient:
int DoSomethingInterestingAPI_NEW (int prend_plus_arguments); int DoSomethingInterestingAPI_OLD (); int DoSomethingInterestingAPI () {DoSomethingInterestingAPI_NEW (quel que soit_de_fault_mimics_the_old_API); OK - à ce stade - tous vos tests de régression réussissent - en utilisant le nom DoSomethingInterestingAPI ().
SUIVANT, parcourez votre code et remplacez tous les appels par DoSomethingInterestingAPI () par la variante appropriée de DoSomethingInterestingAPI_NEW (). Cela inclut la mise à jour / réécriture de toutes les parties de vos tests de régression qui doivent être modifiées pour utiliser la nouvelle API.
SUIVANT, marquez DoSomethingInterestingAPI_OLD () comme [[obsolète ()]]. Restez dans l'API obsolète aussi longtemps que vous le souhaitez (jusqu'à ce que vous ayez mis à jour en toute sécurité tout le code qui pourrait en dépendre).
Avec cette approche, les échecs dans vos tests de régression sont simplement des bogues dans ce test de régression ou identifient les bogues dans votre code - exactement comme vous le souhaitez. Ce processus par étapes de révision d'une API en créant explicitement les versions _NEW et _OLD de l'API vous permet de faire coexister des bits du nouveau et de l'ancien code pendant un certain temps.
Voici un bon (dur) exemple de cette approche dans la pratique. J'avais la fonction BitSubstring () - où j'avais utilisé l'approche selon laquelle le troisième paramètre serait le COUNT de bits dans la sous-chaîne. Pour être cohérent avec d'autres API et modèles en C ++, je voulais passer en début / fin en tant qu'arguments de la fonction.
https://github.com/SophistSolutions/Stroika/commit/003dd8707405c43e735ca71116c773b108c217c0
J'ai créé une fonction BitSubstring_NEW avec la nouvelle API et mis à jour tout mon code pour l'utiliser (en ne laissant PLUS D'APPELS à BitSubString). Mais je suis parti dans l'implémentation pour plusieurs versions (mois) - et je l'ai marqué comme obsolète - afin que tout le monde puisse passer à BitSubString_NEW (et à ce moment-là changer l'argument d'un décompte en style de début / fin).
ALORS - lorsque cette transition a été terminée, j'ai fait une autre validation en supprimant BitSubString () et en renommant BitSubString_NEW-> BitSubString () (et j'ai déconseillé le nom BitSubString_NEW).