Kara Kutu Test Tekniği ve Uygulanması

Merhaba Arkadaşlar,
Mobilhanem.com üzerinden anlattığımız Yazılım Testi Eğitimi serisinin dördüncü dersimizde sizlere Kara Kutu Test Tekniği ve Uygulanması konusundan  bahsetmeye çalışacağım.

Kara Kutu Test Tekniği

Kara Kutu Test Tekniği
Kara Kutu Test Tekniği

Kara kutu test tekniği, test edilen yazılımın davranışının uygulamanın kod yapısına, kodun implementasyonuna ve  kodun nasıl işlediğine bakılmaksızın uygulanır. Bu test tekniğinde tamamen uygulamanın girdileri ile çıktılarına yoğunlaşılır ve uygulamanın çıktıları girdilerden nasıl elde ettiğine ilişkin durumlar göz ardı edilir. Kara kutu test tekniğinde uygulama bizim için bir kara kutudur. Uygulamanın içerisini yani yapısını, mimarisini ve işleri nasıl ele aldığı ile ilgilenmeyiz. Bu test tekniği tamamen özellikler ve gereksinimler üzerine inşa edilir. Bu test tekniğinde kara kutu olan uygulamamızın gereksinimleri ve özellikleri bir şekilde yerine getirmesi beklenir. Bu test tekniğini dört alt başlıkta ele alacağız:

  • Süreç
  • Dezavantajlar
  • Avantajlar
  • Alt Test Teknikleri

Süreç

  1. Gereksinimler ve/veya spesifikasyonlar analiz edilir.
  2. Geçerli olan ve geçerli olmayan girdiler belirlenir.
  3. Belirlenmiş olan tüm bu girdilere göre beklenen çıktılara karar verilir.
  4. Seçilen girdileri içeren testler oluşturulur.
  5. Oluşturulan testler çalıştırılır.
  6. Çalıştırılan testlerde elde edilen çıktılar beklenen çıktılar ile karşılaştırılır
  7. Uygulamamın doğru çalışıp çalışmadığı belirlenir.

Kara kutu test tekniği sürecini bir örnek ile pekiştirelim. Uygulamamızda bir kullanıcı giriş ekranı olsun. Bu kullanıcı giriş ekranı içerisinde kullanıcı adı ile şifre bilgilerinin alındığını varsayalım (Sadece bir gereksinim üzerinden ilerleyeceğim).

  1. Gereksinim: Kullanıcının şifresi en az 8 karakter olmalıdır.
  2. Girdiler:
    1. Geçerli: 12345678
    2. Geçersiz: 1234567
  3. Çıktılar:
    1. Geçerli kullanıcı şifresi için hata mesajı gösterilmez.
    2. Geçersiz kullanıcı şifresi için “Lütfen bilgilerinizi kontrol ediniz” mesajı gösterilir.
  4. Testler:
    1. Geçerli kullanıcı şifresi kullanımı durumunda mesajın gösterilmeyeceğini belirten test
    2. Geçersiz kullanıcı şifresi kullanımı durumunda”Lütfen bilgilerinizi kontrol ediniz” mesajının gösterileceğini belirten test
  5. Uygulama açılır ve testler koşulur.
  6. 4. adımda belirlenen testlerin çalışması sonucunda elde edilen çıktılar ile 3. adımda belirtilen çıktılar karşılaştırılır.
  7. Her iki testte başarılı ise uygulama doğru çalışıyor kabul edilir aksi takdirde uygulama başarısızdır.

Dezavantajlar

Kara kutu test tekniği için en büyük dezavantaj; bu test tekniği kullanılırken test uzmanının uygulamanın ne kadarının test edildiğinden emin olamamasıdır. Diğer dezavantajlarını da şu şekilde sıralayabiliriz:

  • Açıkça belirtilmiş gereksinimler veya spesifikasyonlar olmadığında testlerin hazırlanması zordur.
  • Bir programcı tarafından zaten uygulanmış olan testler uygulanıyor olabilir.
  • Bir hatanın sebebini bulmak zordur.
  • Uygulama içerisindeki birçok akış test edilmemiş olabilir.

