Yazılım testi, hataları bulmak ve sistemin güvenilirliğini artırmak için kritik bir süreçtir. ISTQB tarafından belirlenen 7 temel test prensibi, test süreçlerini daha verimli hale getirmek için rehber niteliğindedir.
1. Test, Hataların Varlığını Gösterir (Testing Shows Presence of Defects)
Testler, bir yazılımda hata olmadığını ispatlamak yerine, hataların varlığını ortaya çıkarmayı amaçlar. Bir yazılımda hiç hata bulunamaması, hataların olmadığı anlamına gelmez.

Örnek:
🔍 Bir mobil uygulamada test yapıyorsun ve hiçbir hata bulamıyorsun. Ancak bu, uygulamanın mükemmel olduğu anlamına gelmez; sadece test senaryolarının henüz tüm hataları bulamadığını gösterir.
📌 Ne Yapılmalı?
- Testler hata bulma süreci olarak görülmeli ve mümkün olduğunca farklı senaryolar denenmelidir.
- Testler tamamlandıktan sonra bile kullanıcılar yeni hatalar keşfedebilir.
2. Kapsamlı Test Yapmak İmkansızdır (Exhaustive Testing is Impossible)
Bir yazılımın tüm kombinasyonlarını test etmek pratikte imkansızdır. Sonsuz giriş, çıkış ve sistem kombinasyonları nedeniyle her senaryoyu test etmek mümkün değildir.

Örnek:
🖥️ Bir bankacılık uygulamasında para transferi özelliğini test ettiğini düşünelim. Müşterinin gönderebileceği tüm rakamları, döviz türlerini, farklı banka hesaplarını ve hata senaryolarını test etmek sonsuz kombinasyon içerir.
📌 Ne Yapılmalı?
- Risk bazlı test yaklaşımı benimsenmeli, en kritik fonksiyonlar öncelikli test edilmelidir.
- Eşdeğer bölümlere ayırma (Equivalence Partitioning) ve Sınır Değer Analizi (Boundary Value Analysis) gibi teknikler kullanılmalıdır.
3. Erken Test Yapmak Önemlidir (Early Testing is Important)
Test süreci mümkün olduğunca erken başlamalıdır. Yazılım geliştirme sürecinde hatalar ne kadar erken tespit edilirse, düzeltme maliyeti o kadar düşük olur.

Örnek:
💸 Bir e-ticaret sitesinde, ödeme sistemini geliştirme aşamasında test etmezsen, yazılım tamamlandığında büyük hatalarla karşılaşabilirsin. Ancak geliştirme sırasında yapılan erken testler, ödeme hatalarının önceden fark edilmesini sağlar.
📌 Ne Yapılmalı?
- Shift-left testing (Testleri geliştirmenin erken aşamalarına kaydırma) yaklaşımı uygulanmalıdır.
- Kod incelemeleri (Code Reviews) ve birim testleri (Unit Tests) erken aşamalarda yapılmalıdır.
4. Hatalar Belirli Bölgelere Yoğunlaşır (Defect Clustering)
Genellikle hataların büyük bir kısmı, yazılımın belirli bir bölümünde yoğunlaşır. Pareto prensibine (80/20 kuralı) göre, yazılım hatalarının %80’i kodun %20’sinde bulunur.

Örnek:
🐞 Bir mobil oyun uygulamasında, oyuncuların en çok etkileşimde bulunduğu ana ekran sık sık çökmeye neden oluyor. Testler, hataların büyük bir kısmının bu ekranda yoğunlaştığını gösteriyor.
📌 Ne Yapılmalı?
- Hata raporlarını analiz ederek, sorunlu alanları belirlemek ve bu bölgelere daha fazla test kaynağı ayırmak gerekir.
- Önceki projelerde en çok hata çıkan modüller, yeni projelerde öncelikli olarak test edilmelidir.
5. Aynı Testler Yeni Hataları Bulamaz (Pesticide Paradox)
Aynı test senaryolarını tekrar tekrar çalıştırmak, zamanla yeni hataları bulmamızı zorlaştırır. Testler sürekli olarak güncellenmeli ve yeni senaryolar eklenmelidir.

Örnek:
📌 Bir otel rezervasyon sisteminde sürekli aynı test senaryoları çalıştırılıyor ve sistemde yeni hata bulunamıyor. Ancak kullanıcılar farklı girişler yaptığında hatalar keşfediliyor.
📌 Ne Yapılmalı?
- Test senaryoları düzenli olarak gözden geçirilmeli ve yenilenmelidir.
- Exploratory Testing (Keşif Testleri) uygulanarak, testçilerin yeni ve yaratıcı testler yapması teşvik edilmelidir.
6. Test Stratejisi Yazılımın Türüne Bağlıdır (Testing is Context Dependent)
Her yazılım farklıdır ve test stratejisi, yazılımın türüne göre şekillendirilmelidir. Bir bankacılık uygulamasıyla bir oyun uygulaması aynı şekilde test edilemez.

Örnek:
🏦 Bir bankacılık uygulamasında güvenlik en önemli kriterlerden biridir ve detaylı güvenlik testleri yapılmalıdır.
🎮 Bir mobil oyunda ise performans ve kullanıcı deneyimi daha kritik olabilir.
📌 Ne Yapılmalı?
- Test stratejileri, uygulamanın kullanım alanına göre belirlenmelidir.
- Güvenlik, performans, fonksiyonel ve kullanılabilirlik testleri, projeye uygun şekilde önceliklendirilmelidir.
7. Hata Olmaması, Kullanıcı Dostu Olduğu Anlamına Gelmez (Absence-of-Errors Fallacy)
Bir yazılımda hata bulunmaması, onun kullanıcı ihtiyaçlarını karşıladığı anlamına gelmez. Hatasız ama kullanışsız bir uygulama başarısız olabilir.

Örnek:
📱 Bir sağlık uygulaması test edildi ve hiçbir hata bulunmadı. Ancak kullanıcılar karmaşık arayüz nedeniyle uygulamayı kullanmakta zorlanıyor ve uygulama başarısız oluyor.
📌 Ne Yapılmalı?
- Kullanıcı deneyimi (UX) testleri ve kullanılabilirlik testleri yapılmalıdır.
- Test süreçlerinde sadece teknik hatalar değil, kullanıcı geri bildirimleri de dikkate alınmalıdır.
Sonuç: Test Prensiplerini Uygulamak Neden Önemlidir?
Bu yedi test prensibi, test süreçlerini daha etkili hale getirmek için rehber niteliğindedir. Test süreçlerinde daha az hata ile karşılaşmak, maliyetleri düşürmek ve müşteri memnuniyetini artırmak için bu prensipler dikkate alınmalıdır.
✅ Test sürecine erken başlamak,
✅ Kritik alanlara odaklanmak,
✅ Testleri sürekli güncellemek
✅ Kullanıcı ihtiyaçlarını göz önünde bulundurmak başarılı bir yazılım testi için olmazsa olmazlardır.