Her mühendislik ekibi er ya da geç aynı konuşmayı yapar.
Build'de bir test kalır. Biri inceler. Kırk dakika sonra üründe bir sorun olmadığını anlar. Bir sınıf adı değişmiştir. Seçici eşleşmemiştir. Locator'ı günceller, düzeltmeyi gönderir, build yeşile döner.
Bu hikaye çoğu ekipte haftada onlarca kez tekrarlanır. Ve bunun gerçekte neye mal olduğunu kimse takip etmez.
Kırılgan testlerin mühendislik ekiplerine bindirdiği gizli vergi. Yapay zeka destekli test araçlarının çoğunun durumu neden iyileştirmek yerine kötüleştirdiği. Ve dürüst bir test paketinin gerçekte neye benzediği.
Yazının sonunda, mevcut test paketinizin size gürültü olarak tam olarak neye mal olduğunu gösteren bir hesaplayıcı var. Çoğu ekip çıkan rakama şaşırıyor.
İki Tür Test Hatası
Bir test kaldığında iki şeyden yalnızca biri doğrudur.
Ürün bozulmuştur. Test gerçek bir regresyon yakalamıştır. İstediğiniz hata budur. Bir test paketinizin olmasının bütün nedeni budur.
Ya da test bozulmuştur. Ürün sorunsuz çalışıyordur. Bir sınıf adı değişmiş, bir div başka bir div'in içine alınmış, bir buton üç piksel sağa kaymıştır. Test, bir şeyler ters gittiği için değil, yazılış biçimi yüzünden kalıyordur.
Bu ikinci kategori gürültüdür. Pahalı ve güveni yok eden bir gürültü.
Bir gürültü hatasını incelemeye harcanan her dakika, ürünü geliştirmeye harcanabilecek bir dakikadır. Her yanlış alarm, ekibinizin test paketine duyduğu güvenden küçük bir parça koparır. Sonunda ekipler testlerine güvenmeyi bırakır. Build'ler CI kırmızıyken merge edilir. Sürümler doğrulama yapılmadan yayına çıkar. Test paketi, işe yarar bir sinyal olarak sessizce ölür.
Self-Healing Neden Bir Çözüm Değil, Bir Yamadır
Sektör bunun bir sorun olduğunu biliyor. Standart yanıt, kendi kendini onaran (self-healing) testler oldu.
mabl, Testim ve Octomind gibi araçlar, seçici tabanlı motorlarının üzerine makine öğrenmesi katmanları kurdu. Bir locator bozulduğunda bu katman elementi yakındaki niteliklerden, üst öğe yapısından ya da anlamsal benzerlikten yararlanarak bulmaya çalışır. Bazen işe yarar. Bazen yaramaz.
Zekice bir yama. Ama yine de bir yama.
Kırılgan temel hâlâ yerinde duruyor. Test hâlâ seçicilere bağlı. Makine öğrenmesi katmanı bu bağımlılığı yalnızca biraz daha az kırılgan hale getiriyor. Kırılganlığın kendisini değiştirmek yerine üzerine zeka ekliyorsunuz.
Gerçek bir çözüm, farklı bir soru sormayı gerektirir. "Seçicileri nasıl daha az kırılgan yaparız?" değil, "Testler neden seçicilere bağlı olsun ki?"
Bir İnsan Test Uzmanı Gerçekte Ne Yapar
Bir QA mühendisi DOM'a bakmaz. Ekrana bakar.
"Submit" yazan bir buton görür. Ona tıklar. Doğru şeyin olup olmadığını kontrol eder.
Butonun btn-primary-v2 sınıfına sahip olduğunu ya da div.checkout-wrapper > form > section:nth-child(3) içinde durduğunu bilmez, umursamaz da. Tasarımcı yarın sınıfın adını değiştirse insan butonu yine bulur. Yine tıklar. Test yine çalışır.
Çıta budur. Bir test, kullanıcının yaşadığı deneyime duyarlı, bunun nasıl uygulandığına ise kör olmalıdır. Seçici tabanlı test bunu tam tersinden yapar.
Özelleşmiş Yapay Zeka Modelleri Sözleşmeyi Nasıl Değiştiriyor
Text2Test'te yazılım testi için özelleşmiş yapay zeka modelleri geliştirdik. Bu modeller ekranı HTML'i ayrıştırarak değil, bir insan test uzmanının yaptığı gibi görsel ve anlamsal olarak, öğelerin neye benzediğine ve ne yazdığına bakarak okur.
Bir testi düz metinle yazdığınızda: "Go to the checkout page, fill in the card details, click Submit, verify the confirmation screen appears". Text2Test bu talimatı ekranda ne olduğuna bakarak yürütür. DOM'u sorgulayarak değil.
Pratikteki sonucu şudur: bir sınıf adı değiştiğinde, bir bileşen yeniden düzenlendiğinde ya da bir tasarımcı bir butonun yerini değiştirdiğinde test bozulmaz. Ürün bozulduğunda bozulur. Submit çalışmaz olur. Onay ekranı görünmez. Ödeme akışı gerçekten bozuktur.
Testte determinizm bu demektir. Ürün hata verdiğinde ve yalnızca o zaman kalan bir test.
Dürüst Olmayan Test Paketi
Bugün çoğu test paketi dürüst değil. Bir şey bozuk değilken size bozuk olduğunu söylüyor.
Bir test paketinin dürüstlüğü ölçülebilir. Hataların yüzde kaçı gerçek ürün regresyonlarını, yüzde kaçı seçici kayması, zamanlama sorunları ve altyapı kararsızlığından gelen gürültüyü temsil ediyor?
Çoğu ekipte bu oran %50'nin hayli altında. Bazı ekipler, hataların %80'inin gürültü olduğu test paketleriyle çalışıyor.
Bu, her mühendislik saatinden alınan bir vergidir. Ve katlanarak büyür. Ne kadar çok test eklerseniz o kadar çok gürültü üretirsiniz. Sonunda paket net zarara geçer. Sizi koruduğundan daha fazla yavaşlatır.
Test Paketinizin Dürüstlük Skorunu Hesaplayın
Bunu sayıya döken bir hesaplayıcı geliştirdik. Mevcut test paketinizle ilgili beş rakamı girin, size üç şey versin: Dürüstlük Skorunuz, gürültü hatalarına haftada harcanan saat ve bunun mühendislik zamanı cinsinden yıllık maliyeti.
Test Paketi Dürüstlük Hesaplayıcısı
Kaydırıcıları ekibinize göre ayarlayın. Sonuçlar anında güncellenir.
Varsayılan değerler sektör araştırmalarına dayanır. Google mühendislik verileri, CI hatalarının %84'ünün gerçek regresyonlardan değil, kararsız (flaky) testlerden kaynaklandığını gösteriyor. Tricentis, QA zamanının %30 ila %50'sinin test bakımına gittiğini bildiriyor. Sektör kıyaslamaları, gürültü incelemesinin bir QA mühendisinin çalışma haftasının %20 ila %30'unu aldığını ortaya koyuyor. Kaynaklar: Google Engineering Blog (Micco, 2016), Tricentis State of Testing, LambdaTest Future of QA Survey 2024.
Bir test paketi dürüst hale geldiğinde üç şey olmaya başlar.
Mühendislerin güveni geri gelir. Kırmızı build'ler yeniden ciddiye alınır, çünkü artık gerçekten bir anlam taşırlar. Ekip hatalara rağmen merge etmeyi bırakır.
Kapsam genişler. Test yazmak bir vergi gibi gelmez, çünkü testler kararlı kalır. Ekipler daha az değil, daha fazla test ekler.
Sürümler yavaşlamaz, hızlanır. Test paketi bir engel olmaktan çıkıp yeşil ışık sistemine dönüşür, çünkü geçen testler seçicilerin kaymadığının değil, ürünün çalıştığının kanıtıdır.
Yazılım testi için özelleşmiş yapay zeka üzerine kurulu bir test paketi, bir testin ne olduğuna dair temel sözleşmeyi değiştirir. Test, sade bir dille yazılan ve kullanıcının gerçekten gördüğü şeye karşı yürütülen bir davranış spesifikasyonuna dönüşür. Test, seçici değildir. Test, davranıştır.
Text2Test'te inşa etmeye çalıştığımız şey bu. Size karşı dürüst olan bir test paketi.
Yapay zeka destekli testte çıta, testleri daha hızlı üretmek değil. Gerçekten güvenebileceğiniz testler üretmek.
