Mutasyon Testi Nedir? (Örnek)
⚡ Akıllı Özet
Mutasyon testi, kaynak koduna kasıtlı olarak küçük hatalar ekler ve ardından mevcut test paketini her hatalı sürüme karşı çalıştırarak, bu testlerin değişikliği tespit edecek kadar güçlü olup olmadığını ölçer.
Mutasyon Testi Nedir?
Mutasyon Testi Yazılım testinde, kaynak kodun belirli ifadeleri değiştirilerek veya mutasyona uğratılarak, test senaryolarının kaynak koddaki hataları bulup bulamayacağı kontrol edilir. Mutasyon testinin amacı, test senaryolarının sağlamlık açısından kalitesini güvence altına almak ve mutasyona uğramış kaynak koda karşı başarısız olmalarını sağlamaktır.
Mutant programda yapılan değişiklik, programın genel amacını etkilemeyecek kadar küçük tutulmalıdır. Mutasyon testi, programda kasıtlı olarak bir hata oluşturmayı içerdiği için hata tabanlı test stratejisi olarak da adlandırılır. Bu, bir tür test yöntemidir. Beyaz Box Test yapmak esas olarak şu durumlarda uygulanır: Birim Testi.
Mutasyon Testi, 1971 yılında Richard Lipton tarafından bir öğrenci makalesinde önerilmiş ve 1978 yılında DeMillo, Lipton ve Sayward tarafından "Test Verisi Seçimi Üzerine İpuçları" başlıklı makalede resmileştirilmiştir. O dönemin hesaplama maliyeti nedeniyle ivme kaybetmiş, ancak o zamandan beri gibi diller için yeniden önem kazanmıştır. Java, C#, Python, JavaKomut dosyası ve XML.
Mutasyon Testi nasıl yapılır?
Mutasyon testi veya mutasyon analizi olarak da bilinen işlemin adımları şunlardır:
1 Adım: Programın kaynak koduna, mutant adı verilen birçok sürüm oluşturularak hatalar eklenir. Her mutant tek bir hata içermelidir ve amaç, mutant sürümün başarısız olmasına neden olmaktır; bu da test senaryolarının etkinliğini gösterir.
2 Adım: Test senaryoları hem orijinal programa hem de değiştirilmiş programa uygulanır. Test Durumu yeterli olmalı ve bir programdaki hataları tespit edecek şekilde ayarlanmalıdır.
3 Adım: Orijinal programın ve değiştirilmiş programın sonuçlarını karşılaştırın.
4 Adım: Eğer orijinal program ve mutant program farklı çıktılar üretiyorsa, mutant program test senaryosu tarafından devre dışı bırakılır. Dolayısıyla test senaryosu, orijinal ve mutant program arasındaki değişikliği tespit etmek için yeterlidir.
5 Adım: Eğer orijinal program ve mutant program aynı çıktıyı üretiyorsa, mutant program çalışmaya devam eder. Bu gibi durumlarda, tüm mutantları öldürecek daha etkili test senaryoları oluşturulması gerekir.
Aşağıdaki diyagram tracOrijinal programdan mutant oluşumuna ve nihayetinde öldürülen veya hayatta kalan kararına kadar aynı beş adımı izler.
Mutant Programlar Nasıl Oluşturulur?
Mutasyon, bir program ifadesinde yapılan tek bir sözdizimsel değişiklikten başka bir şey değildir. Her mutant program, orijinal programdan tam olarak bir mutasyonla farklılık göstermelidir.
| Orijinal Program | Mutant Programı |
| Eğer (x>y) “Merhaba” yazdır başka “Merhaba” yazdır |
Eğer (x “Merhaba” yazdır başka “Merhaba” yazdır |
Yukarıdaki örnekte yalnızca karşılaştırma operatörü değişti, ancak x'in y'den büyük olduğu bir test durumunda artık "Hello" yerine "Hi" yazdırılıyor. Bu örnek, sözdizimsel bir değişikliği göstermektedir.
Mutant Programında Neler Değiştirilmeli?
Mutant programlar oluşturmak için kullanılabilecek çeşitli teknikler vardır. Aşağıdaki üç aile, araçların birlikte sunduğu mutasyon operatörlerinin çoğunu kapsamaktadır.
| Operave yedek operatörler | İfade değiştirme operatörleri | İfade değiştirme operatörleri |
| İşlenen değeri başka bir işlenen değerle (x yerine y veya y yerine x) veya sabit bir değerle değiştirin. | Bir program ifadesindeki operatörü değiştirin veya yeni bir operatör ekleyin. | Programatik ifadeler mutant programlar oluşturmak için değiştirilir. |
| Örnek: If(x>y) x ve y değerlerini değiştirin If(5>y) x'i sabit 5 ile değiştirin |
Örnek: Eğer(x==y) == yerine >= kullanabiliriz ve mutant programı şu şekilde elde edebiliriz: If(x>=y) ve ifadeye ++ eklemek Eğer(x==++y) |
Örnek: if-else ifadesindeki else kısmını silin Programın nasıl davrandığını kontrol etmek için tüm if-else ifadesini silin. |
İşte bazı örnek mutasyon operatörleri:
- GOTO etiketinin değiştirilmesi
- İade ekstresinin değiştirilmesi
- Ekstre silme
- Tekli operatör ekleme (örneğin – ve ++)
- Mantıksal konnektörün değiştirilmesi
- Karşılaştırılabilir dizi adı değiştirme
- if-else ifadesinden else kısmını kaldırmak
- Operatör ekleme veya değiştirme
- Verileri değiştirerek ifade değiştirme
- Değişkenler için veri değişikliği
- Programdaki veri türlerinin değiştirilmesi
OperaSınır koşuluna temas eden torklar çoğunlukla hayatta kalır, bu nedenle mutasyon sonuçları sıklıkla boşluklara işaret eder. sınır değer analizi.
Mutasyon Testi Türleri
In Yazılım MühendisliğiMutasyon testi temel olarak üç türe ayrılır: ifade mutasyonu, değer mutasyonu ve karar mutasyonu.
- İfade Mutasyonu – Bir ifade kesilip, yapıştırılıp veya silinirse, sonuç olarak bazı kod satırları kaldırılabilir.
- Değer Mutasyonu – Birincil parametrelerin ve sabitlerin değerleri değiştirilir; örneğin, bir döngü sınırı veya bir eşik değeri değiştirilir.
- Karar Mutasyonu – Kontrol ifadeleri değiştirilir, örneğin flip.ping İlişkisel bir operatör veya bir koşulun olumsuzlanması.
Araçlar, operatörlerini bu üç başlık altında gruplandırır; böylece hayatta kalan bir mutantı üreten aile, test edene hangi tür iddianın eksik olduğunu söyler. Hayatta kalan bir karar mutantı genellikle test edilmemiş bir dalı işaret eder ve bu dal, döngü testi.
Mutasyon Testinin Otomasyonu
Mutasyon testi son derece zaman alıcı ve manuel olarak yürütülmesi karmaşık bir işlemdir, bu nedenle otomasyon araçlarının kullanılması tavsiye edilir; bu araçlar aynı zamanda maliyeti de düşürür. Bir mutasyon aracı, mutantları derler, çalıştırmaları planlar, her başarısız testin hangi mutantı öldürdüğünü kaydeder ve puanı rapor eder.
Kullanılabilir araçların listesi:
- Stryker — çeşitli sürümleri bulunan açık kaynaklı bir mutasyon test çerçevesi. JavaSenaryo ve TypeScript (StrykerJS), C# ve .NET (Stryker.NET) ve Scala (Stryker4s).
- PITAyrıca PITest olarak da yazılan, mutasyon testi sistemi Java ve derlenmiş bayt kodunu değiştiren ve Maven'a bağlanan JVM. Gradle yan yana inşa ediyor JUnit.
İkisi de bir derleme adımı olarak çalışır, bu nedenle aynı yerde yer alırlar. sürekli entegrasyon boru hattının geri kalanı gibi otomasyon testi süit.
Mutasyon Puanı
Mutasyon skoru, toplam mutant sayısı içindeki öldürülen mutantların yüzdesi olarak tanımlanır.
Mutasyon Puanı = (Öldürülmüş Mutantlar / Toplam Mutant sayısı) * 100
Formül, çoğu aracın bildirdiği biçimde aşağıda gösterilmiştir.
Test durumları, puan %100'e ulaştığında mutasyon açısından yeterli olarak tanımlanır. Pratikte payda hariç tutulmalıdır. eşdeğer mutantlar — Söz dizimi değiştirilmiş mutantlar, orijinaliyle tamamen aynı şekilde davranır, bu nedenle hiçbir test onları öldüremez. Bu nedenle araçlar, öldürülen mutantların sayısını öldürülen ve hayatta kalan eşdeğer olmayan mutantların sayısına bölerek rapor eder ve test edicinin eşdeğerleri işaretlemesine izin verir.
Deneysel sonuçlar, mutasyon testinin test senaryolarının yeterliliğini ölçmek için etkili bir yöntem olduğunu göstermiştir. Başlıca dezavantajı, mutantların oluşturulmasının ve her bir test senaryosunun her birine karşı yürütülmesinin maliyetidir.
Mutasyon Testi vs Code Kapsam
Yüksek test kapsamı Bu, güçlü testler olduğunu kanıtlamaz. Satır ve dal kapsamı, hangi ifadelerin çalıştırıldığını kaydeder, sonrasında herhangi bir şeyin doğrulanıp doğrulanmadığını değil; bu nedenle bir metodu çağıran ve hiçbir şey iddia etmeyen bir test yine de kapsanmış sayılır. Mutasyon Testi bu açığı kapatır, çünkü bir mutant yalnızca bir iddia gerçekten başarısız olduğunda ölür.
| Görünüş | Code kapsama | Mutasyon skoru |
| Neyi ölçer | Testlerin hangi satırlarda veya dallarda yürütüldüğü | Testlerin tespit ettiği enjeksiyon hataları hangileriydi? |
| İddialara karşı hassas | Hayır — sıfır doğrulama içeren bir test bile kapsamı artırır. | Evet — hiçbir iddianın başarısız olmadığı durumlarda mutant hayatta kalır. |
| Bir koşunun maliyeti | Bir adet ölçüm cihazlı test çalışması | Hayatta kalan her mutant için bir test çalışması, şimdiye kadar daha yavaş. |
| Tipik kullanım | Her commit'te hızlı bir kontrol | Kritik modüller üzerinde daha kapsamlı periyodik kontroller |
| Hata modu | Gerçek bir doğrulama olmaksızın %100 kapsama alanı | Asla öldürülemeyen eşdeğer mutantlar |
Bu iki ölçüt birbirini tamamlayıcıdır. Kapsama alanı, hiç erişilmeyen kodu belirtir; mutasyon skoru ise erişilen ancak hiç kontrol edilmeyen kodu belirtir. Her ikisi de aynı veriyi besler. kusur yönetimi süreci, aşağıdakiler gibi önlemlerin yanı sıra: kusur yoğunluğu.
Mutasyon Testinin Avantajları
Mutasyon Testinin avantajları şunlardır:
- Bu, kaynak programın yüksek oranda izlenmesini sağlamak için güçlü bir yaklaşımdır.
- Bu, başka hiçbir şeyin yapmadığı şekilde, test paketinin kendisini test eder. yazılım test tekniği Doğrudan yapar.
- Mutasyon testi, yazılım geliştiricisine iyi bir hata tespit düzeyi sağlar.
- Bu yöntem, kaynak koddaki belirsizlikleri ortaya çıkarır ve sıradan çalıştırmaların asla ulaşamayacağı hataları açığa çıkarma kapasitesine sahiptir.
- Hayatta kalan mutantlar hakkında işlem yapılabilir: her biri, sistemin fark edemediği belirli bir satırı ve belirli bir değişikliği belirtiyor.
- Müşteriler bu testler sayesinde daha güvenilir ve istikrarlı bir sisteme sahip olarak fayda sağlıyorlar.
Mutasyon Testinin Dezavantajları
Öte yandan, mutasyon testinin dezavantajları şunlardır:
- Mutasyon testi son derece maliyetli ve zaman alıcıdır, çünkü çok sayıda mutant programın oluşturulması ve derlenmesi gerekir.
- Zaman alıcı olduğu için, bu testin otomasyon aracı olmadan yapılamayacağını söylemek doğru olur.
- Her mutant, orijinal programla aynı sayıda test senaryosuna tabi tutulur; bu nedenle, büyük bir mutant popülasyonunun tüm test paketine karşı çalıştırılması gerekir.
- Eşdeğer mutantlar hiçbir testle öldürülemez ve onları gerçek hayatta kalanlardan ayırmak genellikle manuel inceleme gerektirir.
- Bu yöntem kaynak kodunu değiştirdiği için aşağıdaki durumlarda uygulanamaz: Siyah Box Test yapmak.
Mutasyon Testi Ne Zaman Kullanılır?
Yukarıdaki maliyet profili, Mutasyon Testinin nadiren her commit'te tüm kod tabanında çalıştırıldığı anlamına gelir. Tespit edilmeyen bir hatanın maliyetli olduğu ve test edilen kodun hızla değişebilecek kadar küçük olduğu durumlarda kendini amorti eder.
- Güvenlik açısından kritik veya finansal mantık — Ödeme hesaplaması, vergi kuralları ve yetkilendirme kontrolleri gibi, sessizce verilen yanlış bir cevabın kazadan daha kötü olduğu durumlar.
- Şüpheli derecede yüksek kapsama alanına sahip süitler — Kapsama oranı %100'e yakın olmasına rağmen kusurların yine de gözden kaçtığı durumlarda.
- Eski kod yeniden düzenleniyor. — Mutasyon sonuçları, mevcut testlerin bir gerilemeyi tespit edip edemeyeceğini ortaya koyuyor.
- Kütüphaneler ve paylaşılan bileşenler — yeniden kullanılan bir şeydeki bir hata bileşen Her arayan kişide katlanarak artar.
- Takımlar antrenman yapıyor. test odaklı geliştirme — Puanlama, önce yazılan testlerin gerçek iş hayatında işe yarayıp yaramadığını kontrol eder.
Genellikle, tek kullanımlık prototipler üzerinde, yetersiz bağlantı noktalarıyla veya dallanma mantığı içermeyen üretilmiş kodlarla ya da yavaş çalışan araçların hakim olduğu test paketleriyle çalışmaya değmez. entegrasyon testleri Zaten tek bir geçiş için saatler süren bir süreç.
Bu nedenle çoğu ekip, çalıştırmayı yalnızca değiştirilen dosyalarla sınırlandırır, önemli modüller için bir eşik belirler ve daha geniş kapsamlı bir yaklaşım benimser. gerileme testi süit geri kalanını taşıyor yazılım testi yaşam döngüsü.



