İşte size bir emir: Mutluluğu kederde arayın. Çalış, yorulmadan çalış.
—Fyodor Dostoyevsky
2002’den beri yazılım testi işinin içindeyim ve test yürütme tekniklerinin tatmin edici bir açıklamasını hiç duymadım. Test tasarımının, kuşkusuz test uygulamasından daha fazla zeka, analitik düşünme ve yaratıcılık gerektirdiğini kabul ediyorum; ama yine de, iyi test yürütmenin sayısız faydasını yaşayabilirsiniz.
Yürütme sürecini üç ana bölüme ayıracağım: test yürütme durumları, test yürütme öncelikleri ve test yürütme aşamaları. Hepsini bir araya getirdiğinizde, iyi bir test yürütme çerçevesine sahip olduğunuz ve savaşa hazır olduğunuz bir noktaya gelebilirsiniz.
Test Yürütme Durumları
Hepimiz test senaryoları yürütüyoruz; ancak, onları birçok kez yanlış derecelendiriyoruz. Aşağıda en önemli yürütme durumlarından bazıları (bunlara test sonuçları da diyebilirsiniz) ve tanımları yer almaktadır. Bunları doğru kullanıyorsanız, yaptığınız işe devam edin. Değilse, test senaryolarını işaretleme şeklinizi değiştirmeyi düşünebilirsiniz. Elbette bu listeye eklemeler bile yapabilirsiniz ama buradakilerle az çok olası tüm durumları/sonuçları ele alıyorsunuz.
- Başarılı: test prosedürü yürütülür ve beklenen sonuç karşılanır.
- Başarısız: test prosedürü yürütülür ve beklenen sonuç karşılanmaz.
- Sonuçsuz: test prosedürü yürütülür ve net bir sonuç elde etmek için daha fazla analiz gerektirir.
- Blok: Test senaryosu ön koşullarından en az birinin karşılanmaması nedeniyle test prosedürü yürütülemez.
- Ertelenmiş: test prosedürü henüz yürütülmedi ve yürütme için gelecekteki bir test döngüsü/sürümü için ertelendi.
- Devam ediyor: test prosedürü şu anda yürütülüyor.
- Çalıştırılmadı: test prosedürü henüz yürütülmedi.
Test Yürütme Öncelikleri
Hemen hemen her mobil yazılım projesinde, test bütçeleri yağmalanmakta ve testçilere test için gerekenden daha az zaman verilmektedir. Bir testçi her zaman daha azıyla daha fazlasını yapması gereken kişidir. Mobil yazılım projeleri, temelsiz taahhütler ve pazara sunma çılgınlığıyla dolu olduğundan, ek bir test saati, çöldeki bir vaha kadar değerlidir.
Bu koşullar altında, bir test uzmanı, test senaryolarını yürütürken çok yapılandırılmış ve akıllı olmalıdır. Testin herhangi bir zamanında bütçeniz herhangi bir mantıklı açıklama yapılmadan kesilebilir ve “çalıştırılmayan” test senaryolarınızı tamamlamanız için size yeterli sürenin altında bir süre verilebilir. Böyle bir durumda bunları doğru önceliklere göre yürüttüğünüzü bilmeniz gerekir.
Test yürütme önceliği aşağıdaki değişkenler tarafından hesaplanabilir. Her bir öğe için ağırlıklar atar ve hepsini sayarsanız, nihai bir test senaryosu önceliği üzerinde sonuca varabilirsiniz. Burada resmi bir numaralandırma şeması önermeyeceğim, çünkü aşağıdaki öğelerin ağırlığının her test organizasyonu için değişebileceğine inanıyorum, bu nedenle genel bir şema formüle edilemez. Bu yüzden lütfen bir göz atın ve kendinizinkini yaratın.
- Test senaryosunun kapsadığı riskler, test senaryosu tarafından hangi risk öğelerinin kullanıldığı ve bunların ne kadar önemli/kritik oldukları ile açıklanabilir.
- Test senaryosunun kapsadığı platformlar, test senaryosu tarafından hangi mobil işletim sisteminin kullanıldığı açıklanabilir.
- Test senaryosunun karmaşıklığı, arayüzler, iş kuralları, sınır değerleri, veri giriş noktaları ve yazılım bileşenleri/özellikleri açısından test senaryosunun ne kadar karmaşık olduğu ile açıklanabilir. Ayrıca test senaryosunun toplam test adımlarını (prosedürlerini) sayabilir veya bağımlılıklarını tanımlayabilirsiniz.
- Test senaryosunun derinliği, test senaryosunun tek bir özelliğin derinlemesine/tam işlevselliğini ne kadar derin uyguladığı ile açıklanabilir.
- Test senaryosunun genişliği, test senaryosunun farklı işlevselliklerin/özelliklerin varyasyonlarını üst düzey bir perspektifte ne kadar geniş bir şekilde uyguladığı ile açıklanabilir. Başka bir deyişle, test senaryosu kaç özellik içeriyor?
Test Yürütme Aşamaları
Ben büyük bir futbol hayranıyım ve yakın zamanda bir Trabzonspor (desteklediğim Türk futbol takımı) maçını izlerken, futbolun oyun içi aşamalarının test uygulama aşamalarıyla oldukça paralel olduğunu fark ettim. Daha açık bir şekilde anlatmak gerekirse, bir futbol takımı topa sahip olduğunda, takımın hücum aşamasında olduğunu söyleyebiliriz. Takım topu kontrol etmiyorsa, savunma aşamasındadır. Ve takım topu kaybeder veya kazanırsa, hücumdan savunmaya veya savunmadan hücuma geçiş aşamasından geçer.
Bu tanımları mobil teste uyguladığımızda şu şekilde tanımlanabilirler:
- Saldırı aşaması: Bir testçi bir test senaryosu yürütürken, test prosedürlerini tek tek yürütür. Ve test eden kişi eylemdeyken (örneğin, bir düğmeye tıklıyor, veri giriyor veya bir seçenek belirliyor) açık alanlardan yararlanmaya ve kusurları yakalamaya çalışıyor. Bu aşamadaki ana odak, yazılıma saldırmaktır. Bir kusur bulmak, testçinin bir gol attığı anlamına gelir.
- Savunma aşaması: Bir testçi, gerçek çıktıları beklenen sonuçlarla karşılaştırırken, savunma aşamasındadır. Buradaki asıl mesele muhalefeti (yazılımı) inkar etmektir. Yazılım tarafından beklenen sonuçlar karşılanıyorsa, bu, testçinin iyi savunma yapmadığı anlamına gelir. Başarılı bir test prosedürü, yazılımın bir gol attığı anlamına gelir.
- Geçiş aşaması: Bu aşama, sahiplik değiştikten hemen sonraki adaptasyon dönemini ifade eder. En kısa dönem olarak kabul edilebilir. Bir testçi, test prosedürünü çalıştırmayı tamamladıktan sonra (saldırı aşamasını sonlandırarak), hızla beklenen sonuçları analiz etmeye (savunma aşamasını başlatma) geçmelidir. Yeni aşamaya uyum sağlamak için zihniyetinizi değiştirmeniz gerekiyor.
Saldırırken daha şüpheci, aşırı eleştirel, amansız, yaratıcı ve kurnaz olmanız gerekir. Savunma yaparken daha sabırlı, isabetli, dikkatli ve objektif olmanız gerekiyor. Çoğu zaman bu iki test modu arasında geçiş yapmak oldukça zordur ve bu, bir testçinin kusurları tespit etme hevesli zihniyetinin doğal sınırlamaları olarak adlandırılabilir.
Bu bölümü okuduktan sonra, test uygulamasının çocuk oyuncağı olmadığını bir kez daha anladım. Bu yüzden lütfen şunu söylemekten vazgeçin:
- Test yürütme herkes tarafından yapılabilir.
- Test yürütme, özel düşünme, beceri ve zihniyet gerektirmez. Özerk bir eylemdir.
- Sadece bir test prosedürü yürütün (bir düğmeye tıklayın ve sonucu bekleyin) ve çıktıyı beklenen sonuçla karşılaştırın. Arkasında özel bir mantık yok.
- Test yürütme çocuk işidir.