Test tasarım teknikleri: sınır değer ve eşdeğerlik sınıfları uygulaması
Beceri rehberi

Test tasarım teknikleri: sınır değer ve eşdeğerlik sınıfları uygulaması

Hazırlayan: Mindset Institute EditörlüğüGüncellendi: 6 dk okuma

Sınır değer analizi ve eşdeğerlik sınıfları adım adım: sınıfları nasıl çıkarırsınız, hangi noktaları denersiniz, sık hatalar ve karar tablosu ile tamamlama.

Neden teknik gerekir: tüm girdileri denemek mümkün değil

Bir yaş alanı, bir tutar alanı ya da bir tarih aralığı, kuramsal olarak sonsuz sayıda girdi kabul eder. Hepsini denemek imkânsızdır, rastgele seçmek ise şansa bırakılmış bir kapsamdır. Test tasarım teknikleri, sınırlı sayıda test girdisiyle en çok hata yakalamayı hedefleyen sistemli yöntemlerdir.

Temel teknikler eşdeğerlik sınıfları (eşdeğer bölümleme) ve sınır değer analizidir. Birlikte kullanıldıklarında en verimli sonucu verirler. Eşdeğerlik sınıfları "hangi girdi gruplarını denemeliyim" sorusunu, sınır değer analizi "her grubun hangi noktasını denemeliyim" sorusunu cevaplar. Karar tablosu, durum geçişi ve pairwise gibi diğer teknikler ise birden çok koşulun birleştiği durumlar için tamamlayıcıdır.

Teknikler matematiksel bir ispat sunmaz; sunduğu şey, deneyimle desteklenmiş bir varsayımdır: aynı sınıftaki girdiler sistemde benzer davranır, hatalar ise çoğunlukla sınırlarda toplanır. Bu varsayım, koşul ifadelerinde sık yapılan hataların (küçüktür yerine küçük eşittir yazmak gibi) sınırlarda ortaya çıkmasına dayanır.

Eşdeğerlik sınıfları nasıl çıkarılır

Fikir basittir: sistemin aynı biçimde davranacağı girdileri bir sınıfa toplayın, her sınıftan yalnızca bir temsilci deneyin. Sınıf içinde bir değer çalışıyorsa diğerlerinin de çalışacağı varsayılır; biri başarısızsa hepsinin başarısız olması beklenir.

Yöntem: • Girdi alanının kuralını yazın: tür, aralık, biçim, zorunluluk. • Geçerli sınıfları belirleyin: kuralı sağlayan değer grupları. • Geçersiz sınıfları belirleyin: aralığın altı, aralığın üstü, yanlış tür, boş değer, yanlış biçim. • Her sınıf için bir temsilci seçin ve test girdisi yapın. • Aynı testte yalnızca bir geçersiz sınıfı deneyin; birden çok geçersiz alanı aynı anda gönderirseniz hangisinin hatayı tetiklediği anlaşılmaz.

Örneğin bir sigorta başvuru formunda yaş alanı yalnızca belirli bir alt ve üst yaş arasında kabul ediliyor olsun. Sınıflar şunlardır: aralığın içindeki geçerli yaşlar, alt sınırın altındaki geçersiz yaşlar, üst sınırın üstündeki geçersiz yaşlar, sayı olmayan girdi (harf, simge) ve boş bırakılmış alan. Her sınıf için bir temsilci yeter. Aralığın ortasından rastgele seçilmiş bir yaşla alttan bir yaşı ayrı ayrı denemek aynı sınıfın tekrarıdır ve değer katmaz.

Sınıfları yalnızca sayılar için düşünmeyin. Kullanıcı rolü (yönetici, normal kullanıcı, misafir), ödeme yöntemi, dosya türü ve dil de eşdeğerlik sınıfı olarak ele alınabilir.

Sınır değer analizi: hatalar nerede toplanır

Geliştiricinin yazdığı koşul çoğu zaman bir sınırı içerir: "tutar sınırı aşarsa", "en az şu kadar karakter". Bu koşulları yazarken yapılan en sık hata, eşitlik durumunu yanlış yorumlamaktır: küçüktür ile küçük eşittir arasındaki fark. Bu nedenle test, sınırın her yanına odaklanır.

Her geçerli aralığın alt ve üst ucu için şu noktaları deneyin: • Sınırın hemen altı • Sınırın kendisi • Sınırın hemen üstü

