- Özellik tabanlı test, 30 yıl içinde ana akım haline gelen nadir akademik araştırma örneklerinden biri.
- "Test yazma, üret" sloganı altında çeşitli programlama dili topluluklarında destek gördü.
- Aslen bir Haskell kütüphanesi olan QuickCheck'in Wikipedia sayfasında, diğer diller için 57 yeniden uygulama listeleniyor.
Özellik tabanlı test kütüphaneleri incelemesi
- Bugün en çok kullanılan özellik tabanlı test kütüphaneleri incelenerek 15 yıl önceki (2009) son teknolojiyle karşılaştırılıyor.
- Kütüphanelerin çoğu, en gelişmiş özellik tabanlı test yeteneklerini sunmuyor.
Özellik tabanlı test kütüphaneleri neden bu kadar üzücü bir durumda?
Durum tabanlı ve paralel testler, saf testler kadar kullanışlı değil
- Durum tabanlı modelleme eğitim gerektiriyor.
- Kapalı kaynağın, kurumsal benimsemeye yardımcı olduğu iddiası.
Durum tabanlı modelleme eğitim gerektiriyor
- Durum tabanlı ve paralel testler, genel testlerden farklı bir düşünme biçimi gerektiriyor.
- Bu araçlar yeni kullanıcılara sunulurken uygun eğitim gerekiyor.
Kapalı kaynağın kurumsal benimsemeye yardımcı olduğu iddiası
- Açık kaynağın işe yaramadığı, kapalı kaynak ürünler ve ilgili hizmetlerin benimsemeyi kolaylaştırdığı iddia ediliyor.
Yapabileceklerimiz
- Durum tabanlı ve paralel özellik tabanlı testler için kısa açık kaynak uygulamalar sunmak.
- Geliştiricilerin daha az eğitime ihtiyaç duyması için biçimsel belirtim kısmını daha kolay hale getirmek.
Saf özellik tabanlı test özeti
- Yeni bir fonksiyonu ya da özelliği test etmek iyi bir pratik olarak görülüyor.
- Örneğin, bağlı listeyi tersine çeviren
reverse fonksiyonunu yazdıysanız, boş liste gibi birkaç liste üzerinde test yapmak mantıklı olur.
- Rastgele girdi üretmek, özellik tabanlı testin temel işlevlerinden biri.
- Fikir şu: rastgele girdiler sonunda köşe durumları da bulacaktır.
Durum tabanlı özellik testleri
- Durum tutan bileşenler test edilirken aynı girdi her zaman aynı çıktıyı vermez.
- Durum tabanlı testte, sistemin zaman içinde nasıl değiştiğini sınamak için girdi dizileri üretilir.
- Bellek içi bir referans uygulama (model) kullanılarak durum açıkça tanımlanır.
Örnek: sayaç
- Sayaç, global değiştirilebilir bir değişken kullanılarak uygulanır.
- Model bir tamsayı olarak ifade edilir.
- Test, komut dizileri üretip çalıştırarak gerçek çıktıyla model çıktısını karşılaştırır.
Paralel özellik tabanlı testler
- Paralel testler, yarış durumlarını tespit etmek için durum tabanlı test modelini yeniden kullanır.
- Paralel testler, doğrusal hale getirilebilirlik üzerinden paralel testi yürütmek için sıralı durum makinesi modelini kullanır.
Sonuç ve gelecekteki çalışmalar
- Özellik tabanlı testlerin durumunu iyileştirmek için açık kaynak uygulamalar sunmak ve biçimsel belirtimleri daha kolay hale getirmek gerekiyor.
GN⁺ görüşü
- Bu yazı, özellik tabanlı testin tarihini ve mevcut durumunu iyi açıklıyor.
- Durum tabanlı ve paralel testlerin önemini vurgularken açık kaynak uygulamalara duyulan ihtiyacı da ortaya koyuyor.
- Özellik tabanlı testi daha erişilebilir hale getirmenin yollarını öneriyor.
- Benzer işlevlere sahip diğer projeler arasında Hypothesis(Python) ve PropEr(Erlang) bulunuyor.
- Yeni bir teknolojiyi ya da açık kaynağı benimserken eğitim ve desteğin gerekli olduğunu vurguluyor.
1 yorum
Hacker News görüşleri
clojure.spec.alphavetest.checkkullanma deneyimi iyiydihypothesis, büyük veri kümelerini işleyemediği için kullanmayı bıraktımproptestkullanarak sık sık durum tabanlı özellik testleri yazıyorumStateModel, ek framework kodu gerektirdiği için verimli değil