Avantajlar

Kara kutu test tekniği için en büyük avantaj; her şeyi test edemese bile, test uzmanını hataları bulması için hem etkin hem de etkili testleri seçmesine yönlendirmesidir. Diğer avantajları da şu şekildedir:

  • Test uzmanının uygulamanın nasıl implemente edildiğini bilmesine gerek yoktur.
  • Geniş ve kompleks sistemler için kullanıldığında oldukça etkilidir.
  • Test uzmanı ve geliştiricinin bağımsız olmasından dolayı dengeli ve önyargısız bir test tekniğidir.
  • Test senaryoları gereksinimler ve spesifikasyonlar tanımlanır tanımlanmaz hazırlanabilir.

Alt Test Teknikleri

Kara kutu test tekniği için en sık kullanılan beş önemli alt test tekniğini bu bölümde örnekleri ile ele almaya çalışacağım. Bu beş teknik sırası ile Denklik Sınıfı, Sınır Değeri, Karar Tablosu, İkili Test ve Durum Geçişi‘dir. Bilindiği üzere bir uygulamanın tamamen test edilmesi mümkün değildir. İşte bu alt teknikler kara kutu test tekniğinin en önemli avantajı olan “test uzmanını hataları bulması için hem etkin hem de etkili testleri seçmesine yönlendirmesidir” ifadesinde belirtildiği gibi etkin ve etkili test senaryolarının seçilmesini sağlarlar.

Denklik Sınıfı

Denklik sınıfı tekniği girdiler ya da çıktılar üzerinde uygulanabilir. Denklik Sınıfı tekniğinin uygulanması iki aşamalıdır. Birinci aşamada denk sınıflar belirlenir. İkinci aşamada ise herbir denklik sınıfı için bir adet test senaryosu hazırlanır. Bu teknikte kritik nokta denklik sınıflarını belirlemektir. Denklik sınıfları belirlenirken değerler (girdi ve ya çıktı) aynı davranışı göstermesi gereken gruplara ayrılır. Elde edilen gruplar bizim için denklik sınıflarıdır. Genel olarak üç farklı tipte denklik sınıfı vardır. Bunlar sırasıyla Sürekli Değer Aralığı, Ayrık Değerler ve Tek Seçimli Değerler‘dir.

Sürekli Değer Aralığı
Sürekli Değer Aralığı
Sürekli Değer Aralığı

Sürekli değer aralığında girdi ya da çıktılara uygulanacak değerler birbirini takip eder ve değerler arasında herhangi bir boşluk yoktur. Kısa bir örnek ile açıklamaya çalışayım. Uygulamanızda oda sıcaklığı değerini girdi olarak alan bir fonksiyon olduğunu düşünelim. Sıcaklık 23 derece, 23.1 derece ya da 23.100004 derece olarak belirlenebilir. Gördüğünüz üzere burada herhangi iki değer arasında mutlaka bir değer ile karşılaşırsınız.  Size verilen gereksinim içerisinde sıcaklığın 10 ila 100 derece arasındaki değerlerin geçerli olduğunu varsayalım. Bu noktada 10 dan küçük olan değerler ve 100den büyük olan değerler geçersiz olacaktır. Belirtilen gereksinim için denklik sınıflarımız şu şekilde olacaktır: [-∞, 0), [10-100], (100, +∞]. [-∞, 0) denklik sınıfı ele alıdığında -1 ve -1000 değerlerinin uygulamaya aynı davranışı sergiletmesini bekleriz. Bu sebeple üç denklik sınıfı olduğundan üç tane test senaryosu oluşturmamız ve denklik sınıfı içerisindeki herhangi bir değeri test senaryosunun girdisi olarak kullanmamız yeterli olacaktır.

Ayrık Değerler
Ayrık Değerler
Ayrık Değerler

