bugun-bir-bug-ogrendinmi

Bugün bir bug öğrendin mi?

Basit Bir Tarih, Büyük Bir Problem

“Sınır Değer Analizi (Boundary Value Analysis) yapmanın önemi! Gelecek tarihler için zamanlama ve veri tipi limitlerinin test edilmemesi, yeni yılın ilk gününde küresel bir e-posta krizine yol açtı.”

1 Ocak 2022, saat 00:00 UTC

Milyonlarca kuruluş, yeni yılı kutlarken, Microsoft Exchange sunucuları sessizce çöküyordu. Sebebi? Bir tarih kontrolü. Evet, sadece bir tarih kontrolü. Y2K’nin 22 yıl sonraki kardeşi, Y2K22 ortaya çıkmıştı.

Neler Oldu?

Olay Özeti

Microsoft Exchange Server (2013, 2016, 2019 versiyonları) içindeki FIP-FS adlı anti-malware tarama motoru, 1 Ocak 2022’de çöktü. Sonuç: emailler transport kuyruklarında takılı kaldı, sistem Event ID 5300 ve 1106 hataları (Error 0x80004005) fırlatmaya başladı.

Binlerce kuruluş, kritik iş emaillerini gönderemez hale geldi.

Kök Neden: Bir Integer Taşması (Integer Overflow)

Burada basit ama ölümcül bir hata var:

FIP-FS motoru, imza dosyasının sürüm tarihini saklamak için signed Int32 (32-bit işaretli tam sayı) kullanıyordu.

Signed Int32’nin maksimum değeri: 2,147,483,647

2022 yılı için hesaplanan sürüm numarası: 2,201,010,001

Sonuç: Taşma (overflow). Sayı sınırı aştı, sistem çöktü.

Max Int32:     2,147,483,647

Actual value:  2,201,010,001                ↑ Aşıldı!

Bu kadar. Bir yazılım test mühendisinin en basit catch etmesi gereken bug tipi.

Neden Bu Kadar Önemli?

1. **Zamanlaması Mükemmel Değildi**

Yılbaşı gününde, pek çok sistem yöneticisi tatilde. Destek ekipleri azami kapasitede değil. Bug tam da bu an da patlıyor.

2. **Yaygın Etki**

Exchange Server, kurumsal emailin omurgası. Binlerce şirket, hükümet kurumu, hastane etkilendi. Kritik iş akışları durdu.

3. **Uyarı Yoktu**

Bu, güvenlik açığı değildi. Malware değildi. Sadece bir mantık hatası. Hiç kimse bunu tahmin etmemişti.

Gerçek Dünyada Y2K22’den Sonra

Etkilenen Kurumlar

  • Sağlık: Hastaneler, hasta kayıtlarını gönderemedi
  • Finans: Bankalar, kritik transferleri beklemede kaldı
  • Hükümet: Resmi yazışmalar durdu
  • İş: Binlerce şirket, işlemleri erteledi

Toplam Etki

Tam rakam bilinmiyor, ama:

  • Downtime: Ortalama 2-4 saat
  • Etkilenen sunucu sayısı: Yüz binlerce
  • Ekonomik kayıp: Milyonlar dolar

Yazılım Test Mühendisinin Gözüyle: Bu Hatadan Ne Öğrenebiliriz?

✅ Ders 1: Edge Cases Önemlidir

Tarih değerleri, özellikle yıl değişimleri, her zaman test edilmesi gereken kritik noktalar.

Test senaryoları:

  • Yılbaşı geçişleri (31 Aralık → 1 Ocak)
  • Sınır değerleri (Int32.MaxValue)
  • Sistem saati değişiklikleri

Bunu kaçırmak, milyonlarca insanı etkiler.

✅ Ders 2: Data Type Seçimi Kritik

Neden signed Int32 kullanıldı? Unsigned Int64 kullanılsaydı, sorun olmayacaktı.

// Yanlış int version = 2201010001;  // Taşıyor

// Doğru long version = 2201010001L;  // Güvenli

Veri tipi seçimi, sadece “teknik” bir karar değil. İş sürekliliğini etkiler.

✅ Ders 3: Prodüksiyonda Boundary Testing Yok Mu?

2022’ye yaklaştıkça, tarih-tabanlı sistemler test edilmeli. Özellikle:

  • Antivirüs motorları
  • Sertifika doğrulama sistemleri
  • Lisans kontrol mekanizmaları

Bunlar genellikle tarih kullanır. Hepsi test edilmeli.

✅ Ders 4: Smoke Test Yeterli Değil

Birim testler ve entegrasyon testleri, bu hatayı bulabilirdi:

[Test]public void VersionNumber_ShouldNotOverflow_For2022()

{    int year = 2022;    int versionNumber = year * 100000001;  // Fails!   

Assert.That(versionNumber, Is.GreaterThan(0));}

Bu test, hemen başarısız olacaktı. Ama yapılmamıştı.

Sonuç: Basit Hatalar Büyük Felaketler Yaratır

Y2K22, yazılım geliştirmenin en önemli dersini tekrar öğretti:

Basitlik tehlikelidir. Sınırlar önemlidir. Test etmeyin derseniz, ödül olarak 2,201,010,001 hata alırsınız.

Bir signed Int32, milyonları etkileyen bir felakete dönüştü.

Sonraki projenizde, tarih kontrolü yapan bir kod gördüğünüzde, bu yazıyı hatırlayın.

Test edin. Sınırları test edin. Yıl geçişlerini test edin.

Çünkü 1 Ocak saat 00:00’de, hiç kimse çöküntü istemez…

Yorum bırakın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir