Bloga dön

Yazılım kalitesi ve güvenilirlik

Test etmek yetmez: Güvenilir yazılım, kaliteli kayıtla tamamlanır.

Yazılım testi çoğu zaman bir dizi adımı uygulayıp sonucu “başarılı” veya “başarısız” olarak işaretlemek şeklinde düşünülür. Bu tanım eksiktir. Test; bir gereksinim ile gözlenen sistem davranışı arasında kontrollü bir karşılaştırmadır. Kaliteli kayıt ise bu karşılaştırmanın kim tarafından, hangi sürümde, hangi veriyle ve hangi koşullar altında yapıldığını koruyan kanıttır. Dokümantasyon bu iki parçayı bir yaşam döngüsüne bağlar. Bu nedenle güvenilir bir sistem için test, kayıt ve dokümantasyon üç ayrı bürokratik iş değil; tek bir mühendislik kontrolünün tamamlayıcı bileşenleridir.

01

Test, yazılımın çalıştığını göstermekten daha fazlasıdır.

Bir programın açılması veya yaygın kullanılan birkaç işlemi tamamlaması, onun amacına uygun ve güvenilir olduğunu göstermez. Testin temel sorusu “çalışıyor mu?” değil, “tanımlanan kullanım amacı içinde beklenen davranışı, kabul edilebilir riskle ve tekrar edilebilir biçimde gösteriyor mu?” sorusudur.

Bu ayrım önemlidir. Çünkü yazılım hataları yalnızca ekranda görülen yanlış mesajlardan oluşmaz. Yanlış yetkilendirme, sessiz veri kaybı, hatalı hesaplama, eksik audit trail, başarısız yedekten dönüş veya sınır değerlerde beklenmeyen davranış da birer hata biçimidir. İyi test tasarımı, normal kullanıcı akışının yanında sistemin hangi koşullarda güvenilirliğini kaybedebileceğini de araştırır.

Sonuç olarak test, hatasızlık ilanı değildir. Belirli gereksinimlerin, belirli koşullar altında ve bilinen sınırlar içinde karşılandığına ilişkin yapılandırılmış kanıt üretimidir.

02

İyi test, test adımından önce başlar.

Test edilebilir bir gereksinim; özneyi, beklenen davranışı, koşulu ve kabul ölçütünü açıklar. “Sistem hızlı olmalıdır” cümlesi niyet bildirir; fakat test tanımlamaz. “Onaylı kullanıcı, 10.000 kayıt içeren raporu normal işletim yükünde 5 saniye içinde açabilmelidir” ifadesi ise ölçülebilir bir karşılaştırma kurar.

Beklenen sonuç test yürütülmeden önce belirlenmelidir. Sonuç görüldükten sonra kabul ölçütünün yorumlanması, testi doğrulama aracından gerekçelendirme aracına dönüştürür. Aynı nedenle test verisi, ön koşullar ve kullanılan yazılım sürümü yürütmeden önce sabitlenmelidir.

Üretim otomasyonu, kurumsal uygulamalar ve farklı operasyonel sistemlerde yürüttüğüm test ve dokümantasyon çalışmalarında bu bağın pratik değerini gördüm. Gereksinim net değilse izlenebilirlik matrisi boşluğu görünür kılar; test tasarımı zayıfsa çok sayıda onaylı sayfa bile o boşluğu kapatamaz.

03

Negatif test, sistemin doğru biçimde reddetmesini doğrular.

Pozitif test, geçerli bir girdi ve yetkili bir kullanıcıyla beklenen işlevin tamamlandığını gösterir. Negatif test ise sistemi eksik veya hatalı veri, sınır dışı değer, yinelenen işlem, yetkisiz rol, kesilen bağlantı ya da kullanılamayan bir bağımlılık gibi koşullarla kontrollü biçimde karşılaştırır. Burada beklenen sonuç sistemin yalnızca “çalışmaması” değildir; geçersiz durumu güvenli, tutarlı ve açıklanabilir biçimde reddetmesi veya yönetmesidir.

Yalnızca pozitif senaryoların geçmesi yanlış bir güven oluşturabilir. Bir sistem geçerli girdilerle doğru hesaplama yaparken boş değerlerde, eşzamanlı taleplerde veya işlem yarıda kesildiğinde veri bütünlüğünü kaybedebilir. Negatif test; hatanın yakalanıp yakalanmadığını, kullanıcıya doğru mesajın verilip verilmediğini, başarısız işlemin kısmi veya yinelenen kayıt bırakıp bırakmadığını, olayın uygun biçimde kaydedilip kaydedilmediğini ve sistemin kontrollü duruma dönüp dönmediğini doğrular.

Üretim otomasyonu, kurumsal uygulamalar ve görüntüleme sistemlerindeki çalışmalarımda negatif senaryoların çoğu zaman normal akıştan daha açıklayıcı olduğunu gördüm. Aralık dışındaki bir proses parametresinin uygulanmaması, yetkisiz kullanıcının onay verememesi, kesilen veri aktarımının eksik kayıt üretmemesi veya yetersiz görüntü kalitesinin hatalı bir kabul yerine yeniden incelemeye yönlendirilmesi bu yaklaşımın farklı örnekleridir. Bu senaryolar rastgele seçilmez; gereksinimler, sınır değerler, durum geçişleri, hata modelleri ve risk değerlendirmesi kullanılarak türetilir.