Sadece belirli değerleri alan girdi ya da çıktılardır. Bir sınıftaki öğrenci sayısı, cinsiyet, evdeki oda sayısı, medeni hal, vb. Buradaki örneğimizde özel ders vermek isteyen öğretmenin en az 2 ve en fazla 6 öğrenciden oluşan gruplara ders vermek istediğini kabul edelim. Buna göre oluşacak denklik sınıfları: (0, 1), (2,3,4,5) ve (5+) olacaktır. Girdinin alacağı değere göre de mesaj verileceğini varsayalım. 2den az öğrenci olması durumda beklentimiz ‘Sınıfta en az iki öğrenci olmalıdır’ mesajının gösterilmesi olsun. Bu noktada 0 ya da 1 değerinin davranışının aynı olmasını bekleriz. Yine elimizde üç denklik sınıfı olduğundan üç tane test senaryosu oluşturmamız ve denklik sınıfı içerisindeki herhangi bir değeri test senaryosunun girdisi olarak kullanmamız yeterli olacaktır.

Tek Seçimli Değerler
Tek Seçimli Değerler
Tek Seçimli Değerler

Tek seçimli denklik sınıfında sadece bir tane geçerli değer vardır. Diğer tüm değerler geçersizdir. Örneğin sadece kişilere kredi veren bir bankayı düşünürsek şirket, kamu, dernek veya vakıf bizim için geçersiz olacaktır. Tek seçimli değerlerde hazırlanacak test senaryosu bir geçerli (kişi) ve bir geçersiz olmak üzere en az 2 tanedir.

Denklik Sınıfı Tekniğinde Dikkat Edilmesi Gereken Noktalar
  1. Bir denklik sınıfı içerisinde yer alan tüm değerler için tek tek test oluşturma durumumuz çok çok çok nadir olacaktır (Eğer ki kod içerisinde her bir kontrolü ayrı ayrı if cümleleri ile ele almış bir çılgın yoksa… if a == 1 then, if a == 2 then, vb.)
  2. Zamanınız ve bütçeniz varsa herbir denklik sınıfı için birden fazla test senaryosu oluşturabilirsiniz. Fakat 2. ve daha sonraki test senaryolarının ilk test senaryosunun bulamadığı kusurları bulma ihtimali düşüktür.
  3. Tüm geçersiz veri değerlerine sahip test senaryosu hazırlamak doğru bir yaklaşım değildir(Geçersiz*). Bunun yerine test senaryolarının sadece bir geçersiz değeri girdi olarak kullanması daha sağlıklıdır. Örneğin bir websitesi kullanıcı kayıt işlemini ele alalım. Kullanıcı kaydı için e-posta ve şifre bilgileri kullanılsın. Şifre için de en az 7 karakter kuralımız olsun. Geçersiz durumlarda da “bilgilerinizi kontrol ediniz” mesajı gösterilisin. Bu durumda sadece denklik sınıfı tekniği kullanarak hazırlanmış bir kısım örnek test senaryoları aşağıdaki tablodaki gibi olacaktır. Üçüncü test senaryosu ile ne elde etmek istiyor olabiliriz? Bu test senaryosu başarısız olursa nasıl bir yorumumuz olur?
e-postaŞifreSonuç
[email protected]1234567Geçerli
[email protected]12Geçersiz
[email protected]gmail.com12Geçersiz *

Sınır Değeri

Sınır değeri tekniği bir çok hatanın gizlendiği sınır değerlerine odaklanır. Bu tekniğinin uygulanması üç aşamalıdır.

  1. Denklik sınıfları belirlenir,
  2. Her bir denklik sınıfının sınır değerleri tanımlanır,
  3. Her bir sınır değeri için
    1. Kendisinin,
    2. Kendisinden bir önceki değerin,
    3. Kendisinden bir sonraki değerin girdi olduğu test senaryoları hazırlanır.

Denklik sınıfında bahsetmiş olduğumuz en az 7 karakter olması gereken şifre girdimize bu tekniği uygulayacak olursak aşağıdaki test senaryolarını elde edebiliriz.

