Geçen yıl birlikte çalıştığım bir ekip %92 test kapsamına ulaştı ve küçük bir kutlama yaptı. Üç hafta sonra, faturalandırma servislerindeki bir yuvarlama hatası, bir destek talebi ortaya çıkarana kadar altı gün boyunca yaklaşık 4,000 müşteriden sessizce fazla ücret aldı. O hatayı yayına taşıyan her satır "kapsanmıştı". Testler kodun çalıştığını doğruladı — doğru olduğunu değil.
Kapsam, herkesin hesaplayabildiği ama neredeyse hiç kimsenin tapmaması gereken metriktir. Size bir test çalıştırması sırasında hangi satırların yürütüldüğünü söyler. Doğrulamalarınızın bir anlam ifade edip etmediği, bir testin gerçekten bir regresyonu yakalayıp yakalamayacağı ya da inşa ettiğinizin kullanıcının ihtiyaç duyduğu şey olup olmadığı hakkında hiçbir şey söylemez. Kaliteyi tek bir kapsam sayısıyla yönetin, motoru değil göstergeyi optimize edersiniz.
Kapsam sayısı neden yalan söyler
Kapsam tek bir dar soruyu yanıtlar: bu satır yürütüldü mü? Bir test bir fonksiyonu çağırabilir, önemli hiçbir şeyi doğrulamayabilir ve yine de satırı yeşile çevirebilir. %85'te duran, testlerin yarısının anlamlı doğrulaması olmayan paketleri inceledim — kodun hata fırlatmadığını kontrol ediyorlardı ki bu çok düşük bir eşiktir.
Bir de hedef tuzağı var. %80 kapsam bir birleştirme kapısı hâline geldiği an, mühendisler hataları yakalamak için değil, %80'e ulaşmak için test yazar. Basit getter'lar için testler alırsınız ve karmaşık ödeme mantığındaki uç durumlar test edilmeden kalır, çünkü kolay satırları kapsamak daha ucuzdur. Sayı yükselir; risk düşmez.
Kapsam size neyi test ettiğinizi söyler, ne kadar iyi test ettiğinizi asla. Zayıf doğrulamalarla elde edilen yüksek kapsam, yalnızca hak etmediğiniz bir güvendir.
Kaliteyi gerçekten öngören metrikler
İzlemeye değer metriklerin ortak bir özelliği vardır: faaliyeti değil, sonuçları ve davranışı ölçerler. Danışmanlıklarımda başvurduğum birkaçı:
- Kusur kaçış oranı — üretimde bulunan hataların, sürüm öncesi yakalananlara oranı. Bu, QA'nın bir kutup yıldızına en yakın şeydir. Düşüş eğilimi, güvenlik ağınızın gerçekten bir şeyler yakaladığı anlamına gelir.
- Mutasyon skoru — mutasyon testi, kodunuzu kasıtlı olarak bozar (bir
<işaretini bir>işaretiyle değiştirir, bir boolean'ı tersine çevirir) ve herhangi bir testin başarısız olup olmadığını kontrol eder. Testleriniz bu sabotajdan sağ çıkıyorsa, pek bir şey test etmiyorlardı demektir. Bu, "doğrulamalarım gerçek mi?" sorusunun dürüst cevabıdır. - Değişiklik hata oranı ve MTTR — doğrudan DORA araştırmasından: dağıtımların ne kadarının bir olaya neden olduğu ve ne kadar hızlı toparlandığınız. Bunlar kaliteyi, ait olduğu yer olan teslimata bağlar.
- İstikrarsız test oranı — herhangi bir kod değişikliği olmadan hem geçen hem de başarısız olan testlerin yüzdesi. İstikrarsız testler ekibinizi kırmızı derlemeleri görmezden gelmeye alıştırır ve bu, sahip olduğunuz diğer tüm kalite kontrollerini sessizce çökertir.
Bunların hiçbirinin bedavaya manipüle edilemeyeceğine dikkat edin. İçi boş testler yazarak düşük bir kaçış oranını taklit edemezsiniz.
Öncü göstergeler, gecikmeli göstergeleri yener
Kaçış oranı dürüsttür ama yavaştır — açığı, kullanıcılarınızdan sonra öğrenirsiniz. Asıl kaldıraç, daha erken ölçüm yapmaktır. Mutasyon skoru ve doğrulama yoğunluğu öncü göstergelerdir: yazdığınız testlerin dayanıp dayanmayacağını size bugünden söylerler. Bunları inceleme aşamasındaki sinyallerle eşleştirin — kod incelemesinin kaç kusur yakaladığı, bir PR'ın ne kadar süre açık kaldığı, ortalama değişikliğin ne kadar büyük olduğu. Daha küçük, daha hızlı değişiklikler daha az sıklıkta başarısız olur. Bu bir efsane değil; DORA verilerindeki en kalıcı bulgulardan biridir.
Amaç her şeyi izlemek değildir. Gerçek başarısızlık biçiminizle örtüşen iki ya da üç metrik seçin. Üretim olayları içinde boğulan bir ekip, kaçış oranını ve MTTR'yi izlemelidir. Şişkin, güvenilen ama test edilmemiş bir paketin üzerinde oturan bir ekip ise mutasyon testi çalıştırmalı ve o yeşilin ne kadarının gerçek olduğunu öğrenmelidir.
Pazartesi nereden başlamalı
Kapsam araçlarınızı söküp atmayın — sadece onu hedeften korkuluğa indirin. Sonra testlerinizin gerçekten işe yarayıp yaramadığını ölçen bir sinyal ekleyin. Genelde ilk hamlem: en kritik modülünüzde — faturalandırma, kimlik doğrulama, bozulsa haber olacak her neyse — bir mutasyon testi aracı çalıştırıp hayatta kalanlara bakmak. Paketinizden sağ çıkan mutantlar, testlerinizin nerede tiyatrodan ibaret olduğunun kesin bir haritasıdır.
Son acı verici üretim hatanızı yakalayabilecek olan tek metriği seçin ve bu hafta onu ölçmeye başlayın.