İçindekiler
Bir kullanıcı formuna 18 yerine 17 yaş girildiğinde ne olur? Peki 18 kabul edilirken 65’in kabul edilmemesi gerekiyorsa sistem 65’e nasıl davranır? Yazılım hataları çoğu zaman veri aralığının ortasında değil, koşulların birbirine değdiği uç noktalarda saklanır. Sınır Değer Analizi (Boundary Value Analysis — BVA), her olasılığı denemek yerine hata çıkma ihtimali yüksek değerleri seçerek minimum eforla güçlü bir test kapsamı oluşturur.
``
Sınırlar neden risklidir?
Programcılar aralıkları genellikle karşılaştırma operatörleriyle tanımlar: <, <=, >, >=. Ancak küçücük bir eşittir işareti, sistem davranışını tamamen değiştirebilir. Örneğin geçerli yaş aralığı matematiksel olarak
şeklinde tanımlansın. Geliştirici yanlışlıkla x > 18 yazarsa 18 yaşındaki kullanıcı reddedilir. x < 65 yazarsa benzer sorun üst sınırda ortaya çıkar. Bunlar klasik off-by-one hatalarıdır.
Sınır Değer Analizi, geçerli bir $[a,b]$ aralığı için özellikle şu değerlerle ilgilenir:
\[a-1,\ a,\ a+1,\ b-1,\ b,\ b+1\]Bu değerler; sınırın hemen dışını, kendisini ve hemen içini temsil eder. Aralığın ortasından seçilen bir değer de normal davranışı doğrulamak için eklenebilir.
| Değer türü | Yaş örneği | Beklenen sonuç | Amaç |
|---|---|---|---|
| Alt sınırın dışı | 17 | Geçersiz | Eksik alt sınır kontrolünü bulmak |
| Alt sınır | 18 | Geçerli | > ile >= hatasını yakalamak |
| Alt sınırın içi | 19 | Geçerli | Sınır sonrası davranışı doğrulamak |
| Normal değer | 40 | Geçerli | Tipik akışı kontrol etmek |
| Üst sınırın içi | 64 | Geçerli | Sınır öncesi davranışı doğrulamak |
| Üst sınır | 65 | Geçerli | < ile <= hatasını yakalamak |
| Üst sınırın dışı | 66 | Geçersiz | Taşan değerin reddedildiğini görmek |
Eşdeğer bölümlendirme ile ilişkisi
BVA tek başına sihirli bir değnek değildir. Çoğunlukla Eşdeğer Bölümlendirme ile birlikte kullanılır. Bu yaklaşım, girdileri aynı davranışı göstermesi beklenen sınıflara ayırır.
| Bölüm | Aralık | Temsilci değer |
|---|---|---|
| Geçersiz düşük | $x < 18$ | 17 |
| Geçerli | $18 \leq x \leq 65$ | 40 |
| Geçersiz yüksek | $x > 65$ | 66 |
Eşdeğer bölümlendirme “hangi bölgeleri test etmeliyim?” sorusunu, sınır analizi ise “bu bölgelerin en riskli noktaları hangileri?” sorusunu yanıtlar. Böylece yüzlerce giriş yerine birkaç stratejik değer kullanılır.
Orta düzey bir otomasyon örneği
Aşağıdaki Python fonksiyonu yaşın kabul edilip edilmediğini belirler. Parametreli test ise bütün kritik değerleri tek bir test yapısında çalıştırır:
def is_valid_age(age: int) -> bool:
return 18 <= age <= 65
import pytest
@pytest.mark.parametrize("age, expected", [
(17, False),
(18, True),
(19, True),
(40, True),
(64, True),
(65, True),
(66, False),
])
def test_age_boundaries(age, expected):
assert is_valid_age(age) is expected
pytest.mark.parametrize, aynı test mantığını farklı girdilerle tekrar çalıştırır. Böylece kopyala-yapıştır testler yerine okunabilir ve genişletilebilir bir senaryo tablosu elde edilir.
Her sınır sayısal değildir
Sınırlar yalnızca yaş veya fiyat gibi sayılarda görülmez. Parola uzunluğu, dosya boyutu, liste kapasitesi, tarih aralığı ve API istek limiti de sınır üretir. Örneğin parola uzunluğu 8–20 karakterse 7, 8, 9, 19, 20 ve 21 karakterlik girdiler denenmelidir. Tarihlerde ay sonları, 29 Şubat ve yıl geçişleri özellikle değerlidir.
Çok değişkenli sistemlerde tüm sınır kombinasyonlarını denemek test sayısını hızla büyütür. Bu nedenle önce bir değişken sınırdayken diğerlerini normal değerlerde tutmak, ardından yalnızca iş açısından kritik kombinasyonları eklemek iyi bir dengedir. Özetle BVA, daha fazla test yazmak değil, doğru noktalara test yerleştirmek sanatıdır; çünkü hatalar da uçlarda yaşamayı sever.
Yorumlar