e-postaŞifreSonuç
[email protected]1234567Geçerli (kendisi)
[email protected]123456Geçersiz (bir önceki)
[email protected]12345678Geçerli (bir sonraki)

Karar Tablosu

Karar tablosu test tekniğinin uygulanması iki aşamada olmaktadır.

  1. Girdi koşullarının tanımlanması,
  2. Girdi koşullarına bağlı olarak alınacak aksiyonların belirlenmesi

Basit bir örnek üzerinde bu tekniği uygulayalım. Kişinin evli ve/veya başarılı bir çalışan olmasına göre maaşına zam yapılacağını varsayalım. Burada evli ve başarılı çalışan olma durumları girdi koşullarını oluştururken yapılacak indirim alınacak aksiyonu belirtmektedir. Kişi evli ve başarılı bir çalışan ise 20%, evli ama başarılı bir çalışan değilse 8%, bekar ama başarılı bir çalışan ise 12% ve hem bekar hem de başarısız çalışan ise 4% zam alıyor olsun. Bu durumda karar tablosu şu şekildedir.

K1K2K3K4
Girdi Koşulları
     Evli?EEHH
     Başarılı Çalışan?EHEH
Aksiyonlar
     Zam (%) 20 812 4

Bundan sonra test senaryoları oluşturulurken yukarıda hazırlanmış olan karar tablosu transpoz edilir.

 Test SenaryosuEvli?Başarılı Çalışan?İndirim(%) – Sonuç
TS-1EE20
TS-2EH8
TS-3HE12
TS-4HH4

Görüldüğü üzere tam ve kompakt bir şekilde sunulan uygulama davranışlarını ele alındığı düşünüldüğünde karar tablolarından test senaryolarını oluşturmak oldukça kolaydır.

İkili Test

Yazılımlarda bulunan birçok hatanın kök neden analizi yapıldığında bir değişkenin değerine dayandığı görülür(20%-68%). Bununla birlikte çoğu hatanın iki değişkenin değerleri arasındaki etkileşimlerin testlerinde keşfedildiği anlaşılmıştır (65%-97%). Değerlerden de anlaşılacağı üzere değişkenlerin değerleri arasındaki etkileşim test edildiğinde hata yakalama şansımız artmaktadır. İkili test tekniğine değinmeden önce kombinasyon test tekniğine değinmekte fayda görüyorum. Kombinasyon test tekniği, değişkenlerin alabileceği seçeneklerin birbirleri ile olan kombinasyonlarının test edilmesidir. Daha açıklayıcı olması için bir örnek üzerinden ilerleyelim.

guc_adaptoru
Güç Adaptörü Ayarları Ekranı

Örneğimiz bilgisayarımızın güç adaptörü ayarları ekranının testi şeklinde olsun. Resimde görüleceği üzere ekranda dört tane özelliğinin aktif ya da pasif olduğu belirlenebilmektedir. 4 adet değişken ve her bir değişken 2 değer alabiliyor. Bu durumda kombinasyon test tekniğine göre hazırlayacağımız test senaryosu sayısı 2x2x2x2=16 olacaktır. 16 test senaryosunun hazırlanması ve çalıştırılması makuldur. Fakat her zaman bu kadar az değişkenimiz veya değişkenlerimizin alabileceği değerler bu kadar az olmayabilir. Örneğin 5 değişkenimiz olabilirdi. Bunların alacağı değerleri sırası ile 3, 2, 8, 5 ve 7 olduğunu varsayarsak o zaman kombinasyon test tekniği ile hazırlamamız gereken test senaryosu sayısı 3x2x8x5x7=1680 olacaktı.

İşte tam bu durumda karşımıza ikili test tekniği çıkmaktadır. Kara kutu test tekniğinin en büyük avantajının test uzmanını etkin ve etkili sayıda test senaryosu ile mümkün olan en çok hatayı yakalamaya sevk etmek olduğunu hatırlarsak bu tip problemlerin çözümü için ikili test tekniği biçilmiş kaftandır. İkili test tekniğindeki temel amaç tüm değişkenlerin alacağı değerlerin ikili kombinasyonlarını test etmektedir (Kombinasyon test tekniğinde ise amaç değişkenlerin alacağı tüm değerlerin kombinasyonlarını test etmek).

