Test Otomasyonunu "Tool Fetişizmi"ne Kurban Etmek

Paylaş
Test Otomasyonunu "Tool Fetişizmi"ne Kurban Etmek
Photo by Growtika / Unsplash

Seri 2: Sahadan Hatalar – Bölüm 4

Teknoloji dünyasının çok tipik bir hastalığı var: Bir problemi çözmek yerine, o problemi çözmek için kullanılan araçlara aşık olmak.

Yazılım test ekipleri bu tuzağa belki de herkesten daha hızlı düşüyor. LinkedIn akışları, konferans başlıkları ve teknik bültenler sürekli "yeni nesil", "yapay zekâ destekli", "kodsuz", "ultra hızlı" araçların vaatleriyle dolu. Her birkaç yılda bir sektörün önüne yeni bir kurtarıcı atılıyor ve ekiplerde şu konuşma başlıyor:

"Artık X aracını bırakıp Y framework’üne geçmeliyiz. Bütün sorunlarımızı bu çözecek."

Ben bu döngüyü sahada defalarca gördüm. Selenium’dan Cypress’e, Cypress’ten Playwright’a ya da aradaki onlarca popüler kütüphaneye koşan ama günün sonunda aynı kararsız testlerle, aynı bakım maliyetleriyle ve aynı kırılgan mimariyle baş başa kalan onlarca takım…

Çünkü sorun hiçbir zaman kullanılan çekiçte değildi; çiviyi nereye ve nasıl çakacağını bilmemekteydi.

Araç Değiştirerek Süreç İyileşmez

Bir ekip test otomasyonunda başarısız oluyorsa, bunun sebebi yüzde doksan ihtimalle kullandığı framework’ün yetersizliği değildir.

Sebep çoğunlukla şunlardır:

  • Test edilebilir olmayan (untestable) kötü bir ön yüz mimarisi,
  • Doğru düzgün id veya veri özniteliği (data-testid) barındırmayan HTML yapıları,
  • Asenkron çağrıları ve state yönetimini anlamadan körlemesine atılan bekleme (wait) süreleri,
  • Test senaryolarının birbirine bağımlı yazılması,
  • Ve en önemlisi; neyin neden test edildiğine dair stratejik bir aklın olmaması.

Siz bu temeli düzeltmeden sadece alttaki kütüphaneyi değiştirdiğinizde, yaşadığınız kaosu sadece yeni bir syntax ile yeniden yazmış olursunuz. İlk bir iki ay her şey harika görünür; yeni aracın kurulumu kolaydır, dokümantasyonu moderndir, ekip heveslidir.

Ama proje büyüyüp test sayısı yüzleri, binleri bulduğunda o eski tanıdık kabus aynen geri döner: Flaky testler, şişen pipeline süreleri ve güvenilmez raporlar.

"En Yeni Olan En İyisidir" Yanılgısı

Yazılım geliştiriciler ve test mühendisleri olarak hepimiz yeni teknolojileri denemeyi, CV’mize popüler araçları eklemeyi severiz. Bu çok insani bir motivasyon. Ancak bir mühendislik liderinin masasında duran en kritik sorumluluk, bu heves ile şirketin ve ürünün gerçek ihtiyaçları arasındaki dengeyi korumaktır.

Bir aracın popüler olması, sizin ekibiniz için doğru çözüm olduğu anlamına gelmez.

  • Ekibinizin yetkinliği o dili veya paradigmayı ne kadar destekliyor?
  • O aracın arkasındaki topluluk ne kadar güçlü, yarın bir tıkanıklık yaşadığınızda çözümü ne kadar hızlı bulabileceksiniz?
  • CI/CD altyapınız o aracın paralel koşum maliyetlerini ve kaynak tüketimini kaldırabilecek mi?
  • En önemlisi: Eski yapıyı çöpe atıp yeni araca geçmek için harcayacağınız aylar, gerçekten ürüne ölçülebilir bir kalite artışı getirecek mi?

Bu soruları sormadan sırf "trend" olduğu için araç değiştirmek, teknik borcu kapatmaz; sadece yeni bir ambalajla erteler.

Çekiç mi, Marangoz mu?

Çok sevdiğim bir benzetme vardır: Kötü bir marangoza dünyanın en pahalı Japon testeresini de verseniz, ortaya çıkardığı masa sallanır. Ama usta bir marangoz, elindeki mütevazı aletlerle bile sağlam, dengeli ve ömürlük bir iş üretir.

Test otomasyonunda da asıl zanaat;

  • Sayfa nesne modellerini (Page Object Model veya benzeri mimarileri) ne kadar temiz kurguladığınızda,
  • Test verisini ortamdan nasıl izole ettiğinizde,
  • Hangi katmanda neyi ölçeceğinizi (UI vs. API vs. Unit) ne kadar doğru paylaştırdığınızda yatar.

Bunları doğru yapan bir ekip için kullandığı framework sadece bir uygulama detayından ibarettir. Selenium ile de kaya gibi sağlam bir altyapı kurabilirsiniz; en modern kütüphaneyle de içinden çıkılmaz bir spagetti yaratabilirsiniz.

Masadaki Duruş

Bir test lideri olarak ekibimden yeni bir araç önerisi geldiğinde ilk baktığım şey o aracın sunduğu cafcaflı özellikler değildir.

Şunu sorarım: "Bugün yaşadığımız hangi kök problemi çözemiyoruz da bu araca ihtiyaç duyuyoruz?"

Eğer cevap süreçteki bir tembelliği, mimarideki bir eksikliği ya da kötü yazılmış bir senaryo setini perdelemek için veriliyorsa, orada durmak gerekir. Çünkü hiçbir yazılım kütüphanesi, disiplinli bir mühendislik aklının ve iyi bir test tasarımının yerini tutamaz.

Araçlara değil, çözdüğünüz probleme odaklandığınız gün; test otomasyonu ekibin sırtındaki bir yük olmaktan çıkıp gerçekten güven veren bir güce dönüşür.

Böylece Seri 2: Sahadan Hatalar serisini de tamamladık.

Devamını oku

Prod’a Çıkış Gecesi Yaşananlar: En Kusursuz Plan Neden Patlar?

Prod’a Çıkış Gecesi Yaşananlar: En Kusursuz Plan Neden Patlar?

Seri 2: Sahadan Hatalar – Bölüm 3 Saat gece yarısını geçmiş. Teams kanalında veya toplantı odasında gergin ama aynı zamanda işi bitirmiş olmanın getirdiği yorgun bir rahatlama var. Tüm feature branch’ler birleştirilmiş, staging ortamında regression testleri başarıyla tamamlanmış, checklist’teki maddelerin yanına tek tek yeşil tikler atılmış. "Deployment Plan&

Savaş Avcu tarafından
Test Verisi Çöplüğü: Bir Ekip Kendi Yarattığı Veride Nasıl Boğulur?

Test Verisi Çöplüğü: Bir Ekip Kendi Yarattığı Veride Nasıl Boğulur?

Seri 2: Sahadan Hatalar – Bölüm 2 Yazılım geliştirme süreçlerinde çoğu zaman kodun kendisine, mimariye veya pipeline konfigürasyonlarına odaklanılır. Ancak bir test mühendisinin günlük mesaisini en çok tüketen, sabrını en çok sınayan gizli bir canavar vardır: Test verisi. Bir gün test ortamında koştuğumuz kritik bir ödeme akışının sürekli patladığını gördük. Kod

Savaş Avcu tarafından