Hepimiz bunu yaşadık: CI yeşil, tüm testler geçiyor, "deploy" diyoruz… ve 20 dakika sonra alarm çalıyor. İlk tepki "testler yeterince iyi değil miydi?" oluyor. Ancak genellikle sorun testler değil — test ortamı ile üretim arasındaki görünmeyen farklar.
İşte en sık karşılaştığım dört sessiz fark:
- Yapılandırma farkları — Bu genellikle en büyük suçlu. Bağlantı dizeleri, özellik bayrakları, API anahtarları, zaman aşımı değerleri… appsettings.Development.json ile üretimdeki ortam değişkenleri arasındaki tek bir fark davranışı değiştirebilir. Testleriniz "doğru ortamda" çalışmıyorsa, yeşil bir sonuç pek bir şey ifade etmez.
- Veri farkları — Test veritabanında 20 temiz kayıt var; üretimde 2 milyon — bazıları null, bazıları on yıllık, bazıları hiç beklemediğiniz formatlarda. Testlerde anında dönen bir sorgu, üretimde 15 saniye sürebilir. Verileriniz üretim gibi görünmüyorsa, performans sorunlarını veya kenar durumlarını asla yakalayamazsınız.
- Zaman aşımı ve zamanlama farkları — Yerel olarak her şey milisaniyeler içinde yanıt verir; üretimde bir üçüncü taraf API'si 2 saniye, meşgul bir veritabanı 30 saniye sürebilir. Testlerde asla tetiklenmeyen zaman aşımları, canlıya çıktıktan sonraki ilk hafta kapınızı çalacaktır.
- Ölçek ve eşzamanlılık — Her şey tek bir kullanıcıyla çalışır. Ancak 50 eşzamanlı istek aynı satırı güncellemeye çalıştığında her şey değişir. Eşzamanlılık senaryoları yazmadıysanız, meslektaşlarınızdan "ama testler geçti" cümlesini çok duyarsınız.
Peki ne yapmalıyız?
- Test ortamını bilinçli olarak üretime benzetin: aynı yapılandırma, benzer veri hacmi, gerçekçi donanım.
- Küçük, temiz veri kümeleri yerine, üretimden anonimleştirilmiş örnekler kullanın.
- Zaman aşımlarını sıfırlamayın; testlerde de gerçekçi zamanlamalar ile çalışın.
- Kritik akışlara eşzamanlılık testleri ekleyin ve temel izleme kurun, böylece üretim farkları fark edilmeden kalmaz.
Yeşil testler size güven verir — ancak bu güven, test ortamınızın üretimi ne kadar yakından yansıttığı kadar gerçektir.
Yorumlar
Yorum yapmak için giriş yapmalısın.