Yukarıdaki güç adaptörü ekranı örneğimizden ilerleyelim (4 değişken ve her biri için 2 seçenek aktif – pasif). İkili test tekniği ile hazırlanan test senaryolarımızda mutlaka 1.değişkenin aktif ve 2. değişkenin de pasif olduğu bir senaryo yer alacaktır. Ya da 3.değişkenin aktif ve 4.değişkenin de aktif olduğu bir senaryo da. Veya 1.değişkenin pasif 4.değişkenin aktif olduğu bir senaryo da…  Ama test senaryolarınız içerisinde 1. değişkenin aktif, 2.değişkenin pasif ve 3.değişkenin aktif  olduğu senaryo olabilir de olmayabilir de.

Peki 2li test tekniği ile kaç senaryo hazırlardık. Sadece 6 tane…

Güç adaptörü ekranı örneğimizin kombinasyon test tekniği ile oluşturulan test senaryoları girdilerini ve ikili test tekniği ile oluşturulan test senaryoları girdilerini aşağıdaki tablolarda bulabilirsiniz.

Kombinasyon Testi
V1V2V3V4
AktifAktifAktifAktif
AktifAktifAktifPasif
AktifAktifPasifAktif
AktifAktifPasifPasif
AktifPasifAktifAktif
AktifPasifAktifPasif
AktifPasifPasifAktif
AktifPasifPasifPasif
PasifAktifAktifAktif
PasifAktifAktifPasif
PasifAktifPasifAktif
PasifAktifPasifPasif
PasifPasifAktifAktif
PasifPasifAktifPasif
PasifPasifPasifAktif
PasifPasifPasifPasif
İkili Test
V1V2V3V4
AktifAktifAktifAktif
AktifPasifPasifPasif
PasifAktifPasifAktif
PasifPasifAktifPasif
*Aktif*Pasif
*Pasif*Aktif

* Aktif ya da pasif olabilir

İkili test tekniği için kullanabileceğiniz araçlara aşağıdaki linklerden erişebilirsiniz.

http://www.satisfice.com/tools.shtml

http://www.pairwise.org/tools.asp

Durum Geçişi

Durum geçişi test tekniği durum geçişi diyagramlarına dayanmaktadır. Durum geçiş diyagramları, bir sistemin daha önce ne olduğu veya geçerli ve geçersiz emir çıkışı olduğunda bir şeyi hatırlamak zorunda kaldığı durumlarda bu bilgiyi kaydetmek için mükemmel bir araçtır. Durum geçişi diyagramı içerisinde kullanılan terimler kısaca şu şekildedir:

  • Durum: Bir sistemin bir veya daha fazla olay için beklediği haldir. Diyagramda “daire” ile belirtilir.
  • Geçiş: Bir olay nedeniyle sistemin bulunduğu durumdan başka bir duruma geçmesidir.  Diyagramda “ok” ile belirtilir.
  • Olay: Sistemin durumunun değişmesine sebep olan şeydir. Diyagramda “ok” üzerindeki “yazı-etiket” ile belirtilir.
  • Aksiyon/Eylem: Durum değişikliği ile başlatılan işlem. Diyagramda “ok” üzerindeki “/” işareti sonrasındaki “komut” ile belirtilir.

Hiç vakit kaybetmeden örnek üzerinden konuyu aktarmak istiyorum. Örneğimiz basit halde ele alınmış bilet rezervasyonu süreci.

