4.3. Adım Adım Metodoloji: Kodun İç Anatomisi ve Statik İnceleme

Bu bölümde yazılım kalitesinin iki tamamlayıcı sütununu inceleyeceğiz:

  1. Statik İnceleme: Kodu bilgisayarda çalıştırmadan, insan zihni ve otomatik analiz araçlarıyla denetleme sanatı.

  2. Beyaz Kutu Kapsama: Kodun içindeki patikaların, komutların ve karar makaslarının ne kadarının test edildiğini ölçen matematiksel disiplin.

4.3.1. Statik Test ve Gözden Geçirme Türleri (Reviews)

Bir dokümanı veya kaynak kod satırını bilgisayarda koşturmadan incelemek, bir metni baskıya gitmeden önce tashih etmeye benzer. Ancak her incelemenin derinliği ve ciddiyeti aynı değildir. ISTQB standardı, gözden geçirmeleri resmiyet derecesine göre 4 ana basamakta tanımlar:

Gözden Geçirme Türü Resmiyet Seviyesi Oturumu Yöneten Temel Amaç Çıktı / Dokümantasyon
Gayriresmi (Informal Review) En Düşük (Kayıtsız) Akran Mühendis (Peer) Hızlı fikir alışverişi, gözden kaçan basit hataları yakalamak Genellikle yazılı rapor tutulmaz
İçerikten Geçme (Walkthrough) Orta (Yarı Yapılandırılmış) İş Ürününün Yazarı Ekibi bilgilendirmek, eğitmek ve ortak algı oluşturmak Toplantı notları ve öneri listesi
Teknik Gözden Geçirme (Technical Review) Yüksek (Planlı) Bağımsız Lider / Mimar Teknik uygulanabilirlik, tasarım standartları ve mimari uyum Resmi değerlendirme raporu
Resmi Teftiş (Inspection) En Yüksek (Kurallı & Katı) Bağımsız Moderatör Kusurları metriklerle bulmak, süreç kalitesini iyileştirmek Resmi Hata Günlüğü ve Metrik Raporu

1. Gayriresmi Gözden Geçirme (Informal Review)

Resmi bir takvimi, kontrol listesi veya toplantı odası yoktur. İki geliştiricinin monitör başında yan yana oturup kod satırlarına bakması (Pair Programming) veya bir test uzmanının iş analistinin masasına gidip “Şu kuralda bir mantık çelişkisi var gibi, bakar mısın?” demesi gayriresmi incelemedir. Hızlı ve ucuzdur.

2. İçerikten Geçme (Walkthrough)

Toplantıyı belgenin ya da kodun bizzat yazarı yönetir. Yazar, senaryoyu veya kodu ekrana yansıtır; salondaki diğer mühendislere ve paydaşlara adım adım üzerinden geçerek hikâyeyi anlatır. Asıl amaç ekibi eğitmek, herkesin aynı dili konuştuğundan emin olmak ve geri bildirim toplamaktır.

3. Teknik Gözden Geçirme (Technical Review)

Konunun uzmanlarının (yazılım mimarları, kıdemli test mühendisleri, güvenlik uzmanları) bir araya geldiği resmi bir oturumdur. Duygulardan uzak, tamamen teknik gerçekler tartışılır: “Bu mimari saniyede 10.000 isteği kaldırabilir mi?”, “Veritabanı yapısı güvenlik protokollerine uygun mu?” soruları yanıtlanır.

4. Resmi Teftiş (Inspection – En Üst Disiplin)

Havacılık, tıp veya bankacılık gibi kritik alanlarda uygulanan en katı gözden geçirme türüdür. Sürecin kesin kuralları, giriş-çıkış kriterleri ve önceden hazırlanmış detaylı Kontrol Listeleri (Checklists) bulunur.

En kritik kural: Yazar, oturumu asla yönetemez! Toplantıyı tarafsız bir Moderatör (Kolaylaştırıcı) yönetir. Oturum boyunca bulunan tüm açıklar bir Yazman (Scribe) tarafından tek tek hata takip sistemine işlenir.

🤖 Modern Dünyanın Gözü: Otomatik Statik Kod Analizi

Günümüzün modern yazılım hatlarında (CI/CD) statik inceleme sadece insan gözüne bırakılmaz. Yazılımcı kodunu sisteme yüklediği anda; SonarQube, ESLint gibi araçlar kodu çalıştırmadan arka planda milisaniyeler içinde tarar. Kullanılmayan ölü değişkenleri, güvenlik açıklarını (SQL Injection riskleri) ve karmaşık kod bloklarını anında bularak canlıya geçiş kapısını otomatik olarak kilitler.

4.3.2. Beyaz Kutu Kapsama Kriterleri (Code Coverage)

Kara kutuda sistemin içini görmüyorduk. Beyaz kutuda ise elimizde kodun röntgen filmi vardır. Peki kodun ne kadarını test ettiğimizi nasıl ölçeriz?

Bunu iki temel kavramla hesaplarız: Deyim Kapsama ve Karar Kapsama.

Bir ATM uygulamasındaki şu basit kod mantığını inceleyelim:

Plaintext

 
// ATM Para Çekme Karar Mantığı
Satır 1: EĞER (Kart_Aktif == EVET) İSE:
Satır 2:     EĞER (Bakiye >= Tutar) İSE:
Satır 3:         Parayı_Ver();
Satır 4:         Bakiye_Düş();
Satır 5: BİTİR

1. Deyim Kapsama (Statement Coverage)

  • Deyim (Statement) Nedir? Bilgisayara “Bunu yap!” diyen her bir bağımsız emir/kod satırıdır.

  • Ne Ölçer? Yazılmış olan yürütülebilir kod satırlarının yüzde kaçının testler sırasında en az bir kez çalıştırıldığını hesaplar.

$$\text{Deyim Kapsama Oranı (\%)} = \frac{\text{Testte Çalıştırılan Deyim Satırı Sayısı}}{\text{Koddaki Toplam Yürütülebilir Deyim Satırı Sayısı}} \times 100$$

Deyim Kapsamanın Ölümcül Yanılsaması:

Yukarıdaki kod için tek bir test senaryosu koştuğumuzu hayal edelim:

  • Test 1 (Mutlu Yol): Kart Aktif = EVET ve Bakiye = Yeterli.

  • Ne Olur? Bilgisayar Satır 1’e girer, Satır 2’ye geçer, Satır 3’ü çalıştırır, Satır 4’ü işletir ve Satır 5’te işlemi bitirir.

  • Sonuç: Koddaki tüm satırlar (1, 2, 3, 4, 5) çalışmıştır. Deyim Kapsama Oranı = %100!

Peki sistem gerçekten kusursuz test edildi mi? Kocaman bir HAYIR!

Çünkü kartın pasif olduğu veya bakiyenin yetersiz kaldığı alternatif durumları (negatif yolları) hiç denemedik. İşte bu kör noktayı aşmak için bir üst seviye tekniğe geçeriz.

2. Karar / Dal Kapsama (Decision / Branch Coverage)

  • Karar / Dal (Branch) Nedir? Kodun içindeki her bir EĞER (IF) şartı, demiryolundaki bir tren makası gibidir. Her makastan iki farklı ray çıkar: DOĞRU (True) veya YANLIŞ (False).

  • Ne Ölçer? Koddaki tüm karar makaslarından çıkan mantıksal yolların (True ve False dallarının) yüzde kaçının test edildiğini hesaplar.

$$\text{Karar Kapsama Oranı (\%)} = \frac{\text{Koşulan Dal Çıktıları (True/False)}}{\text{Toplam Dal Çıktısı Sayısı}} \times 100$$

Yukarıdaki kodumuzda 2 adet EĞER kararı vardır:

  1. Kart_Aktif mi? → Çıkış Yolları: [True] veya [False]

  2. Bakiye Yeterli mi? → Çıkış Yolları: [True] veya [False]

Toplam 4 adet dal (branch) mevcuttur.

  • Sadece Mutlu Yolu denediğimizde: İki kararın da yalnızca True dalından geçeriz (2 dal test edilir).

  • Karar Kapsama Oranı: $\frac{2}{4} \times 100 = \mathbf{\%50}$ çıkar!

    Yani deyim kapsaması %100 çıkan o test, karar kapsamada gerçekte sistemin sadece yarısını denetleyebilmiştir!

                       [ Kart Aktif mi? ]
                          /          \
                  (EVET) /            \ (HAYIR)  <-- [Dal 2: Test Edilmedi!]
                        v              v
              [ Bakiye Yeterli mi? ]  [ Çıkış ]
                 /          \
         (EVET) /            \ (HAYIR)           <-- [Dal 4: Test Edilmedi!]
               v              v
        [ Parayı Ver ]     [ Çıkış ]

📐 Beyaz Kutunun Altın Kuralı

⚠️ Kritik Mülakat Kuralı:

%100 Karar Kapsama (Decision Coverage) sağlanan bir sistemde, mantıken kodun tüm yolları dolaşıldığı için %100 Deyim Kapsama (Statement Coverage) da otomatik olarak garanti edilir.

Ancak %100 Deyim Kapsama, karar noktalarındaki negatif dalları (False çıkışlarını) atlayabildiği için asla %100 Karar Kapsamayı garanti etmez!

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

💡 Bir de Şöyle Düşün: Yangın Çıkış Kapısı ve Koridor

Bir otelin acil tahliye koridorunu denetleyen bir müfettiş olduğunu hayal et:

  • Deyim Kapsama (Statement Coverage): Otelin ana koridorunda baştan sona yürümektir. Koridorun tüm zeminine ayak basarsın, “Bütün koridoru (tüm satırları) yürüdüm, denetim %100 tamam” dersin.

  • Karar Kapsama (Decision Coverage): Koridorda yürürken sağ tarafta gördüğün kırmızı yangın çıkış kapısının kolunu indirip açmayı denemektir (Yanlış / Acil Durum Dalı).

Koridorda dümdüz yürümek kapının kilitli olup olmadığını göstermez. Yangın anında (hata anında) o kapının açılıp açılmadığını test etmeyen bir denetçi, oteli güvenli ilan edemez.

5. Mini Alıştırma

Senaryo: Bir alışveriş merkezinin otopark bariyer yazılımında şu kod bloğu çalışmaktadır:

Plaintext

 
Satır 1: EĞER (Abone_Kartı_Okutuldu == EVET) İSE:
Satır 2:     Bariyeri_Aç();
Satır 3: BİTİR

Test mühendisi eline geçerli bir abone kartı alır, bariyere okutur. Bariyer açılır ve işlem biter.

Soru: Bu tek test senaryosu çalıştırıldığında:

  1. Deyim Kapsama (Statement Coverage) oranı yüzde kaçtır?

  2. Karar Kapsama (Decision Coverage) oranı yüzde kaçtır?

  1. Deyim Kapsama = %100: Koddaki tüm yürütülebilir satırlar (Satır 1, 2 ve 3) en az bir kez çalışmıştır.

  2. Karar Kapsama = %50: Koddaki Abone_Kartı_Okutuldu kararının yalnızca EVET (True) dalı test edilmiştir. Kart okutulmadığında veya geçersiz kart okutulduğunda sistemin ne tepki vereceğini gösteren HAYIR (False) dalı hiç test edilmemiştir (Toplam 2 daldan sadece 1’i test edilmiştir).