Kalite Güvencesi, Kalite Kontrol ve Test — Yazılım Kalite Yönetiminin Temelleri
Hata yapmak insana özgü olsa da, bazen bir hatanın maliyeti çok yüksek olabilir. Tarih, yazılım kusurlarının milyarlarca dolarlık israfa neden olduğu ve hatta kayıplara yol açtığı birçok duruma örnek biliyor: Starbucks kafelerinin bir kayıt arızası nedeniyle bedava içecek vermek zorunda kalmasından, F-35 askeri uçaklarının radar arızası nedeniyle hedefleri doğru tespit edemediği durumlara kadar.
Yayınlanan yazılımın güvenli olduğundan ve beklendiği gibi çalıştığından emin olmak için yazılım kalitesi kavramı tanıtıldı. Genellikle “açık veya örtük gereksinimlere ve beklentilere uygunluk derecesi” olarak tanımlanır. Bu sözde açık ve örtük beklentiler, yazılım kalitesinin iki temel düzeyine karşılık gelir:
İşlevsel – ürünün işlevsel (açık) gereksinimlere ve tasarım özelliklerine uygunluğu. Bu yön, kullanıcı açısından yazılımın pratik kullanımına odaklanır: özellikleri, performansı, kullanım kolaylığı, kusurların olmaması.
İşlevsel Olmayan – sistemin iç özellikleri ve mimarisi, yani yapısal (örtük) gereksinimler. Bu, kodun sürdürülebilirliğini, anlaşılabilirliğini, verimliliğini ve güvenliğini içerir.
Yazılımın yapısal kalitesini yönetmek genellikle zordur: Çoğunlukla mühendislik ekibinin uzmanlığına dayanır ve kod incelemesi, analizi ve yeniden düzenleme yoluyla garanti edilebilir. Aynı zamanda, kalite güvencesi, kalite kontrol ve testi içeren bir dizi özel kalite yönetim faaliyeti yoluyla işlevsel yön garanti edilebilir.
Genellikle birbirinin yerine kullanılan üç terim, yazılım kalite yönetiminin biraz farklı yönlerine atıfta bulunur. Hem yapısal hem de işlevsel olarak mümkün olan en iyi kalitede bir ürün sunma ortak amacına rağmen, bu görev için farklı yaklaşımlar kullanırlar.
Yazılım geliştirme sürecinde QA, QC ve Test
Kalite Güvencesi, Google Test Blogunda "QC işini mümkün kılan sürecin sürekli ve tutarlı bir şekilde iyileştirilmesi ve sürdürülmesi" olarak açıklanan geniş bir terimdir. Tanımdan da anlaşılacağı gibi, KG, üretim sürecinin tutarlılığını izleyerek kalite yönetiminin organizasyonel yönlerine daha fazla odaklanır.
Ekip, Kalite Kontrol yoluyla ürünün fonksiyonel gerekliliklere uygunluğunu doğrular. Investopedia tarafından tanımlandığı gibi, “bir işletmenin ürün kalitesinin korunmasını veya iyileştirilmesini ve üretim hatalarının azaltılmasını veya ortadan kaldırılmasını sağlamaya çalıştığı bir süreçtir”. Bu aktivite, bitmiş ürüne uygulanır ve ürün piyasaya sürülmeden önce gerçekleştirilir. İmalat endüstrisi açısından, teknik özelliklere uygun olup olmadığını görmek için montaj hattından rastgele bir parça çekmeye benzer.
Test etme, yazılım kaynak kodundaki teknik sorunları tespit etmeyi ve çözmeyi ve genel ürün kullanılabilirliğini, performansını, güvenliğini ve uyumluluğunu değerlendirmeyi amaçlayan temel faaliyettir. Çok dar bir odağı vardır ve test mühendisleri tarafından geliştirme sürecine paralel olarak veya özel test aşamasında (yazılım geliştirme döngüsüne metodolojik yaklaşıma bağlı olarak) gerçekleştirilir.
Resim: KG, KK ve Test farklılıkları
Kalite güvencesi, kalite kontrol ve test kavramlarının karşılaştırılması
Otomobil üretim sürecine uygulandığında, uygun bir kalite güvence sürecine sahip olmak, her ekip üyesinin gereksinimleri anlaması ve işini yaygın olarak kabul edilen yönergelere göre gerçekleştirmesi anlamına gelir. Yani, her bir eylemin doğru sırada gerçekleştirildiğinden, her detayın düzgün bir şekilde uygulandığından ve genel süreçlerin tutarlı olduğundan emin olmak için kullanılır, böylece hiçbir şey son ürün üzerinde olumsuz bir etkiye neden olmaz.
Kalite kontrolü, üst düzey bir yöneticinin üretim departmanına girmesine ve inceleme ve test sürüşü için rastgele bir araba seçmesine benzetilebilir. Bu durumda test faaliyetleri, her bir eklemi, her mekanizmayı ayrı ayrı ve ayrıca tüm ürünün manuel veya otomatik olarak kontrol edilmesi, çarpışma testleri, performans testleri ve gerçek veya simüle edilmiş test sürüşlerinin yapılması sürecini ifade eder.
Uygulamalı yaklaşımı nedeniyle, yazılım test faaliyetleri hararetli bir tartışma konusu olmaya devam ediyor. Bu nedenle, bu yazıda öncelikle yazılım kalite yönetiminin bu yönüne odaklanacağız. Ancak ayrıntılara girmeden önce, yazılım testinin temel ilkelerini tanımlayalım.