Yazılım’da Test Seviyeleri

Herkese selamlar, bugün kaleme alacağım konu bir yazılım geliştirici olarak Unit Test noktasından başlayıp ne imiş arkadaş bu test diyerek incelemeye başladığım ve uçsuz bucaksız (Bu arada her birinin belirli bir sınırı ve amacı var :)) bir deryanın içerisinde kaybolduğum ve kendi penceremden anlamlandırmaya çalıştığım bu süreci sizler ile paylaşmak istedim.

Şimdi sözü fazla uzatmadan konumuza gelelim.

SDLC(Software Development Life Cycle) did you mean Yazılım Geliştirme Yaşam Döngüsü evet tam olarak bu arkadaşa nerede dahil oldukları ve içerdikleri ayrıntı düzeylerine göre dört temel gruba ayrılıyorlar.

Test süreçlerinde temel olarak eksik alanları belirlemek, bu döngünün aşamaları arasında oluşabilecek çakışmaları ve tekrarları önlemek amaçlanır.

Birazdan bahsedeceğimiz her bir test düzeyinin belirli bir amacı vardır.

A- Birim Testi (Unit Testing)

Birim ifadesi burada uygulamamızın derlenebilecek en küçük sınanabilir bölümünü ifade etmektedir.

Söz konusu uygulamanın her bir biriminin yalınlaştırılarak amaçladığı görevi yerine getirip getirmediğini sınamak amacıyla yazılırlar.

Geliştirme sürecinin ilk aşamalarında gerçekleşir. Erken safhalarda yazılımdaki hataları tespit etme avantajı sağlar. Sonraki süreçlerdeki riskleri en aza indirme konusunda büyük önem arz eder.

Bu aşamadaki testler Test Ekibine teslim edilmeden önce Yazılım Geliştiriciler tarafından yürütülür.

Bir Yazılım Geliştirici olarak son zamanlarda üzerinde düşündüğüm konulardan bir tanesi de sınırlarım neler?

Biraz gerçekçi olursak her ne kadar en ince ayrıntısına kadar irdeleyip test edersek edelim bir noktada tüm senaryoları test edebilmemizin mümkün olmadığı konusunda bir birliğe varırız diye düşünüyorum. Elimizdeki tüm senaryoları tükettikten sonra bir noktada Birim Testini sonlandırıp bir sonraki süreç olan Entegrasyon Testi için Test Ekibine devretmek ve diğer birimler ile birleştirmek zorundayız.

Yine beni ilgilendirdiği için ufak bir dipnot;

.Net tarafında MSTest — xUnit — NUnit — Moq gibi faydalanabileceğimiz araçlar söz konusu. Bu araçlar süreçleri otomatikleştirmek ve sonuçları iyileştirmek adına yardımcı olurlar.

Burada yine ekleyebileceğim bir ufak dipnot daha yazdığımız aspectleri test etmek için ILSpy kullanabiliriz.

B- Entegrasyon Testi (Integration Testing)

Bu noktada birimlerin davranışlarını ve işlevselliğini değerlendirmek amacıyla farklı birimler birleştirilir ve grup olarak testleri yapılır. Bir bileşenden diğer bileşenlere veri akışını denetlenir.

Birkaç farklı yaklaşım söz konusudur;

  • Aşağıdan Yukarıya Entegrasyon Testi, Birim Test ile başlar ve ardından daha üst düzey kombinasyonların test edilmesiyle devam eder.
  • Yukarıdan Aşağıya Entegrasyon Testi, En üst düzey birimler ilk ve aşamalı olarak test edilir. Üst düzey birimlerin testi sonuçlandıktan sonra alt düzey birimlerin testlerine geçilir.
  • Big Bang Entegrasyon Testi, tüm birimlerin aynı anda birbirine bağlı olduğu ve bir bütün olarak ele alındığı entegrasyon testidir.

Ufak bir dipnot daha;

Kapsamlı bir yazılım geliştirme ortamında aşağıdan yukarıya entegrasyon testi öncelikli olarak ele alınır. Söz konusu testler tercihen gerçek durumları taklit eden önceden tasarlanmış senaryolar ile bütünleşik uygulamanın birden çok kez testi ile sona erer.

C- Sistem Testi (System Testing)

Tam ve entegre bir sistem üzerinden uygulama bir bütün olarak ele alınır. Gereksinimlere göre sistemin uyumluluğunu ve belirlenen kalite standartlarını karşılayıp karşılamadığı test edilir. Bileşenlerin etkileşimi sınanır.

Bu adımı önemli kılan önemli faktörlere kısaca değinecek olursak;

  • Uygulamanın bir bütün olarak test edildiği Yazılım Geliştirme Yaşam Döngüsünün ilk adımıdır.
  • Uygulamanın dağıtılacağı ortama çok yakın bir ortamda test edilir.
  • Hem iş gereksinimlerinin hem de uygulama mimarisini test etmemize ve doğrulamamıza olanak sağlar.

Yük, Performans, Güvenilirlik ve Güvenlik testlerini içerir.

Özel bir Test Ekibi tarafında bu süreçteki testler gerçekleştirilir.

D- Kabul Testi (Acceptance Testing)

Son olarak uygulamanın amaçlanan özellikleri karşılayıp karşılamadığını ve son kullanıcının gereksinimlerine ne derecede cevap vereceği değerlendirilir. Yine özel bir Test Ekibi (Kalite Güvence Ekibi) tarafından gerçekleştirilir.

Kabul Testleri sadece basit yazım hataları, ara yüz eksiklikleri gidermek için değil aynı zamanda sistem çökmeleri ve uygulama içerisinde büyük hatalara sebep olabilecek gözden kaçan herhangi bir hatayı yakalamak için tasarlanmıştır.

Test Ekibi tarafından uygulamanın yayında nasıl bir performans göstereceğinin cevabı aranır.

Ayrıca sistem kabulü için yasal ve sözleşmelere dayalı gereklilikler de söz konusudur.

Şimdi de makalemiz sonlandırmadan önce birkaç naçizane yorumda bulanalım.

Sonuç odaklı düşündüğümüz zaman bu test süreçleri uygulamamız üzerinde oluşabilecek istenmeyen durumların erken teşhisi ve bu durumlar sonucunda oluşabilecek emek — zaman — maddiyat gibi kayıpların önüne geçilmesi gibi bir takım artılarından bahsedebiliriz.

Yine birimlerin etkileşimli doğası gereği kodlar arasında gözden kaçırılmış bir bileşendeki çok küçük bir hata, sistem düzeyinde hayati bir etki yaratabilir. Bu gibi durumların da önüne geçmek adına TEST TEST TEST diyerek makalemizi bitirelim.

Umarım fayda sağlayabilmişimdir. Bir başka konuda görüşmek üzere…

Sevgi ve saygıyla. Sürçü lisan ettiysem affola.

Software Developer