Plazma sayı 4, sayfa 67

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 67

Denklik Sınıfları

Bir programa giren girdiler, eğer sürekli bir kümeden gelmiyorsa, sınırlardan bahsetmek mümkün olmayabilir. Örneğin haftanın günlerinden biri girdilerden birini oluşturuyor ise, ve program hafta sonu için farklı hafta içi için farklı davranacağını söylüyorsa sınırlar nedir. Cuma olduğunu düşünebilirsiniz. Belki... Ama bu tip durumlar (ve sürekli kümeler için de) sınır koşullarına bakmak dışında bir perspektif daha vardır. Girdinin alabileceği değerler kümesini "denklik sınıfları"na bölmek.

Denklik sınıfları, adından da tahmin edebileceğiniz gibi bir girdinin alabileceği bütün değerleri speklere göre sınıflara ayırır. Aynı sınıfa ait üyelerin aynı şekilde işlem göreceği ve bir denklik sınıfından sadece bir (veya birkaç) değerin testte kullanılması öngörülür. Bu şekilde tıpkı sınır koşullarını kullandığımız zamanki gibi test birimi sayısını azaltabiliriz.

Kod Kapsama

ve Şeffaf kutu testleri

Az önce programa ve testlerimizin programın hatalarını ne kadar yakaladığına dair güvenimizi nasıl ölçebileceğimizi sorgulamıştık. Bu kaygıyı birebir cevaplamamakla beraber, bazı sayısal metrikler mevcuttur ve sayısal metrikler her zaman "içimden bir ses böyle söylüyor"dan daha iyidir.

Fakat ne zaman ki kod kapsamadan bahsediyoruz, o zaman kapalı kutudan bahsetmiyoruz demektir. Çünkü birazdan göreceğiniz gibi, kod kapsama tekniklerinden faydalanmak, yazılan kodun içini bilmeyi ve bu bilgiden faydalanmayı gerektirir. Bu bilgiyi kullanarak yapılan testlere de "Şeffaf Kutu Testleri" denir.

Aşağıdaki fonksiyona bir bakın:

int Topla( int Sayil, int Sayi2)

if ((Sayil>-0)&&(Sayil<100))1 if((Sayi2>-0) &&(Sayi2<100))( Jelsel //Sayi 2 istenilen aralikta degil returmn -İ; ) )Jelsel // Sayi 1 istenilen aralikta degil return -l

Bu fonksiyonu test ederken ne zaman emin oluruz. İşte kod kapsama kavramı burada devreye girer. Kod kapsama, yazılan bir kodun içindeki değişik birimlerden hangilerinin testler esnasında sınandığını ve ne kadarının sınanmadan geçtiğini ifade eder. Değişik kod kapsama türleri vardır. Şimdi bunlardan bir kaçına değinelim.

Kod

satırlarını veya kod dallarını kapsamak

Bu örneğimizi bir adet test birimi ile test ettiğimiz zaman hangi satırların çalıştığına bakabiliriz. Koşullu ifadelerden (yani if-else) dolayı bir test birimi bu fonksiyondaki her satıra uğramayacaktır.

Bir grup test birimini çalıştırdıktan sonra fonksiyonda uğranan satırların sayısını daha da artırmış oluruz. Böylece iyi seçilmiş test birimleri ile her hangi bir programın sahip olduğu kod satırlarının büyük bölümünün "kapsanmasını" sağlayabiliriz. Ve diyebiliriz ki bu programımızı testlerimizle 485 satır kapsaması sağlayarak test ettik. Bu ölçülebilir bir metriktir. Örneğin koda eklemeler yaptıkça kapsama yüzdeniz azalacaktır. Bir proje ekibi kapsama yüzdesi örneğin %30'un altına düşen bir yazılımı çıkarmayı reddedebilir. Çünkü kodun %70'inin test edilmediği ve orada kritik buglar olabileceğini düşünebilirler.

Bazen de koddaki satırların kapsamasını incelemek yerine koddaki dalların (blokların) kapsamasını inceleyebiliriz. Bunu takip etmek kimi projelerde daha mantıklı olabilir. Fakat temelde aynı mantıktır.

Son olarak Kapsama değerlerini ölçen programlar vardır. Yani kapsama değerlerini siz elle ölçmezsiniz. Bunun için favori derleyicinizin kod kapsama (code coverage) özelliklerini araştırın

Koşul ifadelerini kapsamak

Daha önce en çok hata yapılan yerlerin koşullar olduğundan bahsetmiştik. Eğer karmaşık koşul ifadeleri yazılırsa, dikkat etmemiz gereken bir nokta daha var. Şu örneğe bir bakın. Eğer elimizde şöyle bir if satırı olsaydı: if ( ( Sayı > 0 )

&& ( Sayi2 < 99 ) )

Bu if satırından dolayı kod iki farklı yere atlayabilir. Ya bir alt satıra ya da else bölümüne. Diyelim ki Sayı1 ve Sayı2 için sırasıyla -1, 99 değerlerini verdik. Bu durumda aradaki && işleminin yarattığı bir problem var. Bu operatör kendisinden önceki ilk koşula (Sayı1 >= 0) bakıp onun yanlış olduğunu gördüğü anda else bölümüne atlar. Yani ikinci koşulu test etmez. Bu yüzden biz ikinci koşulda yaptığımız hatayı fark etmeyebiliriz.

Bu yüzden kimi projeler metrik olarak "Koşul Kapsaması"nı da kullanırlar. Test birimlerinin hangi koşul ifadelerine uğradığını takip ederler. Kod satırı kapsamadan farklı olarak genelde koşul kapsama metrikleri kullanıldıkları yerlerde koşul kapsaması aranır.

Durum Motorlarını kapsamak

Bir diğer şeffaf kutu yaklaşımı da durum motorlarını test ederken karşımıza çıkar. Bir yazılım eğer çeşitli durumlara ve durumlar arası tanımlı geçişlere sahip bir durum motoru olarak tasarlanmış ise, bu durumda test birimlerimizin hangi durumları ve hangi geçişleri kapsadığından bahsedebiliriz. Durum motorlarını test ederken ayrıca komutların gönderiliş sıraları da karıştırılarak durum motorunun tepkisi test edilir. Bu konuyu bu yazıda daha detaylı incelemeyeceğiz.

Hata Enjeksiyonu

Klavyeyle gezinmek için ← ve → tuşları.