dev-tools
Sözlük ↗Regresyon Testi (Regression Testing)
Regresyon testi, bir kod değişikliği yaptıktan sonra mevcut bir test paketini yeniden çalıştırma pratiğidir; özellikle "regresyonları" — tamamen farklı bir şey yapması amaçlanan bir değişikliğin istenmeyen bir yan etkisi olarak daha önce çalışan işlevselliğin bozulduğu durumları — yakalamak içindir. Bu isim, yeni işlevselliği test etmekten ayrılır: regresyon testi yeni davranışı doğrulamakla değil, eski davranışın hâlâ geçerli olduğunu doğrulamakla ilgilidir. Pratikte, regresyon testi büyük ölçüde diğer amaçlar için kullanılan aynı test paketleri aracılığıyla otomatikleştirilir (birim, entegrasyon ve uçtan uca testlerin hepsi her değişiklikte çalıştırıldığında bir regresyon güvenlik ağı olarak da işlev görür), kendi özel test durumlarına sahip tamamen ayrı bir test kategorisi olmak yerine; her ne kadar bazı ekipler geçmişte kırılgan olduğu bilinen kod tabanı alanlarını hedefleyen özel bir "regresyon paketi" tutsa da. AI/SaaS geliştiricileri için neden önemli: bir kod tabanı büyüdükçe, ilgisiz bir değişikliğin sistemde uzakta bir yerde bir şeyi kazara bozma riski de büyür — on iki yerde kullanılan paylaşılan bir yardımcı fonksiyon, bir sütunun davranışını değiştiren bir veritabanı migration'ı, ince bir kırıcı değişikliğe sahip bir bağımlılık güncellemesi. CI'da her değişiklikte otomatik olarak çalıştırılan kapsamlı, hızlı bir regresyon paketi, kod tabanının yüzey alanı büyüdükçe her değişikliğin tüm ürünün kapsamlı elle yeniden test edilmesini gerektirmesi yerine, hızla göndermeye devam etmeyi güvenli hale getiren şeydir. Bu özellikle AI ajanı odaklı geliştirme için önemlidir: "X özelliğini ekle" görevi verilen bir ajanın, X'i uygularken Y özelliğini sessizce bozmadığını doğrulamak için zemin gerçeği olarak regresyon paketine ihtiyacı vardır. Nasıl çalışır: regresyon testleri tipik olarak bir projenin yaşamı boyunca yazılan birikmiş birim, entegrasyon ve uçtan uca testler topluluğudur; her pull request'te CI aracılığıyla tam bir paket olarak (veya büyük kod tabanlarında test-etki-analizi araçlarıyla akıllıca seçilmiş ilgili bir alt küme olarak) çalıştırılır. Başarısız olan bir regresyon testi, ya kod düzeltilene ya da testin kendisi güncellenene kadar (eğer eski davranış kasıtlı olarak değiştirildiyse ve test sadece güncel değilse) birleştirmeyi engeller. Uygulamalı örnek: bir geliştirici, yeni bir para birimini desteklemek için paylaşılan bir `formatCurrency()` yardımcı fonksiyonunu yeniden düzenliyor ve performans için dahili yuvarlama mantığını hafifçe değiştiriyor. CI, pull request üzerinde tam test paketini otomatik olarak çalıştırıyor; aylar önce ilgisiz bir faturalama özelliği için yazılmış bir regresyon testi — `expect(formatCurrency(19.995, "USD")).toBe("$20.00")` — başarısız oluyor, çünkü yeniden düzenlenmiş yuvarlama mantığı artık `"$19.99"` döndürüyor. Bu regresyon testi olmasaydı, yuvarlama değişikliği muhtemelen fark edilmeden gönderilir ve production'da gerçek faturalama tutarsızlıklarına neden olurdu; bunun yerine, CI bunu dakikalar içinde yakalıyor, geliştirici yuvarlama uç durumunu düzeltiyor ve düzeltme birleştirilmeden önce doğrulanıyor.
İlgili terimler