04

Test sayısı değil, kapsanan risk önemlidir.

Her fonksiyonu aynı derinlikte test etmek kaynakları doğru kullanmaz. Bir renk tercihi ile erişim yetkisini, kritik bir hesaplamayı, veri aktarımını veya üretim parametresini aynı ağırlıkta ele almak; hem önemli riskleri görünmez kılar hem de düşük değerli kanıt üretimini artırır.

Risk temelli yaklaşım üç soruyla başlar: Ne yanlış gidebilir, bunun sonucu ne olur ve mevcut kontroller hatayı ne kadar önleyebilir ya da ortaya çıkarabilir? Yanıt büyüdükçe test; sınır değerleri, negatif senaryoları, yetki kontrollerini, veri bütünlüğünü, hata kurtarmayı ve bağımsız incelemeyi daha fazla kapsamalıdır.

Endüstriyel otomasyon, SCADA, kurumsal uygulamalar ve otomatik görüntüleme sistemlerinde yürüttüğüm çalışmalarda test kapsamını işlevin gerçek etkisiyle ilişkilendirmek temel prensipti. Örneğin bir görüntü işleme sisteminde yanlış kabul ve hatalı ret; bir kurumsal uygulamada ise yetkisiz erişim, yanlış hesaplama ve veri kaybı birlikte değerlendirilmelidir. Teknoloji değişse de testin derinliğini belirleyen şey, hatanın kullanıcıya ve operasyona olası etkisidir.

05

Kaliteli kayıt, testin yan ürünü değildir.

Bir test doğru uygulanmış olabilir; fakat kayıt, yürütmeyi daha sonra yeniden kurmaya yetmiyorsa kurumsal açıdan sonuç doğrulanamaz. “Pass” kelimesi bir karardır, kanıt değildir. Kanıt; ilgili gereksinimi, test koşulunu, kullanılan veriyi, sistem ve doküman sürümünü, beklenen sonucu, gözlenen sonucu ve kararı birbirine bağlar.

Kayıt test sırasında oluşturulmalıdır. Gün sonunda hafızadan tamamlanan adımlar; zaman sırasını, ilk gözlemi ve beklenmeyen davranışları kolayca kaybeder. Bir sapmanın üstünü kapatıp yalnızca başarılı tekrar testi bırakmak da süreci daha temiz değil, daha az güvenilir hâle getirir. İlk sonuç, araştırma, alınan aksiyon ve tekrar test gerekçesi aynı hikâyenin parçalarıdır.

Buradaki amaç her tıklamayı ekran görüntüsüne çevirmek değildir. Aşırı kanıt, kritik bilgiyi gürültünün içine gömebilir. Doğru ilke şudur: Kararı bağımsız olarak anlayıp doğrulamak için gerekli ve yeterli bağlam korunmalıdır.

06

İzlenebilirlik, belgeleri bir kanıt sistemine dönüştürür.

Gereksinim, risk, test ve sapma ayrı dosyalarda bulunabilir. Ancak aralarındaki bağlantı kurulmamışsa ortada çok sayıda doküman vardır; bütünlüklü bir güvence yoktur. İzlenebilirlik, her kritik gereksinimin uygun bir risk değerlendirmesine ve en az bir yeterli teste; her test sonucunun da ilgili kanıta ve varsa sapmaya bağlanmasını sağlar.

Bu ilişki iki yönde çalışır. İleri yönde “Bu gereksinim nasıl doğrulandı?” sorusunu; geri yönde ise “Bu test neden yapıldı ve hangi kararı destekliyor?” sorusunu cevaplar. Gereksiz testler, test edilmemiş gereksinimler ve kapatılmamış sapmalar böylece görünür olur.

İzlenebilirliğin gerçek değeri denetim günü ortaya çıkmaz; değişiklik günü ortaya çıkar. Bir yazılım modülü, parametre veya kullanıcı rolü değiştiğinde bağlantılar hangi gereksinimlerin ve hangi testlerin etkilenebileceğini gösterir. Böylece regresyon testi alışkanlığa göre değil, gerekçeli etki analizine göre seçilir.

07

Dokümantasyon, sistemi bugünden sonraya taşır.

Dokümantasyon yalnızca projenin sonunda hazırlanan rapor değildir. Kullanım amacı, sorumluluklar, yapılandırma baseline'ı, test stratejisi, işletim adımları, olay ve değişiklik yönetimi, yedekleme, periyodik gözden geçirme ve kullanımdan kaldırma aynı yaşam döngüsünün parçalarıdır.

Güncel olmayan prosedür, doğru yazılmış olsa bile yanlış yönlendirebilir. Bu nedenle dokümanın sahibi, onay durumu, yürürlük tarihi, sürümü ve önceki sürümle farkı açık olmalıdır. Doküman kontrolü içeriği dondurmaz; değişikliğin görünür, incelenmiş ve geri izlenebilir olmasını sağlar.

