Durum Geçiş Testi: ATM ve Sipariş Akışları Üzerinden
Yazılım test süreçlerinde her zaman tek bir girdi verip tek bir çıktı beklediğimiz basit senaryolarla karşılaşmayız. Bazı sistemler vardır ki uygulamanın o anki "hafızası" yani bulunduğu konum, kullanıcının bir sonraki adımda ne yapabileceğini doğrudan belirler. Örneğin; giriş yapmamış bir kullanıcı sepeti onaylayamaz, kargoya verilmiş bir sipariş iptal edilemez.
Uluslararası yazılım testi standartlarında (ISTQB), sistemin bu geçmişe ve anlık verilere dayalı davranış değişikliklerini test etmek için Durum Geçiş Testi (State Transition Testing) tekniğini kullanırız. Gelin, mülakatların ve karmaşık iş akışlarının vazgeçilmezi olan bu tekniği, doğru örnekler ve pratik çıktılarla inceleyelim.
Durum (State) ve Geçiş (Transition) Nedir?
Bir yazılımın kullanıcı etkileşimleri, zaman aşımı veya sistem olayları sonucunda içinde bulunduğu ve tetiklenmeyi beklediği anlık aşamalara Durum (State) diyoruz. Bu durumlar arasındaki yer değiştirmelere ise Geçiş (Transition) adı verilir.
Sektörde bu tekniği en iyi açıklayan klasik örnek bir ATM akışıdır. Bir ATM'nin durumları kullanıcının seçtiği modlar değil, sistemin o an neyi beklediğidir:
Kart Bekliyor (İlk Durum)
PIN Bekliyor
Menü Bekliyor
Nakit Bekliyor
Kart ve Makbuz İade Ediliyor (Son Durum)
Siz kartı takmadan ATM size para çekme menüsünü gösteremez. İşte durum geçiş testi, bu adımların sırasını ve aradaki kuralları denetler.
Tasarımın İki Güçlü Silahı: Diyagram ve Tablo
Durum geçiş testi yaparken körlemesine senaryo yazmayız. ISTQB dünyasında işimizi kolaylaştıran iki harika araç vardır:
1. Durum Geçiş Diyagramı (State Transition Diagram)
Sistemin durumlarını dairelerle, bu durumları birbirine bağlayan geçişleri ve olayları (events) ise oklarla gösterdiğimiz görsel haritadır. Büyük resmi görmek ve "Buradan buraya geçiş var mı?" sorusunu sormak için mükemmel bir rehberdir.
2. Durum Geçiş Tablosu (State Transition Table)
Diyagramlar harika olsa da bazen gözden kaçan negatif (geçersiz) senaryoları yakalamakta yetersiz kalabilirler. İşte burada devreye tablo girer. Tüm mevcut durumları satırlara, tüm olası tetikleyicileri (aksiyonları) ise sütunlara yazarız.
Pratik Bir E-Ticaret Sipariş Örneği:
Mevcut Durum | Aksiyon: Ödeme Başarılı | Aksiyon: İptal Et Butonu | Aksiyon: Kargo Firması Teslim Etti |
|---|---|---|---|
Sipariş Alındı | Hazırlanıyor durumuna geç | İptal Edildi durumuna geç | Geçersiz İşlem (Hata vermeli) |
Kargoya Verildi | Geçersiz İşlem | Geçersiz İşlem (Canlıda Bug!) | Teslim Edildi durumuna geç |
Yukarıdaki tabloda yer alan "Geçersiz İşlem" kutucukları, aslında bizim en değerli negatif test senaryolarımızdır. Kullanıcı kargodaki ürünü iptal etmeye çalıştığında sistemin hata verip vermediğini bu tablo sayesinde hatasız planlarız.
Durum Geçiş Testi Nasıl Uygulanır?
Etkili bir senaryo seti kurgulamak için şu adımları izleyebilirsiniz:
Analiz: İş gereksinimlerinden sistemin tüm sonlu durumlarını (finite states) listeleyin.
Haritalandırma: Durumları tetikleyen olayları (girdileri) ve bu geçişlerin sonucunda sistemin üreteceği çıktıları (beklenen sonuçları) belirleyin.
Kapsam (Coverage) Seçimi: Zaman kısıtına göre tüm durumları en az bir kez ziyaret etmeyi mi (State Coverage), yoksa tüm geçerli/geçersiz yolları dönmeyi mi (Transition Coverage) hedeflediğinize karar verin ve caselerinizi yazın.
Özetle
Durum geçiş testi, özellikle bankacılık, e-ticaret sepet süreçleri ve kullanıcı üyelik aşamaları gibi ardışık mantık gerektiren sistemlerde hayat kurtarır. Bu tekniği kullanarak sadece sistemin doğru çalışıp çalışmadığını değil; kullanıcının yapmaması gereken bir hamleyi yaptığında (örneğin sipariş teslim edildikten sonra "ödeme yap" tetiklenirse) sistemin nasıl güvenli bir şekilde hata ürettiğini de doğrulamış olursunuz. Projelerinizde akış haritalarını doğru çıkarmayı ve negatif geçişleri unutmayın!