Bilet rezervasyonunda öncelikle bilgilerinizi vererek (giveInfo-olay) bilet rezervasyon isteğinizi yaparsınız ve genelde belirli bir zaman içinde ödeme yapmanız gerektiğinden sistem ödeme sayacını (startPayTimer-aksiyon) başlatır. Böylece rezervasyonunuz yapıldı (Made) durumuna geçer. Bu durumdan sonra ya parayı belirtilen zaman içinde ödersiniz (payMoney-olay) ya vazgeçersiniz (cancel-olay) ya da ödeme süreniz (payTimerExpires-olay) dolar. Parayı belirtilen zaman içinde öderseniz rezervasyon ödendi (Paid) durumuna geçer. Belirtilen zaman içinde parayı ödememeniz durumda ise rezervasyonunuz ödeme yapılmadığı için iptal (CancelledNonPay) durumuna geçer. Ya da belirtilen ödeme zamanı dolmadan vazgeçerseniz rezervasyonunuz müşteri isteği ile iptal (CancelledByCustomer) durumunu alır. Ödemenizi yapıp rezervasyonunuzu ödendi durumuna geçirdikten sonra hala iptal edebilirsiniz. Bunun için iptal (cancel-olay) işlemini başlatırsınız ve sistem rezervasyonunuz için ödediğiniz paranın tamamının ya da bir kısmınının size geri verilmesi (refund-aksiyon) işlemini başlatır. Bu noktada rezervasyonunuz müşteri isteği ile iptal (CancelledByCustomer) durumunu alır. Ya da rezervasyonunuz ödendi durumuna geçtikten sonra biletinizi almak isteyebilirsiniz. Bu durumda bilet yazdırılır (printTicket-olay) ve rezervasyonunuz artık bilete (Ticketed) dönüşmüş olur. Hala bu noktada biletinizi geri vererek iptali gerçekleştirebilir (cancel[returnTicket]-olay) ve geri ödeme (refund-aksiyon) alabilirsiniz. En son olarak da almış olduğunuz bileti ilgili noktada görevliye vererek (giveTicket-olay) kullanmış (Used) olursunuz. Aşağıdaki resimde durumları, olayları ve aksiyonları içeren durum geçiş diyagramını görebilirsiniz.

Bilet Rezervasyonu - Durum Geçiş Diyagramı
Bilet Rezervasyonu – Durum Geçiş Diyagramı

Durum geçişi test tekniği ile hazırlanan senaryolar kapsamına göre üçe ayrılmaktadır.

1.Tüm durumları içeren

Test senaryoları şu şekildedir:

  • Start -> Made -> CancelledNonPay
  • Start -> Made -> CancelledByCustomer
  • Start -> Made -> Paid -> Ticketed -> Used
2.Tüm olayları içeren

Test senaryoları şu şekildedir:

  • Start -> Made -> CancelledNonPay
  • Start -> Made -> Paid -> CancelledByCustomer
  • Start -> Made -> Paid -> Ticketed -> Used
3.Tüm geçişleri içeren

Test senaryoları şu şekildedir:

  • Start -> Made -> CancelledNonPay
  • Start -> Made -> CancelledByCustomer
  • Start -> Made ->Paid -> CancelledByCustomer
  • Start -> Made ->Paid -> Ticketed -> CancelledByCustomer
  • Start -> Made -> Paid -> Ticketed -> Used

Görüldüğü üzere tüm geçişleri içeren senaryolar durum geçiş diyagramlarını daha iyi kapsamaktadır. Tüm durumları ya da olayları içerecek şekilde hazırlanan test senaryoları ise kapsama anlamında zayıftırlar.

Son olarak kara kutu test tekniğini Birim, Entegrasyon, Sistem ve Kabul test seviyelerinin tamamında uygulayabileceğinizi belirterek yazıyı bitirmek istiyorum.

Konu hakkında soru , cevap ve görüşlerinizi alt taraftaki yorum alanından veya Soru&Cevap sitemizden bizlere iletebilirsiniz.

Tüm Yazılım Testi dersleri için tıklayınız.

Sabri Mutluçağ

Test Engineer @Udemy

Yorum Yaz

Haftalık Bülten

Mobilhanem'de yayınlanan dersleri haftalık mail almak ister misiniz?