Kurumsal IT ve son kullanıcı hizmetlerindeki çalışmalarımda aynı ilkenin günlük operasyonlar için de geçerli olduğunu gördüm. Envanter, bilgisayarlar, mobil cihazlar ve iade-yeniden kullanım süreçleri için SOP, WI, iş akışı, kontrol listesi ve RACI hazırlamak; işi kişisel deneyimden çıkarıp tekrarlanabilir bir ekip kabiliyetine dönüştürdü. İyi doküman, çalışanın düşünmesini engellemez; rutin belirsizliği azaltarak düşünmesi gereken istisnaları daha görünür kılar.

08

Sapma, başarısızlığın değil öğrenmenin kaydıdır.

Beklenen ve gerçek sonuç farklıysa test değer üretmiştir: Sistem, gereksinim, veri veya test tasarımı hakkında yeni bilgi ortaya çıkmıştır. Bu bilgi silinmemeli; sınıflandırılmalı, etkisi değerlendirilmiş ve uygun aksiyonla kapatılmalıdır.

Her başarısız adım yazılım hatası değildir. Gereksinim yoruma açık olabilir, test verisi yanlış hazırlanmış olabilir veya altyapı ön koşulu sağlanmamış olabilir. Sağlam sapma yönetimi kök nedeni ayırır; düzeltme ile düzeltici faaliyeti birbirine karıştırmaz ve tekrar testin kapsamını gerekçelendirir.

Bu yaklaşım kalite kültürünü de değiştirir. Ekibin amacı kusursuz görünen protokol üretmek değil, sistem hakkında doğru bilgi üretmektir. Hatasız görünen fakat ilk denemeleri saklayan bir kayıt, açıkça yönetilmiş bir sapmadan daha zayıftır.

09

Güven, sonuçtan çok yeniden kurulabilirlikten doğar.

Bir test kaydını aylar sonra, testi yapan kişi odada olmadan ele aldığımızı düşünelim. Hangi gereksinimin doğrulandığı, hangi sürümün kullanıldığı, test verisinin nereden geldiği, beklenen ile gerçek sonucun nasıl karşılaştırıldığı ve sapmaların nasıl kapatıldığı anlaşılabiliyorsa kayıt görevini yapmıştır.

Bu ölçüt web ve mobil uygulamalardan kurumsal IT'ye, endüstriyel otomasyondan daha sıkı kontrol gerektiren regüle sistemlere kadar geçerlidir. Uygulanan güvence seviyesi değişebilir; fakat operasyonel gerçek değişmez: İnsan hafızası sınırlıdır, ekipler değişir, yazılım güncellenir ve kararların gerekçesi zamanla kaybolur.

Dolayısıyla testin çıktısı yalnızca çalışan bir fonksiyon değildir. Asıl çıktı; sınırları bilinen bir sistem, gerekçesi görülebilen bir karar ve bir sonraki değişiklikte yeniden kullanılabilecek kurumsal bilgidir.

Kaynaklar ve ileri okuma

  1. Yazılım testinin genel kavramları ve ortak terminolojisiISO/IEC/IEEE 29119-1:2022 — Software Testing: General Concepts
  2. Pozitif senaryoların negatif testlerle tamamlanmasına ilişkin temel test tasarımı yaklaşımıISTQB — Certified Tester Foundation Level Syllabus v4.0.1
  3. Sistem, yazılım ve donanım yaşam döngüsünde doğrulama ve geçerlemeIEEE 1012-2024 — System, Software, and Hardware Verification and Validation
  4. Kuruluşun ihtiyacına uygun dokümante edilmiş bilginin geliştirilmesi ve sürdürülmesiISO 10013:2021 — Guidance for Documented Information
  5. Güvenli yazılım geliştirme yaşam döngüsü için uygulama çerçevesiNIST SP 800-218 — Secure Software Development Framework
  6. Regüle ortamlarda elektronik kayıt bütünlüğüne ilişkin uygulama örneğiFDA — Data Integrity and Compliance With Drug CGMP
  7. Regüle bilgisayarlı sistemlerde yaşam döngüsü ve risk temelli kontrol örneğiEuropean Commission — EU GMP Annex 11: Computerised Systems

Yazılım kalitesi, test sonunda konulan bir onay işaretiyle oluşmaz. Açık gereksinim, pozitif ve negatif senaryoları kapsayan riske uygun test, eşzamanlı ve bütünlüklü kayıt, izlenebilir sapma yönetimi ve kontrollü dokümantasyon birlikte çalıştığında oluşur. İyi test yalnızca “sistem bugün çalıştı” demez; sistemin geçersiz ve beklenmeyen koşullarda da güvenli davrandığını gösterir. İyi kayıt ve dokümantasyon ise daha güçlü bir cümle kurar: “Neyi doğruladığımızı, neden güvendiğimizi ve bu güveni değişiklikten sonra nasıl yeniden sınayacağımızı biliyoruz.”