Yukarıdaki yaş örneğinde alt sınır için, alt sınırın bir eksiği (reddedilmeli), alt sınırın kendisi (kabul edilmeli) ve bir fazlası (kabul edilmeli) denenir. Üst sınırda da aynı üçlü uygulanır. Bu yaklaşım, aralığın içinde çok sayıda rastgele değer denemekten çok daha az çaba ile en olası hatayı yakalar.

"Bir eksik, bir fazla" kavramı alana göre değişir. Tam sayıda en küçük adım bir birimdir; para tutarında kuruş duyarlılığı olabilir; tarihte gün, zaman damgasında saniye ya da milisaniye. Adım büyüklüğünü alanın kuralından okuyun.

Sınır sadece sayıda aranmaz: bir listedeki öğe sayısı (boş liste, tek öğe, izin verilen en çok öğe), metin uzunluğu (boş, tek karakter, sınır uzunluk, sınırın bir fazlası), dosya boyutu, bir sayfadaki kayıt sayısı, yenileme süresi ve oturum zaman aşımı da sınır barındırır.

Birlikte uygulama: bir indirim kuralı örneği

Örneğin bir mağazada şu kural olsun: sepet tutarı belirli bir eşiğin üzerindeyse kargo bedavadır, eşiğin altındaysa sabit kargo bedeli eklenir. Alan "sepet tutarı"dır.

Eşdeğerlik sınıfları: eşiğin altındaki geçerli tutarlar (kargo bedeli eklenir), eşiğin üstündeki geçerli tutarlar (kargo bedava), sıfır ya da negatif tutar (geçersiz), sayı olmayan girdi (geçersiz). Her sınıfa bir temsilci seçilir.

Sınır değer analizi: eşiğin bir kuruş altı, eşiğin tam kendisi ve eşiğin bir kuruş üstü. Burada önemli olan, kuralın "eşit" durumunu nasıl ele aldığıdır. Gereksinimde "üzerinde" mi yazıyor, "ve üzerinde" mi? Gereksinim bunu söylemiyorsa bir test sorusu doğmuştur: analiste sorun. Bu soruyu yazmadan önce geliştiriciye sormak ya da kodu okumak yanıltıcı olabilir; kod yanlış yazılmış olabilir.

Sonuç olarak toplam test sayısı çok küçüktür, ama kuralın hata yapılması en olası bölgesini kapsar. Aynı davranışı sınayan sıradan sepet tutarlarını eklemek, test sayısını artırır ama bulunan hata sayısını artırmaz.

Diğer teknikler: karar tablosu, durum geçişi, pairwise

Eşdeğerlik ve sınır, tek bir girdi alanının davranışını kapsar. Gerçek sistemlerde sonuç çoğu zaman birden çok koşulun bileşimine bağlıdır.

Karar tablosu: Koşulları sütunlara, kural kombinasyonlarını satırlara yazarsınız. Örneğin üyelik durumu, kupon varlığı ve sepet eşiği birlikte indirimi belirliyorsa, tablo olası bileşimleri eksiksiz listeler ve hangisinin tanımsız kaldığını gösterir. Tabloda "bu kombinasyon için gereksinim yok" diye işaretlenen her hücre, bir soru ya da bir hatadır.

Durum geçiş testi: Sistem durum değiştiriyorsa (sipariş: oluşturuldu, ödendi, kargolandı, iptal edildi) hangi geçişin izinli, hangisinin yasak olduğunu çıkarın. Her izinli geçişi ve birkaç yasak geçişi deneyin; örneğin kargolanmış siparişin doğrudan iptal edilmesi.

Pairwise (ikili kombinasyon) testi: Çok sayıda parametre varsa (tarayıcı, işletim sistemi, dil, ödeme yöntemi) tüm bileşimleri denemek mümkün değildir. Pairwise, her parametre çiftinin en az bir kez birlikte denenmesini sağlayan küçük bir küme üretir; hataların çoğunlukla az sayıda parametrenin etkileşiminden doğduğu varsayımına dayanır.

Keşifsel test ise teknikleri tamamlar: önceden yazılmamış, öğrenirken tasarlanan ve görev tanımıyla (charter) yönlendirilen incelemedir.

Sık yapılan hatalar ve kontrol listesi

