Mutasyon Testi
- İngilizcesi
- Mutation Testing
- Okunuşu
- myuteyşın testing
Günlük kullanımda iki ad da yaygın.
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
// 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
- Test KapsamıTest ve Kalite, s. 30Test kapsamı, otomatik testler çalışırken bir programın kaynak kodunun ne kadarının yürütüldüğünü ölçen ve genellikle yüzde olarak gösterilen bir metriktir.
- Birim TestiTest ve Kalite, s. 4Birim testi, bir fonksiyonun, metodun ya da sınıfın programın geri kalanından yalıtılmış olarak doğru davrandığını doğrulayan küçük ve otomatik bir kontroldür.
- AssertionTest ve Kalite, s. 2Assertion, kodun o noktasında bir koşulun doğru olması gerektiğini bildiren ve koşul yanlışsa testi ya da programı bir hatayla durduran ifadedir.
- Özellik Tabanlı TestTest ve Kalite, s. 18Özellik tabanlı test, elle yazılmış birkaç örnek yerine otomatik üretilen çok sayıda girdi için bir kuralın geçerli olduğunu kontrol eder.
- Regresyon TestiTest ve Kalite, s. 21Regresyon testi, daha önce çalışan özelliklerin bozulmadığından emin olmak için bir kod değişikliğinden sonra mevcut testleri yeniden çalıştırma pratiğidir.
- Fuzz TestiTest ve Kalite, s. 9Fuzz testi, çökmeleri, takılmaları ve güvenlik açıklarını bulmak için bir programa çok sayıda beklenmedik ya da bozuk girdi veren otomatik bir tekniktir.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin