what is mutation testing
Bu eğitici, Mutasyon Testinin ne olduğunu, nasıl gerçekleştirileceğini ve Mutasyon Testi türlerini örneklerle açıklar:
Mutasyon Testi nedir?
Mutasyon testi, bir yazılım programının varyasyonlarının test veri setine tabi tutulduğu hataya dayalı bir test tekniğidir. Bu, test setinin sapmaları izole etmedeki etkinliğini belirlemek için yapılır.
Biraz karmaşık geliyor, değil mi?
Ne öğreneceksin:
Mutasyon Testi
Mutasyon Testi (MT), ilk olarak bir okul projesi olarak önerildiği 70'lere kadar uzanır. Çok kaynak yoğun olduğu için iptal edildi. Bununla birlikte, insanlar daha gelişmiş bilgisayarlar geliştirmeye devam ettikçe, yavaş yavaş geri dönüş yaptı ve şu anda en popüler test tekniklerinden biri.
Mutasyon testi tanımı
MT olarak da bilinir hataya dayalı test, program mutasyonu, hataya dayalı test, veya mutasyon analizi .
Adından da anlaşılacağı gibi mutasyon testi, değişikliklere veya mutasyonlara dayanan bir yazılım test türüdür. Tanımlanmış test senaryolarının koddaki hataları tespit edip edemediğini kontrol etmek için kaynak kodunda küçük değişiklikler yapılır.
İdeal durum, test durumlarından hiçbirinin geçmemesidir. Test başarılı olursa, kodda bir hata var demektir. Mutantın (kodumuzun değiştirilmiş versiyonu) yaşadığını söylüyoruz. Test başarısız olursa, kodda hata yoktur ve mutant öldürülmüştür. Amacımız tüm mutantları öldürmek.
Mutasyon testi ayrıca, daha etkili test senaryoları yazmak için bir teklifle tanımlanan test senaryolarının veya test paketlerinin kalitesini test etmeye yardımcı olur. Ne kadar çok mutant öldürebilirsek, testlerimizin kalitesi o kadar yüksek olur.
Mutasyon Testi Kavramları
Mutasyon testini daha fazla tartışmadan önce, karşılaşacağımız bazı kavramları inceleyelim.
# 1) Mutantlar: Bu, basitçe kaynak kodun değiştirilmiş halidir. Dakika değişikliklerini içeren koddur. Test verileri mutant üzerinden çalıştırıldığında, ideal olarak bize orijinal kaynak kodundan farklı sonuçlar vermelidir. Mutantlar da denir mutant programlar .
Farklı mutant türleri vardır. Bunlar aşağıdaki gibidir:
- Hayatta Kalan Mutantlar: Bahsettiğimiz gibi, bunlar test verilerini kaynak kodun orijinal ve mutasyona uğramış varyantları aracılığıyla çalıştırdıktan sonra hala hayatta olan mutantlardır. Bunlar öldürülmeli. Ayrıca canlı mutantlar olarak bilinirler.
- Öldürülen Mutantlar: Bunlar, mutasyon testinden sonra öldürülen mutantlardır. Bunları, kaynak kodun orijinal ve değiştirilmiş sürümlerinden farklı sonuçlar aldığımızda elde ederiz.
- Eşdeğer Mutantlar: Bunlar, canlı mutantlarla yakından ilişkilidir, bu nedenle, test verilerini içlerinden çalıştırdıktan sonra bile 'canlıdırlar'. Onları diğerlerinden ayıran şey, farklı sözdizimlerine sahip olsalar bile, orijinal kaynak koduyla aynı anlama sahip olmalarıdır.
# 2) Mutatörler / mutasyon operatörleri: Bunlar mutasyonları mümkün kılan şeydir, onlar 'sürücü koltuğundadır'. Temel olarak, mutant bir sürüme sahip olmak için kaynak kodda yapılacak değişiklik veya değişiklik türünü tanımlarlar. Bunlar olarak adlandırılabilirler hatalar veya mutasyon kuralları .
# 3) Mutasyon puanı: Bu, mutantların sayısına dayalı bir puandır.
Aşağıdaki formül kullanılarak hesaplanır:
Bunu not et, mutasyon skoru hesaplanırken eşdeğer mutantlar dikkate alınmaz. Mutasyon puanı şu şekilde de bilinir: mutasyon yeterliliği . Amacımız yüksek bir mutasyon puanı elde etmek olmalıdır.
Mutasyon Testi Nasıl Yapılır
Aşama 1: Yasemin birim testimizi yazalım.
Test Süiti (Jasmine)
describe('User', function() { it('should compare the two numbers from user input', function(){ expect(20).toBeGreaterThan(5); }) });
Adım 2: Orijinal kodu yazın.
Orijinal kod (Javascript)
const user_info = () => { mother_age = parseInt(prompt('Enter mother's age')) daughter_age = parseInt(prompt('Enter daughter's age')) if (mother_age > daughter_age) { alert(`Daughter's age is ${daughter_age}. Mother's age is ${mother_age}. Welcome to the Mother-Daughter program`) } else { alert(`Daughter's age: ${daughter_age}, is more than mother's age: ${mother_age}. Please enter correct ages`) } } user_info();
Aşama 3: Daha sonra, başlangıçtan itibaren başarısız testler yaşamadığımızdan emin olmak için testi orijinal kod üzerinden çalıştıracağız. Gerçekten sıfır hatayla bir test yazdığımızı bildiren bazı çıktılara sahip olmalıyız.
Örneğin:
0.019s 1 spec, 0 arıza, seed 31435 ile rastgele hale getirildi
Orijinal kodun sonucu:
Daughter's age is 5. Mother's age is 20. Welcome to the Mother-Daughter program
4. Adım: Mutantı tanıtın. Bu durumda, büyüktür işleci (ana_yaş> kızı_yaş) bir den daha az operatör (mother_age Mutant kodu (Javascript) Adım 5: Daha sonra testi mutant kod üzerinden çalıştırıyoruz. İşte test sonuçları: 0.017s 1 spec, 0 arıza, seed 89555 ile rastgele hale getirildi Mutant kodun sonucu: 6. Adım: Orijinal versiyon ve mutant versiyonun sonuçlarını karşılaştırın. Bu durumda, aynı test paketi kullanılsa bile farklıdırlar. Bu nedenle mutantımızı öldürdük. Test süitimiz bu nedenle gitmek için iyidir. Birkaç çeşit mutasyon vardır. Bunlar aşağıda açıklanmıştır. Burada, parametre ve / veya sabit değerleri, genellikle +/- 1 ile değiştirerek bir mutasyon tanıtıyoruz. Örnek: Orijinal kod (Javascript) Yukarıdaki kodun çift sayıları çarpması amaçlanmışsa ben<4 , o zaman değer mutasyonu, başlatmayı şu şekilde değiştirmek anlamına gelir: i = 1 olsun . Örnek: Mutant kodu (Javascript) Burada, bir kod bloğundaki bir ifadeyi siliyoruz veya kopyalıyoruz. Ayrıca bir kod bloğundaki ifadeleri yeniden düzenleyebiliriz. Örneğin bir if-else bloğunda, else bölümünü veya hatta eğer-else bloğunun tamamını silebiliriz. Örnek: Orijinal kod (Javascript) Örnek: Mutant kodu (Javascript) Buradaki hedef, kararları veren koddur, Örneğin, değer karşılaştırmaları. Değiştirebiliriz > için< Anne-Kız program örneğimizdeki gibi. Değiştirebileceğimiz diğer operatörler şunları içerir: Mutasyon Testinin (MT) Avantajları şunları içerir: Mutasyon Testinin (MT) dezavantajları şunları içerir: Araçlar, mutant oluşturma sürecini hızlandırmak için kullanışlıdır. MT'de kullanabileceğimiz bazı araçlar şunlardır: Stryker, Jumble, PIT ve Insure ++. Bir örnekten öğrenelim: Diyelim ki, yeni kullanıcıların kaydolmasına izin veren bir hastane sitesi var. Hastanın doğum tarihini veya yaşını okur. 14'ten büyükse, bir genel hekimi ana doktoru olarak atar. Bunu yapmak için, uygun doktoru bulan 'genel hekim' işlevini çağırır. Şimdi, başka işlevler olabilir. Belki 13 yaşın altındaki hastalar bir çocuk doktoruna atanır vb. Ama biz sadece 14 yaş üstü davayı alacağız. Kod şöyle görünebilir: 1) Yaşı Oku Lütfen yukarıdaki kod satırlarının herhangi bir programlama diline özel olmadığını ve çalışmayacağını unutmayın. Bu sadece varsayımsaldır. Bir testçi olarak, eğer veri setim 14, 15, 0, 13 ise - bazı rastgele sayılar. Hedef, 4 değerden (14, 15, 0 ve 3) oluşan veri setinin bu kodla ilgili tüm olası sorunları tanımlamak için yeterli olup olmadığını kontrol etmektir. Ayrıca => okuyun Test senaryolarınızı yürütmeden önce test verilerini tasarlamaya yönelik ipuçları Mutasyon Testi bunu nasıl başarır? İlk ve en önemlisi, programın mutant varyasyonlarını yaratırsınız. Bir mutant, sapma olarak yazılmış bir programdan başka bir şey değildir. Kendi kendine tohumlanan bir hata içerir. Örnekler: Bu değiştirmelere ayrıca 'Mutasyon Operatörleri' Size örnekler göstereyim: Mutant # 1: İlişkisel operatördeğiştirme 1) Okuma Yaşı Mutant # 2: 1) Okuma Yaşı Mutant 3: 1) Okuma Yaşı Mutant # 4: 1) Okuma Yaşı Mutant # 5: İfadenin Kaldırılması 1) Okuma Yaşı Mutant # 6: Mutlak Değer Ekleme 1) Okuma Yaşı Mutant # 7: Yanlış sözdizimi 1) Okuma Yaşı Mutant # 8: Orijinal testle aynı şeyi yapar 1) Okuma Yaşı Bir kez tüm mutantlar yaratılır. Test veri setine tabi tutulurlar. Bizim setimiz 14, 15, 0 ve 13. Veri setimiz bu mutantlardan hangisini bulacak? Aşağıdaki tablodan öğrenin: (Büyütülmüş bir görünüm için resme tıklayın) Gördüğünüz gibi veri değerimiz 14, Mutant 2, 3 ve 4'e karşı çalıştığında başarısızlıklar bulur. Veya 14 mutant 2, 3 ve 4'ü öldürür. Ancak, 1, 6 ve 8'e karşı etkisizdir. Veri kümeniz tüm mutantları öldürürse, etkilidir. Aksi takdirde, daha fazla veya daha iyi test verisi ekleyin. Veri kümesindeki her bir değerin tüm mutantları öldürmesi gerekli değildir. Ama birlikte, hepsini öldürmeleri gerekir.Örneğin:14 2, 3 ve 4'ü öldürür. 15 1, 2 ve 4'ü öldürür. Ve bu böyle devam eder. Ya 5, 7 ve 8? Mutant # 5 - verdiğiniz herhangi bir veri değerinden bağımsız olarak başarısız olacak program örneğidir. Bunun nedeni hem geçerli hem de geçersiz değerler için herhangi bir programlama yapmamasıdır. Mutant # 7 - bir derleme hatası olacaktır. Veya bir komut dosyası dili durumunda, yürütmeyi engelleyecek bir hata. Mutant # 8 - ana programla aynı şeydir. Gördüğünüz gibi, yukarıdaki mutantlar hiç yararlı değil. Bu nedenle, kaçınılması gereken mutantlar şunlardır: Bu kadar çaba gerektirirse, büyük kod örneklerini test etmem gerektiğinde ne olacağını mı düşünüyorsunuz? Mutasyon testi iki şeye dayanır: Yani, en küçük kod birimine odaklanır ve programcının mutasyon testini daha büyük programlara ölçeklendirme becerisine güvenir. Bu eğitim, örneklerle ayrıntılı olarak bu testi gerçekleştirmek için Mutasyon testi tanımı, türleri ve adımlarını kapsamaktadır. Bu ilginç test tekniği Mutasyon Testi hakkında okumaktan ve öğrenmekten keyif aldığınızı umuyoruz. Yazar hakkında: Bu makale STH ekip üyesi Swati S. tarafından yazılmıştır. Lütfen yorumlarınızı, sorularınızı ve düşüncelerinizi aşağıda paylaşın. const user_info = () =>{ mother_age = parseInt(prompt('Enter mother's age')) daughter_age = parseInt(prompt('Enter daughter's age')) if (mother_age
Daughter's age: 5, is more than mother's age: 20. Please enter correct ages
Mutasyon Testi türleri
# 1) Değer Mutasyonu
let arr = (2,3,4,5) for(let i=0; i
let arr = (2,3,4,5) for(let i=1; i
# 2) İfade Mutasyonu
let arr = (2,3,4,5) for(let i=0; i
let arr = (2,3,4,5) for(let i=0; i
# 3) Karar Mutasyonu
Orijinal operatör Mutant operatörü bir <= > = iki > = == 3 === == 4 ve veya 5 || &&
Mutasyon Test Araçları
Mutasyon Testi hakkında daha fazla bilgi
2) Yaş> 14 ise
3) Doktor = Genel Hekim ()
4) Eğer bitir
2) Yaş ise<’
3) Doktor = Genel Hekim ()
4) Eğer
2) Yaş = 14 ise '> ile = değiştiriliyor'
3) Doktor = Genel Hekim ()
4) Eğer
2) Yaş> = 14 ise '> ile> = ile değiştirme'
3) Doktor = Genel Hekim ()
4) Eğer
2) Yaş ise<=’
3) Doktor = Genel Hekim ()
4) Eğer
2) Yaş = 14 ise
3) 'doktor atama bildirimini kaldırın'
4) Eğer
2) Yaş> 14 ise
3) Doktor = Bay X (Mutlak değer ekleme - diyelim ki X bir çocuk doktoru)
4) Eğer
2) Yaş %% 14 ise (yanlış sözdizimi)
3) Doktor = Genel Hekim ()
4) Eğer
2) Yaş> 14 ve yaş> 14 'yaş> 14' ile aynı anlama geliyorsa
3) Doktor = Genel Hekim ()
4) Eğer
Dikkat Edilecek Noktalar
animasyonları çevrimiçi olarak nerede izleyebilirim
Sonuç
Önerilen Kaynaklar