Hata, Kusur ve Arıza Arasındaki Farklar: Error, Bug, Defect ve Failure Nedir?
Hata, Kusur ve Arıza Arasındaki Farklar
Yazılım geliştirme ve test süreçlerinde; hata, kusur ve arıza terimlerinin sıkça kullanıldığını görmekteyiz. Ancak bu terimler, çoğu zaman birbirinin yerine kullanılsa da, aslında aralarında doğrusal bir neden-sonuç ilişkisi bulunan farklı kavramları ifade etmektedir. ISTQB standartlarına göre hata (error), kusur (bug/defect) ve arıza (failure) arasındaki farkları ve bu kavramların birbirini nasıl tetiklediğini detaylı bir şekilde inceleyeceğiz.
Kavramsal Tanımlar
Hata (Error / Mistake)
Hata, bir kişinin (geliştirici, analist, tasarımcı vb.) bir şeyi yanlış yapması sonucunda ortaya çıkan insani bir eylemdir. Yazılım geliştirme bağlamında, bu terim genellikle insanların zihinsel yanılmalarını, yanlış anlamalarını veya dikkatsizliklerini tanımlar.
Örnekler: Bir analistin iş gereksinimini yanlış anlaması, bir mimarın sistem mimarisini hatalı tasarlaması veya bir yazılım geliştiricinin yanlış bir kod parçası yazması birer hatadır.
Kusur (Bug / Defect / Fault)
Kusur, bir hatanın kaynak kodda, tasarım planlarında veya gereksinim dokümanlarında bıraktığı fiziksel veya mantıksal izdir. Bir yazılımda veya dokümanda kusur bulunması, o varlığın beklenmesi gerektiği gibi olmamasına yol açar.
ISTQB Notu: Kusurlar sadece kodda bulunmaz. Henüz tek satır kod yazılmadan önce; gereksinim dokümanlarındaki (PRD) çelişkiler, tasarım şemalarındaki eksiklikler veya test senaryolarındaki yanlışlar da birer kusurdur (defect) ve statik testler esnasında tespit edilebilirler.
Arıza (Failure)
Arıza, bileşenin veya sistemin beklenen işlevi, tanımlanan gereksinimlere uygun olarak yerine getirememe durumudur. Arıza, sadece ve sadece yazılım çalıştırıldığında ortaya çıkar. Kullanıcıların veya test uzmanlarının ekran üzerinde doğrudan deneyimlediği olumsuz durumlardır.
Örnekler: Uygulamanın aniden kapanması (çökme), yanlış veri hesaplaması yapması veya butonların yanıt vermemesi birer arızadır.
Hata, Kusur ve Arıza Arasındaki İlişki
ISTQB standartlarına göre bu üç kavram birbirine sıkı bir zincirle bağlıdır. İlişki tam olarak şu şekilde formüle edilir:
İnsan Hata yapar -> Döküman/ Kodda Kusur oluşur -> Kod çalışırken Kusur tetiklenirse Arıza meydana gelir.
Ancak her kusur mutlaka bir arızaya yol açmak zorunda değildir. Örneğin, koddaki ölü bir döngü veya hiç çalıştırılmayan bir fonksiyonun içindeki kusur, sistem çalışırken hiçbir zaman tetiklenmeyebilir ve dolayısıyla kullanıcı hiçbir zaman bir arıza (failure) görmez.
Çevresel Faktörlerin Rolü
Arızalar her zaman insan kaynaklı bir kusurdan dolayı ortaya çıkmayabilir. ISTQB'ye göre; çevresel koşullar da arızalara sebep olabilir.
Örnek verecek olursak; Güçlü bir manyetik alan, radyasyon dalgalanması, donanım kirliliği veya elektrik kesintileri, donanım yazılımının (firmware) veya işletim sisteminin beklenmedik şekilde arızalanmasına (Failure) yol açabilir.
Hata, Kusur ve Arıza Yönetimi
Bu kavramların doğru yönetilmesi, yazılım kalitesini artırmanın anahtarıdır. Kusurların canlı ortama çıkmadan, yani kullanıcılar tarafından birer arızaya dönüşmeden önce erken aşamalarda tespit edilmesi maliyeti ciddi oranda düşürür. Bunun için uygulanan temel ISTQB yöntemleri şunlardır:
Statik Testler (Kod Gözden Geçirme ve İncelemeler): Kod çalıştırılmadan yapılan incelemelerdir. Tasarım ve gereksinim aşamasındaki kusurları (defect) erkenden yakalar.
Dinamik Test Süreçleri: Yazılımın farklı aşamalarda (Birim, Entegrasyon, Sistem, Kabul) çalıştırılarak test edilmesidir. Sistemdeki arızaları (failure) ortaya çıkarmayı amaçlar.
Otomatik Testler (Test Automation): Regresyon testleri ve sürekli entegrasyon (CI/CD) süreçlerinde otomasyon testleri koşarak, koda yeni eklenen hataların hızlıca tespit edilmesini ve arızaların önlenmesini sağlar.