İlk olarak, YENİ API davranışınızın olmasını istediğiniz şeyi yapan bir YENİ API oluşturun. Bu yeni API bir OLDER API ile aynı ada sahipse, _NEW adını yeni API adına eklerim.
int DoSomethingInterestingAPI ();
dönüşür:
int DoSomethingInterestingAPI_NEW (int, daha fazla_arguments alır); int DoSomethingInterestingAPI_OLD (); int DoSomethingInterestingAPI () {DoSomethingInterestingAPI_NEW (whatever_default_mimics_the_old_API); Tamam - bu aşamada - tüm regresyon testleriniz eşik kartı - DoSomethingInterestingAPI () adını kullanarak.
SONRAKİ, kodunuzu gözden geçirin ve DoSomethingInterestingAPI () öğesine yapılan tüm çağrıları DoSomethingInterestingAPI_NEW () değişkenine uygun olarak değiştirin. Bu, yeni API'yı kullanmak için regresyon testlerinizin hangi bölümlerinin değiştirilmesi gerektiğini güncellemeyi / yeniden yazmayı içerir.
SONRAKİ, DoSomethingInterestingAPI_OLD () öğesini [[kullanımdan kaldırıldı ()]] olarak işaretleyin. Kullanımdan kaldırılmış API'yı istediğiniz kadar (ona bağlı olabilecek tüm kodu güvenli bir şekilde güncelleyene kadar) saklayın.
Bu yaklaşımla, regresyon testlerinizdeki herhangi bir başarısızlık, o regresyon testindeki hatalardır veya kodunuzdaki hataları tam olarak istediğiniz gibi tanımlar. API'nın _NEW ve _OLD sürümlerini açıkça oluşturarak bir API'yi revize etmek için bu aşamalı süreç, yeni ve eski kod parçalarının bir süre birlikte var olmasını sağlar.
İşte pratikte bu yaklaşımın iyi (zor) bir örneği. Ben alt parametre bit COUNT bit olmak üzere üçüncü parametre sahip yaklaşım kullanmıştı fonksiyonu BitSubstring () - vardı. C ++ diğer API ve kalıpları ile tutarlı olmak için, işleve argümanlar olarak başlangıç / bitiş geçmek istedim.
https://github.com/SophistSolutions/Stroika/commit/003dd8707405c43e735ca71116c773b108c217c0
Yeni API ile bir işlev BitSubstring_NEW oluşturdum ve bunu kullanmak için tüm kodumu güncelledim (BitSubString'e NO DAHA FAZLA ARAMA bırakarak). Ancak birkaç sürüm (- ay) için uygulamadan ayrıldım ve kullanımdan kaldırılmış olarak işaretledim - böylece herkes BitSubString_NEW'ye geçebilir (ve o zaman argümanı bir sayıdan başlangıç / bitiş stiline değiştirebilir).
O zaman - bu geçiş tamamlandığında, BitSubString () 'i silmeyi ve BitSubString_NEW-> BitSubString ()' i yeniden adlandırmayı başka bir taahhütte bulundum (ve BitSubString_NEW adını kaldırdım).