Sınıfı yanlış belirlemek: Kural belgesinde yazmayan örtük sınıflar (boşluk içeren girdi, çok uzun metin, özel karakter) atlanır. Çözüm: her alan için "boş, çok kısa, çok uzun, özel karakter, yanlış tür" listesini şablon olarak kullanın.

Sınırı belgeden değil kodun davranışından türetmek: Kodda var olan sınır yanlış olabilir. Sınır değerleri gereksinimden alın, kodla karşılaştırın, farkı hata ya da soru olarak raporlayın.

Birden çok geçersiz girdiyi bir arada denemek: Hata mesajı ilk bulunan alanı gösterir, diğerleri maskelenir. Her geçersiz sınıf ayrı testtir.

Yalnızca ön yüzü denemek: Arayüzdeki doğrulama aşıldığında (örneğin doğrudan API çağrısıyla) sunucu yine de sınırı denetlemelidir. Kritik alanlarda sınırları hem arayüzde hem servis katmanında sınayın.

Kısa kontrol listesi: • Her alan için geçerli ve geçersiz sınıflar yazıldı mı? • Her aralığın alt ve üst ucunda sınırın altı, kendisi ve üstü denendi mi? • Eşitlik durumunun gereksinimde nasıl geçtiği teyit edildi mi? • Birden çok koşullu kurallar için karar tablosu çıkarıldı mı? • Beklenen sonuçlar gereksinime mi dayanıyor, kodun davranışına mı?

Bu beceriyi Mindset programlarında nerede geliştirirsiniz

Test Otomasyonu ve QA Temelleri programının Test Senaryosu Tasarım Teknikleri modülü; eşdeğer bölümleme, sınır değer analizi, karar tablosu, durum geçiş testi, pairwise ve keşifsel test başlıklarını işler. Bu içerik, teknikleri ezberlemek yerine bir özellik üzerinde uygulamak isteyen yeni test uzmanlarına, analizden teste geçen çalışanlara ve geliştirici testlerinin kapsamını gözden geçirmek isteyen yazılımcılara hitap eder. Kurumsal ekipler için de ortak bir test tasarım dilinin oluşturulmasında başlangıç noktası olabilir.

İlgili Mindset programı

Test Otomasyonu ve QA Temelleri

Sık sorulanlar

Sık sorulan sorular

Eşdeğerlik sınıfı ile sınır değer analizi arasındaki fark nedir?

Eşdeğerlik sınıfları girdi alanını davranışı benzer gruplara böler ve her gruptan bir temsilci seçer. Sınır değer analizi ise her grubun uç noktalarına, yani hatanın en çok görüldüğü yere odaklanır. Birlikte kullanıldığında az test ile iyi kapsam sağlarlar.

Sınır değer analizinde hangi noktalar denenir?

Her geçerli aralığın alt ve üst ucunda sınırın hemen altı, sınırın kendisi ve sınırın hemen üstü denenir. Adım büyüklüğü alana göre değişir: tam sayıda bir birim, para tutarında kuruş, tarihte gün olabilir. Eşitlik durumunu gereksinimden doğrulayın.

Bu teknikler yalnızca sayılar için mi geçerli?

Hayır. Kullanıcı rolü, dosya türü, ödeme yöntemi, liste uzunluğu, metin uzunluğu ve tarih aralığı da sınıf ve sınır taşır. Sayısal olmayan alanlarda sınıflar davranışa göre kurulur, uzunluk ve adet alanlarında sınır mantığı aynen uygulanır.

Kodu okuyarak sınırları belirlemek doğru mu?

Sınırları öncelikle gereksinimden almalısınız. Kod yanlış yazılmış olabilir ve koddan türetilen test bu yanlışı onaylar. Kod ile gereksinim arasında fark bulursanız bunu hata ya da analiste yöneltilmiş bir soru olarak raporlayın.

Bu teknikleri otomasyon testlerinde de kullanabilir miyim?

Evet. Sınıf temsilcileri ve sınır değerler, veri odaklı otomasyon testlerinin girdi kümesi olarak çok uygundur. Tek bir test kodunu bu girdi tablosuyla çalıştırmak hem bakım yükünü azaltır hem kapsamı görünür kılar.

Sınır Değer Analizi ve Eşdeğerlik Sınıfları Nasıl Uygulanır