Skip to content

Backend Test Stratejileri ​

Backend testleri tek bir “test edildi” sinyali değildir; hızlı unit testten gerçek dependency ve failure davranışına kadar farklı güvence katmanlarıdır. Her test, yakaladığı riski ve üretimden ne kadar farklı olduğunu açıkça belirtmelidir.

Hızlı Karar ​

RiskTestDikkat
İş kuralıUnit testHızlı ve deterministic olmalı
API/DB entegrasyonuIntegration testGerçek schema ve migration kullan
Tüketici sözleşmesiContract testProvider/consumer sürümünü doğrula
Kullanıcı akışıEnd-to-endAz sayıda kritik senaryo seç
KapasiteLoad/stress testGerçekçi workload ve limit tanımla
GüvenlikSecurity test/scanFalse positive ve exception yönetimi

Üretim Kontrol Listesi ​

  • Problem: Hangi failure mode veya regression yakalanmak isteniyor?
  • Çözüm: Test data, environment, oracle, timeout ve cleanup davranışı tanımlı mı?
  • Trade-off: Daha gerçekçi test daha yavaş ve pahalıdır; yalnız mock'a güvenmek riski gizler.
  • Hata durumu: Flaky test, shared state, migration mismatch, external outage ve false security finding ele alınmalı.
  • Ölçüm: Pass rate, duration, flake rate, coverage by risk, escaped defect ve deployment gate izlenmeli.
  • Güvenlik/maliyet: Secret ve PII fixture'a girmemeli; load test production'dan izole olmalı.

Test Katmanları ​

Unit ve integration ​

Unit test domain/service mantığını dependency mock veya fake ile hızlı doğrular. Integration test gerçek Spring context, database schema, migration, queue veya HTTP client davranışını sınar. Test container veya ephemeral dependency kullanılıyorsa sürüm ve cleanup deterministik olmalıdır.

Contract ve mocking ​

Consumer-driven contract test, tüketicinin kullandığı request/response beklentisini provider'a doğrulatır. Mock server sözleşmeden üretilmeli; mock ile integration test aynı şey değildir. Contract ayrıntıları için API Contract ve Tooling sayfasına bakılabilir.

End-to-end ​

E2E testleri login, authorization, create/update, async completion ve failure recovery gibi kritik iş akışlarını gerçek sınırlar üzerinden çalıştırır. Test sayısı küçük tutulmalı; her katmandaki ayrıntıyı E2E'ye taşımak pipeline'ı kırılganlaştırır.

Load, Stress ve Chaos ​

Load test beklenen trafik altında latency/throughput hedefini ölçer. Stress test kapasite sınırını ve graceful degradation davranışını arar. Spike test ani trafik, soak test uzun süreli leak/queue birikimi, chaos test ise kontrollü dependency/instance failure davranışını doğrular.

Her deney için workload, duration, ramp, success threshold, blast radius, stop condition ve veri temizliği yazılmalıdır. CPU veya request sayısı tek başına başarı ölçütü değildir; SLO, queue age, error budget ve kullanıcı etkisi birlikte değerlendirilir.

CI/CD Otomasyonu ​

Önerilen pipeline sırası:

  1. Format/lint ve hızlı unit test.
  2. Build ve migration doğrulaması.
  3. Integration ve contract test.
  4. Security/dependency scan.
  5. İzole staging'de smoke/E2E.
  6. Canary veya blue-green sonrası SLO gate.

Flaky test quarantined olsa bile owner ve düzeltme tarihi olmalı. Test sonucu, artifact sürümü ve ortam bilgisi birlikte saklanmalıdır.

Test Verisi ve Diagnostik ​

Fixture'lar minimum, anonim ve tekrar üretilebilir olmalı. Clock, random ID, external response ve queue zamanı injectable yapılırsa test deterministic hale gelir. Hata olduğunda request ID, trace ID, test adı, artifact ve dependency log referansı sunulmalıdır.

Test kapsamı satır sayısı değil risk kapsamasıdır. Mutlu yolun yanında timeout, duplicate delivery, stale read, unauthorized object, retry exhaustion, partial failure ve rollback senaryoları bulunmalıdır.

Eren Demir tarafından oluşturulmuştur.