4.5. Bölüm Sonu Uygulama Görevi (Hands-on Challenge)

Bölüm 4 boyunca bir yazılımın hem dış belgelerini hiç çalıştırmadan denetlemeyi (Statik Test) hem de kodunun iç damarlarını, karar makaslarını ve yürütülebilir satırlarını ölçmeyi (Beyaz Kutu Kapsama Kriterleri) öğrendin.

Şimdi bu analitik kaslarını, teknik mülakatlarda adayları en çok eleyen klasik bir algoritma üzerinde sınama vakti!

Görev Senaryosu: “Kargo Ücreti Hesaplama Motoru”

Bir e-ticaret sisteminin sepet ekranındaki kargo hesaplama mantığı metinsel kod (sözde kod / pseudocode) olarak önüne geldi:

Plaintext

 
Satır 1: EĞER (Sepet Tutarı >= 500 TL) İSE:
Satır 2:     Kargo Ücreti = 0 TL
Satır 3: DEĞİLSE:
Satır 4:     EĞER (Kullanıcı VIP Üye == EVET) İSE:
Satır 5:         Kargo Ücreti = 0 TL
Satır 6:     DEĞİLSE:
Satır 7:         Kargo Ücreti = 40 TL
Satır 8: Kargo Ücretini Ekrana Bas (BİTİR).

Senden İstenenler

  1. Mantıksal Dal Analizi: Bu akışta sistemin yön değiştirebileceği toplam kaç adet mantıksal dal (Decision Outcome: True/False) vardır?

  2. Deyim Kapsama (%100 Statement Coverage): Koddaki tüm yürütülebilir emir satırlarına en az bir kez dokunabilmek için minimum kaç test senaryosu gerekir? Bu senaryoların girdi setlerini belirle.

  3. Karar Kapsama (%100 Decision Coverage): Koddaki tüm karar makaslarının (True ve False patikalarının) üzerinden eksiksiz geçebilmek için minimum kaç test senaryosu gerekir? Bu senaryoların girdi setlerini ve geçtikleri dalları listele.

🔍 Görev Çözüm Kılavuzu ve Referans Çizelgesi

Kendi çözümünü kağıt üzerinde çıkardıktan sonra aşağıdaki adımlarla kıyasla:

1. Toplam Mantıksal Dal Sayısı Hesabı

Kodda 2 adet bağımsız karar noktası (makas) bulunmaktadır:

  • Karar 1 (Sepet Tutarı >= 500 TL):

    • Dal 1A: DOĞRU (True) $\rightarrow$ Satır 2’ye gider.

    • Dal 1B: YANLIŞ (False) $\rightarrow$ Satır 3’e (ikinci karara) gider.

  • Karar 2 (Kullanıcı VIP Üye == EVET):

    • Dal 2A: DOĞRU (True) $\rightarrow$ Satır 5’e gider.

    • Dal 2B: YANLIŞ (False) $\rightarrow$ Satır 7’ye gider.

Cevap: Sistemde test edilmesi gereken toplam 4 adet mantıksal dal (outcome) vardır.

2. %100 Deyim Kapsama (Statement Coverage) — Minimum Senaryo Seti

Yürütülebilir emirler: Kargo Ücreti = 0 TL (Satır 2 ve Satır 5), Kargo Ücreti = 40 TL (Satır 7) ve ekrana yazdırma işlemidir (Satır 8).

Tüm bu satırları en az bir kez çalıştırmak için minimum 2 test senaryosu yeterlidir:

Test Senaryosu Sepet Tutarı VIP Üyelik Durumu Çalışan Satırlar (Deyimler) Ekrana Basılan Sonuç
TC-01 600 TL (≥ 500) Fark etmez (-) Satır 1 $\rightarrow$ Satır 2 $\rightarrow$ Satır 8 Kargo: 0 TL
TC-02 300 TL (< 500) HAYIR Satır 1 $\rightarrow$ Satır 3 $\rightarrow$ Satır 4 $\rightarrow$ Satır 6 $\rightarrow$ Satır 7 $\rightarrow$ Satır 8 Kargo: 40 TL
  • Kapsama Değerlendirmesi: Bu iki senaryo ile koddaki tüm satırlara (1, 2, 3, 4, 5, 6, 7, 8) en az bir kez basılmış ve %100 Deyim Kapsama sağlanmıştır.

    (Dikkat: Satır 5’teki 0 TL atamasına Satır 2’de zaten basıldığı için üçüncü bir senaryoya deyim kapsama açısından ihtiyaç duyulmamıştır).

3. %100 Karar Kapsama (Decision Coverage) — Minimum Senaryo Seti

Toplam 4 dalın (1A, 1B, 2A, 2B) tamamının üzerinden geçebilmek için minimum 3 test senaryosu şarttır:

Test Senaryosu Girdiler (Sepet / VIP) Kat Edilen Mantıksal Dallar Kapsanan Karar Çıktısı
TC-Decision-01 Sepet: 600 TL / VIP: Önemsiz Dal 1A (True) 1. Kararın Doğru dalı
TC-Decision-02 Sepet: 200 TL / VIP: EVET Dal 1B (False) $\rightarrow$ Dal 2A (True) 1. Kararın Yanlış, 2. Kararın Doğru dalı
TC-Decision-03 Sepet: 200 TL / VIP: HAYIR Dal 1B (False) $\rightarrow$ Dal 2B (False) 1. Kararın Yanlış, 2. Kararın Yanlış dalı
  • Kapsama Değerlendirmesi: 4 dalın 4’ü de test edilmiş ve %100 Karar Kapsama elde edilmiştir.

                  [ Sepet >= 500 TL mi? ]
                     /                \
             (True) /                  \ (False)
            [Dal 1A]                    [Dal 1B]
               v                           v
     { Kargo = 0 TL }            [ Kullanıcı VIP mi? ]
               \                    /             \
                \           (True) /               \ (False)
                 \        [Dal 2A]                  [Dal 2B]
                  \          v                         v
                   ---> { Kargo = 0 TL }        { Kargo = 40 TL }
                             \                         /
                              -----> [ EKRANA BAS ] <--

4. “Bir de Şöyle Düşün” (Kutu İçeriği)

💡 Bir de Şöyle Düşün: Karayolu Yol Ayrımı ve Tabelalar

Otobanda arabayla ilerlediğini düşün:

  • Deyim Kapsama (Statement): Şehirdeki tüm benzinliklere ve dinlenme tesislerine en az bir kez uğramaktır. Hepsine uğramış olabilirsin; ama hangi kavşaktan döndüğünün bir önemi yoktur.

  • Karar Kapsama (Decision): Yol üzerindeki her bir yön tabelasında (“Ankara Yolu” – True / “Eskişehir Yolu” – False) arabanın burnunu hem sağa hem de sola kırmaktır.

Bir yol ayrımında sadece sağa sapıp solu hiç denemediysen, o sol yolun heyelan nedeniyle kapalı olup olmadığını bilemezsin. Karar testi, makasın iki ucunun da sağlam olduğunu teyit eder.

5. Mini Alıştırma

Mülakat Sorusu: Yukarıdaki e-ticaret senaryosunda bir test uzmanı yalnızca TC-01 ve TC-02 senaryolarını koşarak testi tamamlamış ve raporuna “Deyim Kapsama %100” yazmıştır.

Sistemin hangi karar dalı (Decision Outcome) bu koşumda tamamen kör ve test edilmemiş kalmıştır?

Dal 2A (Kullanıcı VIP Üye == EVET dalı) tamamen kör kalmıştır.

Bu koşumda sepette 500 TL’nin altında kalan ama VIP olan bir müşterinin kargo ücretinin gerçekten 0 TL olup olmadığı (yani VIP indirim kuralının çalışıp çalışmadığı) hiç doğrulanmamıştır!