Mutasyon testler sayesinde testlerin kalitesi artıyor

Güncelleme tarihi: 29 Ara 2020

Bir soruyla başlamak istiyorum; aşağıdaki yordamın %100 doğru çalıştığından emin olmak için nasıl bir birim test yazarsınız?


public boolean yourMethod(int a) {

int min = 1; // iyi degil biliyorum

int max = 5; // ayni sekilde

if ((a >= min) && (a <= max)) {

return true;

}

return false;

}


Böyle birim test tatmin edici olur mu ?


@Test public void testYou() {

MyClass sut = new MyClass();

assertFalse(sut.yourMethod(0));

assertTrue(sut.yourMethod(3));

}


Fena gözükmüyor sanki peki olaya kod kapsama (code coverage) raporlarına bakarak ilerleyelim, işte o rapor : %100 kapsama ulaşmak müthiş bir başarı. Konuyu kapatıp huzur içinde yeni planlama (test yaz) — kodla — sonuçları gör ve iyileştir evresine geçebiliriz derken aslında tablonun hiçte bu kadar iyi olmadığını öğreniyoruz.


Bu şimdi ne demek ? Şu demek %100 kod kapsamanın ötesinde eksiklerimiz olduğunu mutasyon test tarafından gösteriliyor. Neden mutasyon testlere ihtiyacımız var ? Kısacası zayıf testlerin üzerinden gelinmesi için mutasyon testlere kesinlikle öneriyorum.


Bu yaklaşım inanıyorum ki yazılım testlerin kalitesinde müthiş bir kalite artışı getirecektir. Çok kısa bir nokta daha belirtmek istiyorum. Diyelim ki çok basit bir topla() yordamı yazdık :


public int topla(int a, int b) { return a + b ; }


topla() yordamının aşağıdaki birim test içerisindeki gibi test edersek :


Mutasyon testler sayesinde birim testlerin (unit testing) kalitesinin arttığı çok açık. Mutasyon testi için ben bu örneklerde PiTest aracını kullandım ama özellikle Java teknolojileri için başka araçlarda mevcut.


https://github.com/altuga/pit-example

1 yorum

Son Paylaşımlar

Hepsini Gör