Kalite Bir Faz Değil, Bir Niteliktir
Herhangi bir sprint panosunu aç ve "QA"nın nerede durduğuna bak. Neredeyse her zaman "Code Review" ile "Deploy" arasına sıkıştırılmış dar bir sütundur; yayından önce araya sokuşturulmuş üç dört gün. Bir faz.
Şimdi aynı şeyi güvenlik için düşün. "Güvenlik Fazı" adında bir sütun hayal et: sona yakın üç gün, bir ekibin iki hafta boyunca hiç düşünülmeden inşa edilmiş bir sisteme güvenlik enjekte ettiği yer. Buna ihmal derdin. Kimse bir sistemi tamamlayıp sonra güvenliği bir adım olarak eklemez. Güvenlik, sistemin bir niteliğidir (property): baştan tanımlanır, tasarıma gömülür ve her yerde ölçülür.
Kalite de tam olarak aynı türden bir şeydir. Onu bir faz olarak ele almak, sessizce şunu varsayar: iki hafta boyunca dilediğin gibi kod yaz, sonra bir ekip son üç günde girip bitmiş nesnenin içine kaliteyi döksün. Dökemezsin. Nitelik, uyguladığın bir adım değildir; sistemin ya sahip olduğu ya da olmadığı bir karakteristiktir.
Faz Zamanda Bir Nokta, Nitelik Her Yerdedir
Bu fark anlamsal değildir. Bir faz bir kez olur, sabit bir dilimde. Bir nitelik ise tüm sistem boyunca, her noktada, yük altında geçerli olmak zorundadır. Yazılımın "kalite nitelikleri" (test edilebilirlik, direnç, gözlemlenebilirlik) bu yüzden görevler gibi değil, güvenlik ve performans gibi davranır:
- Test edilebilirlik tek bir satır yazılmadan önce kararlaştırılır. Sıkı bağlı sınıflar, gizli durum ve mock'lanamayan bağımlılıklar bir test penceresinde doğrulanabilir hale getirilemez. Dikişlerin (seam) tasarıma konması gerekir.
- Direnç bir kontrol değil, bir biçimdir. Bir retry çift kayıt yaratıyorsa, bunu sprint sonunda bulmak sistemi dirençli yapmaz. Yalnızca tasarımın dirençli olmadığını ifşa eder.
- Gözlemlenebilirlik ya inşa edilir ya yoktur. Yapılandırılmış log, metrik ve izleme içermeyen bir servisi test etmek, karanlık odada el feneri olmadan yürümektir; hiçbir test-fazı çabası o ışığı sonradan eklemez.
Onu Bir Sütun Değil, Bir Gereksinim Yap
Kalite bir nitelikse, niteliklerin tanımlandığı yere aittir: tasarıma. İlk teknik tasarım dokümanı; sistemin nasıl gözlemleneceğini ve nasıl izole edileceğini, tıpkı gecikme bütçesi ve güvenlik modeli gibi aynı nefeste belirtmelidir. Adını koyup ölçebildiğin bir kalite niteliği bir gereksinimdir. Takvimdeki bir "QA fazı" ise, tasarımın atladığı her şeyi panik içinde keşfettiğin bir yerden ibarettir.
Kaliteyi bir faza sıkıştırdığında, kalite mühendisini sistemin güvenliğini yükselten bir mimar olmaktan çıkarıp yangını çok geç haber veren pahalı bir alarma dönüştürürsün. İşte sorunun bittiği, zanaatin başladığı yer burası. Peki senin çalıştığın projelerde QA hâlâ kod bittikten sonra uğranan bir durak mı, yoksa sistem tasarlanırken devreye giren bir mühendislik disiplini mi?