Ana içeriğe geç

Mutasyon Testi

İngilizcesi
Mutation Testing
Okunuşu
myuteyşın testing

Günlük kullanımda iki ad da yaygın.

Güncellendi 2 dk okuma

Bu sayfayı paylaşın

Bağlantıyı gönderin, tanımı bağlantısıyla birlikte alıntılayın ya da kendi sitenizde bir kart olarak gösterin.

https://softwaredictionary.org/tr/terimler/mutation-testing

Kısaca

Mutasyon testi, koda küçük kasıtlı hatalar ekleyip testlerin her birini yakalayarak başarısız olup olmadığına bakarak bir test takımının kalitesini ölçer.

Mutasyon testi nedir?

Mutasyon testi, kodunuzu değil testlerinizi değerlendirir. Bir araç programa mutant adı verilen küçük hataları bilerek ekler ve test takımını her birine karşı çalıştırır. En az bir test başarısız olursa mutant öldürülmüştür; tüm testler hâlâ geçiyorsa mutant hayatta kalmıştır ve bu da hiçbir testin gerçekte kontrol etmediği bir davranışı ortaya çıkarır.

Mutantlar, mutasyon operatörleri tarafından oluşturulur: > ifadesini >= yapmak, + ifadesini - yapmak, true ifadesini false yapmak, bir dönüş değerini değiştirmek ya da bir satırı silmek gibi basit kurallar. Araç, öldürülen mutantların yüzdesi olan mutasyon skorunu raporlar ve eksik testleri ekleyebilmeniz için hayatta kalanları listeler. Takımın mutant başına bir kez çalışması gerektiğinden araçlar, yalnızca değiştirilen satırı kapsayan testleri çalıştırarak ya da yalnızca bir pull request'te değişen kodu mutasyona uğratarak zaman kazanır. Bazı mutantlar eşdeğerdir; yani değişiklik davranışı hiç değiştirmez, bu yüzden hiçbir test onları öldüremez.

Mutasyon testi, gizli bir deneme yangını olan bir yangın tatbikatı gibidir: alarmlarınızın gerçekten çalıp çalmadığını söyler. Ekipler bunu kritik iş kurallarında ve kütüphanelerde, ayrıca yüksek bir kapsam rakamının bir anlam taşıyıp taşımadığını kontrol etmek için kullanır.

Mutasyon testi sıklıkla test kapsamıyla karıştırılır. Kapsam, testler sırasında hangi satırların çalıştığını söyler; mutasyon testi ise bu satırlar yanlış olsaydı testlerin başarısız olup olmayacağını söyler. Hiç assertion içermeyen bir test %100 kapsama ulaşabilir ve yine de sıfır mutant öldürebilir. Ayrıca programın kodunu değil girdilerini mutasyona uğratan fuzz testinden de farklıdır.

Önemli noktalar

  • Mutasyon testi, testleri test etmek için mutant adı verilen küçük hatalar ekler.
  • Bir test başarısız olursa mutant öldürülür, tüm testler geçerse hayatta kalır.
  • Mutasyon skoru, takımın öldürdüğü mutantların yüzdesidir.
  • Kapsam rakamlarının gösteremediği zayıf assertion'ları ortaya çıkarır.
  • Takımı mutant başına bir kez çalıştırmak yavaştır; bu yüzden araçlar kapsamı daraltır.

Örnek

Hayatta kalan bir mutant ve onu öldüren testjavascript
// Original code
function canVote(age) {
  return age >= 18;
}

// A mutant the tool generates: ">=" changed to ">"
function canVoteMutant(age) {
  return age > 18;
}

// This test passes for BOTH versions, so the mutant survives:
assert.equal(canVote(30), true);

// A boundary test kills the mutant, because it fails on the mutated code:
assert.equal(canVote(18), true);

Sık sorulan sorular

İyi bir mutasyon skoru nedir?

Herkes için geçerli bir hedef yoktur, ancak pek çok ekip önemli kod için yüzde 70 ile 80'i sağlıklı sayar. Hayatta kalan mutantlar, en üst düzeye çıkarılacak bir sayıdan çok eksik kontrollerin yapılacaklar listesi olarak en kullanışlıdır.

Mutasyon testi neden yavaştır?

Test takımının her mutanta karşı çalışması gerekir ve büyük bir kod tabanı binlercesini üretebilir. Araçlar bunu, yalnızca her mutasyona uğramış satırı kapsayan testleri çalıştırarak ve yalnızca yakın zamanda değişen kodu mutasyona uğratarak hızlandırır.

İlgili sayfalar

Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin

Daha fazla

Ayarlar