Blog

Yazılım Testinin Temelleri

Yazılım test nedir?

Yazılım günlük hayatın birçok alanında kullanılmaktadır. Yazılım testi ise bu yazılımların kullanımları sırasında oluşabilecek kusurları azaltmak için yapılan işlemdir. Yazılım testinde belirlenen tüm gereksinimlere ek olarak kullanıcıların kullanım senaryoları da doğrulanır. Yazılım testinin genel amacı yazılımda bulunan hataları(defect) tespit edip oluşabilecek arızaların(failure) önüne geçerek yazılımın kalitesini arttırmaktır. Yazılım testinin öncelik hedefi test seviyesine göre değişebilir. Örneğin birim testinin önceliği olabildiğince hata bulunması, kabul testinin önceliği ise belirlenen gereksinimlerin doğrulanmasıdır.

Test yöntemleri statik test ve dinamik test olmak üzere ikiye ayrılmaktadır. Statik testler test edilen ürünün çalıştırılmadan yapılan testler, dinamik testler ise test sırasında test edilen ürünün çalıştırılması gereken testler olarak tanımlanmaktadır. Dinamik testler yazılımın işlevsel özelliklerinin test edildiği fonksiyonel testler ve yazılımın işlevsel olmayan özelliklerinin test edildiği fonksiyonel olmayan testler olmak üzere ikiye ayrılır. Bu yöntemler ilerleyen yazılarda ayrıntılı bir şekilde anlatılacaktır.

Resim 1- Test Yöntemleri

Yazılım testinde kullanılan temel terimler

Hata ayıklama (debugging) testler sonucu bulunan hataların kaynaklandığı kök nedenleri bulma ve hataları düzeltme işlemidir. Düzeltme işlemi sırasında genellikle kod adım adım kontrol edilir ve sorunun kaynağı bulunduktan sonra hatalı yer düzeltilip hata ortadan kaldırılır.

Kalite yönetimi kalite güvence (quality assurance), kalite planlama ve kalite kontrol (quality control) süreçlerini barındıran bütüncül sistematik faaliyettir. Kalite güvence ve kalite kontrol kavramları sıklıkla karıştırılmaktadır. En basit anlamda kalite güvence ürün üretilmeden önce ortaya çıkabilecek hataların doğru süreçlere bağlı kalarak önüne geçmeyi hedeflerken, kalite kontrol tamamlanan ürünlerdeki hataları bulmayı hedefler.

Hata, arıza, kök neden ve bunlara bağlı olarak görülen etkileri tanımsal olarak değil, daha net bir şekilde anlaşılacağını düşündüğümden örnek üzerinden açıklamaya çalışacağım. Bir evin ortalama değerini hesaplayan bir programın tasarımı aşamasında algoritmanın gereksinimlerinin yazılımcıya istenmeden yanlış bir şekilde anlatıldığını varsayalım. Yazılımcının bu algoritmayı istenmeyen sonuçlar verecek şekilde yazması hata(defect), uygulama kullanıcısının evinin değerini yanlış hesaplaması arıza(failure), yazılımcı ile aradaki iletişimsizlik kök neden(root cause) ve kullanıcının bu durumdan şikayetçi olması görülen etkidir.

Yazılım testinin 7 prensibi

1. “Testing shows the presence of defects, not their absence.”

Testler hataların yokluğunu değil varlığını gösterir. Test yaparak hataların sayısını azaltabiliriz ancak hiçbir hatanın kalmadığını gösteremeyiz. Testin amacı da hatanın kalmadığını kanıtlamak değil, hataların vardığını göstermektir.

2. “Exhaustive testing is impossible.”

Yazılımın tüm kombinasyonlarını(%100) test etmek imkansızdır. Büyük uygulamalarda tüm kombinasyonları test etmek zaman ve bütçe gibi kısıtlardan dolayı mantıklı ve uygulanabilir değildir. Bu yüzden optimum derecede kombinasyonları test edecek sınır değer analizi(boundary value analysis) ve denklik paylarına ayırma(equivalence partitioning) gibi yöntemler uygulanmaktadır. Bu yöntemlere ilerleyen yazılarda detaylı olarak açıklanacaktır.

