Yönetim raporlarında en sevilen satır, test kapsamı yüzdesidir. Yüzde doksan, hatta yüzde doksan beş gibi durur. Ama kapsam yalnızca tek bir şeyi ölçer: satırların yüzde kaçının test koşusu sırasında çalıştığını. Satırın doğru çalıştığını değil — yanlış davranış da, doğrusu gibi çalışır. Bu yazının savı basittir: kapsam bir sonuçtur, hedef değil; sonuç hedef yapıldığında, ölçülen şey davranış değil sayıdır.

Kapsamın ölçtüğü ile kaçırdığı

Aşağıdaki fonksiyon kapsam raporunda yüzde yüz görünebilir; çünkü iki dal da çalışır. Yine de ikinci dal, bir programlama hatasını gizler:

function onayla(yorum: Yorum): boolean {
  if (yorum.durum === "onaylandi") return true;
  if (yorum.durum === "reddedildi") return true; // hata: reddedilen yayına çıkmamalı
  return false;
}

Test bunu yakalamaz; çünkü testin amacı "fonksiyonun çalıştırılması" değil, "doğru sonucun döndürülmesi" doğrulamasıdır. Kapsam varoluşu ölçer, doğruluğu değil. Bu, yüzde doksanın en pahalı yanılgısıdır: ekip, kapsamı gördüğünde güvende olduğunu sanır; hata ise raporun kör noktasında rahatça yaşar.

Kapsamın üç kör noktası vardır. Birincisi iddia zaafı: test kodu çalıştırır ama hiçbir şey doğrulamaz, expect yoktur. İkincisi dal zaafı: satır çalışır ama koşulun diğer yönü denenmez. Üçüncüsü mutasyon zaafı: kodu değiştirdiğinizde testin kırılıp kırılmadığına bakılmaz. Üçü de aynı hastalığın dereceleridir: test, kodun davranışını değil yalnızca dokunuşunu kaydetmiştir. Bu derecelendirmeyi bilen ekip, kapsam raporunu farklı okur: yüzde kaçı iddialı, yüzde kaçı sadece dokunulmuş?

# Mutasyon testi: kodu boz, testlerin yakaladığını gör
npx stryker run

Mutasyon testi, kapsam ölçemediği yerde ölçer: skoru yüksekse testleriniz gerçekten davranışı kolluyor demektir; skoru düşükse yüzde doksan, rakam olarak yalnızca kağıt üzerindedir. Mutasyon testinin maliyeti yüksektir, her derlemede koşulmaz; ama çeyrekte bir, kapsam raporunun sağlığını denetlemek için iyi bir denetimdir. Skor düştüyse suçlu genelde aynıdır: iddiasız, kopyayla yazılmış, davranışı ölçmeyen testler.

Kapsam ne zaman işe yarar?

Kapsamın bir de işe yaradığı yer vardır: yeni yazılan kodun üstünde düşük bir oran, test yazılmayan alanı gösterir. Bu yüzden kapsam, yön gösteren bir pusula olarak değerlidir; yol gösteren bir harita olarak değil. Yeni modülde kapsam yüzde kırksa orada davranışa odaklı test eksiktir; yüzde doksansa sorulması gereken soru testlerin kalitesidir.

Gerçek güvence nereden gelir?

Üç katman birlikte çalışır: davranışa odaklı birim testler, gerçek bağımlılıkla dönen entegrasyon testleri, kritik akışları tarayıcıda doğrulayan birkaç uçtan uca senaryo. Kapsam bu tabloda bir yönetim aracıdır, hedef değil. Satır bazında yüzde doksanı geçmek, kimi projelerde iyi bir işarettir; kimi projelerde ise test şişkinliğinin ilanıdır. Ayrımın anahtarı sorudur: kapsam yeni davranış mı kanıtlıyor, yoksa eski satırların üstünü mü örtüyor?

Son söz: kapsam neyin test edildiğini değil, neyin test edilmeye çalışıldığını söyler. Gerçek soru "ne kadar kapsadık" değil, "hangi davranış kanıtlandı"dır. Cevabı yazıda değil, testin doğruladığı davranış listesinde arayın.