3. “Early testing saves time and money”

Erken test zaman ve paradan tasarruf sağlar. Gereksinimlerin gözden geçirilmesi, kod geliştirme ve sistem tasarlanırken test uzmanlarının erken safhada projeye dahil olması “yazılan kodun/gereksinimlerin nasıl test edileceği anlayışını ” arttıracağı için test edilemeyen fonksiyonların ve hataların projenin sonlarında açığa çıkma olasılığını azaltacaktır.

4.”Defects cluster together”

Testler sırasında görülen hatalar uygulamanın belirli modüllerinden kaynaklanmaktadır. Pareto ilkesi %80 yazılım hatalarının modüllerin %20’sinden kaynaklandığını söylemektedir.

5. “Beware of the pesticide paradox”

Aynı testler aynı veriler ile sürekli test edilirse yeni hatalar bulunmamaya başlar. Bu durum aynı hastalığın çözümünde sürekli olarak aynı antibiyotik kullanıldığında belirli bir süre sonra etki etmemesi olarak tasvir edilmektedir. Bu durumda genellikle verilerinin veya test senaryolarının değiştirilmesi gerekmektedir.

6. “Testing is context dependent”

Test yapmanın ana amacı hata bulmak olsa da proje bağlamına, alanına göre öncelikleri değişebilir. Bazı projelerde öncelik hız olabilirken, diğer projelerde güvenlik olabilir ve test kapsamı ve önceliği de bu önceliklere göre şekillendirilmelidir.

7.”Absence of errors is a fallacy”

Hataların olmaması yanılgıdır. Bir sistemin uygulanan tüm testlerden geçmesi yazılımın tüm kullanıcıların isteklerini yerinde getirdiğini veya kullanıcı dostu bir yazılım olduğunu göstermez. Yani bir yazılımda hata olmaması yazılımın kullanıcının tüm isteklerinin karşılandığı veya kullanıcı dostu bir yazılım olduğunu göstermez.

Test esası nedir?

Test edilen ürünün gereksinimlerinin hazırlanırken kullanılan belgelere denir. Test esasının ölçülebilir dolayısıyla da izlenebilir olması için anahtar performans kriterlerine(key performance indicators) bağlandırılması oldukça önemlidir.

Test Faaliyetleri ve bu faaliyetler sonunda elde edilen ürünler

  1. Testlerin Planlaması: Test kapsamının, test kaynaklarının ve test takviminin oluşturulduğu aşamadır. Teste başlama(entry criteria) ve testi sonlandırma(exit criteria) bu aşamada belirlenir. Bu aşama sonunda test ana planı ve bu test ana planının kapsadığı alt planlar elde edilir.
  2. Testlerin Analizi: Yazılımda test esası göz önünde bulundurularak “hangi noktaların” test edileceğinin karar verildiği aşamadır.
  3. Testlerin Tasarlanması: Yazılımda test edileceğine karar verilen yerlerin “nasıl bir şekilde” test edileceğinin belirlendiği aşamadır. Yani test senaryolarının oluşturulduğu aşamadır. Bu aşama sonunda test gereksinimleri oluşturulur.
  4. Test Ortamlarının Oluşturulması: Oluşturulan test senaryoları için gerekli ekipmanların temin edilip hazırlandığı aşamadır. Bu aşama sonunda test senaryoları, test verileri ve test ortamı hazırlanır. Test koşum çizelgesi de bu aşamada oluşturulur.
  5. Testlerin Koşulması: Hazırlanan testlerin manuel veya otomatik olarak koşturulduğu aşamadır. Bu aşama sonunda testlerin durumları, test raporları ve hata raporları elde edilir.
  6. Testlerin Raporlanması: Tüm aşamalarda elde edilen bilgilerin toplanıp dokümante edilmesi aşamasıdır. Bu aşama sonunda test özet raporu elde edilir.

.

Yorum Bırakın

E-posta hesabınız yayınlanmayacaktır. Gerekli alanlar "*" ile işaretlenmiştir.