Yazılım Test Teknikleri

yazilim-test-teknikleri-tech-meeting

Yazılım Test Teknikleri (Amaca Göre Test Seviyeleri)

Yaygın olarak bilinen ve kullanılan yazılım test teknikleri yani amaca göre yapılan test seviyeleri nelerdir? Nerede ve nasıl kullanılır? Adım adım yazılım test tekniklerini görelim.

Yazılım test teknikleri yazılımın belirli bir bölümünün nasıl test edileceğini ele alır. Yazılım test teknikleri bir yazılımın belirli bir özelliğini test etmek için hangi yöntemlerin veya hangi yolun uygulanacağı ya da hangi hesaplamaların yapılacağı gibi noktalarda kullanılır. Burada bahsedilen yazılım test teknikleri yazılım test süreçleri ve metodolojileri ile doğrudan ilişkilidir. Yazılım test türleri ile yazılımın hem işlevini (yani operasyonel yetkinliğini) hem de içyapısını (yani gereksinimlere göre kendi içerisindekini çalışmasını) test ederiz. Başka bir deyişle, çalışıp çalışmadığını görmek için yazılımın her bir fonksiyonunu test edebiliriz veya modüllerin, bileşenlerin gereksinimlere uygun olup olmadığını kontrol etmek için testini yapabiliriz. Şimdi yaygın olarak bilinen ve kullanılan yazılım test tekniklerini inceleyelim.

Kurulum Testi (Installation Testing)

Genellikle yazılım ve kabul testlerinin tamamlanmasından sonra, yazılımın hedef ortamda kurulmasıyla yapılır. Yazılımın önkoşulları ve gerekli verileriyle yeni sisteme düzgün bir şekilde kurulduğunu ve beklendiği gibi çalışıp çalışmadığını kontrol etmek için yapılır. Kurulum testi, son kullanıcıların uygulama ile etkileşiminden hemen önce yapılan bir test aşamasıdır. Yazılım test yaşam döngüsünün en önemli aşamalarından biridir.

Kurulum testleri, donanım yapılandırma gereksinimlerine göre bir kez daha yapılan sistem testi olarak görülebilir. Kurulum prosedürlerinin de ayrıca testi yapılabilir. Burada yapılanlar OA & M (Operation, Administration and Maintanance) adı altında yükseltme, ilk kurulum, güncelleme, farklı ortam kurulumu, yapılandırma, kullanıcı yönetimi, yedekleme/geri yükleme, afet ortamı yönetimi, izleme çalışmaları yapılabilir.

Alfa & Beta Testi (Alpha & Beta Testing)

alpha_betaAlfa ve Beta testleri yazılımın alfa ve beta sürümlerinde gerçekleştirilen test süreci olarak tanımlanabilir. Bu iki test önemli kusurların yakalanmasına, müşterinin ürün üzerindeki beklentilerinin anlaşılmasına, müşterinin ürünün kullanılabilirliğindeki rahatlığına ve ürün hakkında geri bildirimlerin alınmasını sağlar.

Alfa testi beta testinden önce yapılır. Dâhili kullanıcılarla paylaşılarak onların kullanması ve test etmesi sağlanır. Çoğunlukla kalite güvence veya test ekipleri tarafından yürütülür. Genellikle kabul testlerinden sonra gerçekleşir. Ürünün % 95 hazır olduğu durumda yapılan test olarak düşünebiliriz.

Beta testi ise geniş kapsamlı testtir. Ürünün %99 oranında hazır olduğu durumda yapılan test olarak düşünebiliriz. Bu testte kullanıcı düzeyinde geri bildirim alınmasına yardımcı olur yani beta sürümü olarak sunulan ürün gerçek kullanıcılar tarafından gerçek ortamda kullanılır.

Bu iki testin genel faydalarını şu şekilde sayabiliriz:

  • Önceki test aşamalarında kaçırılan hataların belirlenmesini ve düzeltilmesini sağlar.
  • Ürünün güvenilirlik ve kullanım seviyesi belirlenebilir.
  • Ürünün piyasaya sürülmesinden önce ve sonra olası risk faktörleri kolayca değerlendirilebilir.
  • Gerçek zamanlı kullanıcı geri bildirimleri ile hem yapılması gereken yüksek efor ve maliyeti olan çalışma yapılmış olur hem de pazardaki ürünün yaşam döngüsünü hakkında fikir verir.

Uygunluk Testi (Conformance/Compliance Testing)

Uygunluk testi belirli standartları karşılayıp karşılamadığını yapılan testtir. Bu standartlar bir kuruluşun kendi standartları olabileceği gibi genellikle Elektrik ve Elektronik Mühendisleri Enstitüsü (IEEE), World Wide Web Konsorsiyumu (W3C) veya Avrupa Telekomünikasyon Standartları Enstitüsü (ETSI) gibi büyük, bağımsız kuruluşlar tarafından tanımlanan standartlar da olabilir.

Uygunluk testi, bu hizmette uzmanlaşmış özel şirketler tarafından yapılabilir. Bazı durumlarda satıcı, bir ürünün ilk sürümünden veya yükseltmeden önce uygunluk testleri yapmak için şirket içi bir bölüm bulundurur. Bir dizi test tamamlandıktan sonra ve tüm geçerli standartlara uygun olduğu tespit edildiğinde programın standartları tanımlayan kuruluş tarafından programın onaylandığı açıklanabilir.

Fonksiyonel Test (Functional Testing)

Yazılım test teknikleri arasında testin kalbi denilebilir. Kapalı kutu testidir. Birçok test türü bu tanımın altında bulunur. Gereksinimlerin sağlanıp sağlanmadığının kontrolü yapılır. Kullanıcı kabul testleri ile büyük ölçüde örtüşür. Çoğu zaman aynı test setleri her ikisine de uygulanabilir. Sistem seviyesindeki fonksiyonel testler, sistemin davranışının gereksinim belirtimlerine uymasını sağlamak için kullanılır. Sistem için tüm fonksiyonel gereksinimler sistem tarafından yerine getirilmelidir. Fonksiyonel testler doğası gereği kapalı kutu testlerdir. Tüm fonksiyonlar test edilmelidir. Aşağıdaki hedeflere odaklanmalıdır:

  • İzin verilen tüm girdiler (input) yazılım tarafından kabul edilmelidir. İzin verilmeyen girdiler reddedilmelidir.
  • Olası tüm sistem çıktıları (output) incelenmelidir.
  • Tüm sistem durumları ve durum geçişleri uygulanmalı ve incelenmelidir.
  • Tüm fonksiyonlar için uygulanmalıdır.

functional-testing

Performans Testi (Performance Testing)

Çoğunlukla bir yazılımdaki hataları bulmak yerine herhangi bir darboğaz veya performans sorununu tanımlamak için yapılır. Kapalı kutu testi kategorisi altında yer alır. Performans testi, bir sistemin bileşenlerinin belirli bir durumda nasıl performans gösterdiğini belirlemek için yapılan testtir. Sistemin çeşitli yükler altında performansını kontrol etmek için yapılır. Ürünün kaynak kullanımı, ölçeklenebilirliği ve güvenilirliği de bu test kapsamında doğrulanır.

Performans testi hız, kapasite, kararlılık ve ölçeklenebilirlik noktasında uygulamanın değerlendirilmesi için yapılan önemli bir testtir. Örneğin ağdaki (network’teki) gecikme, istemci tarafında veya sunucu tarafında yapılan işlem süresi, veritabanı işlem süresi, yük dengeleme, veri oluşturma gibi sistemin performansını etkileyen noktalar test edilir.

performance_testingYazılım test teknikleri olarak ayrıca ele alınan, en çok bilinen iki alt perfomans testi stres testi ve yük testi şeklindedir:

Stres Testi (Stress Testing)

Stres testi, farklı koşul ve durumlarda sağlamlığın ve güvenilirliğin doğrulanması için gerçekleştirilir. Stres testinin amacı, yükü sisteme uygulayarak ve kırılma noktasını tanımlamak için yazılım tarafından kullanılan kaynakları alarak yazılımı test etmektir. Örneğin veritabanını açıp kapatarak ya da CPU, bellek, sunucu vb. kaynakları tüketen farklı işlemler yürüterek uygulama test edilir.

Yük Testi (Load Testing)

Bir yazılımın davranışını maksimum yük uygulayarak test etme işlemidir. Bu tür testler, yazılımın maksimum kapasitesini ve yoğun zamandaki davranışını gösterecektir. Yük testi çoğu zaman Load Runner, AppLoader, IBM Rational Performance Tester, Apache JMeter, Silk Performer, Visual Studio Load Test, vb. gibi otomatik araçların yardımıyla gerçekleştirilir.

Ardışık Test (Back-to-Back Testing)

Aynı anda farklı sürümlerin veya farklı sistemlerin (benzer sonuçlarla yanıt vermesi amaçlanan) test edilmesidir. Bileşenler farklı koşullarda aynı veri serisiyle test edilir. Sonuçlar tabi tutulan bileşenlerin doğruluğunu veya etkinliğini tanımlamak için doğrulanır. Yani aynı anda 2 sistemi test eder ve sonuçlarını birbiriyle karşılaştırır. Örnek olarak, yeni sistemi test etme ve eski sürümle karşılaştırma ya da uygulamanın IOS ve Android sürümlerini aynı anda test ederek tutarsızlıkları kontrol etme verilebilir.

Regresyon/Gerileme Testi (Regression Testing)

regression-testing

Regresyon testi, mevcut bir programın veya kod değişikliğinin mevcut özellikleri olumsuz etkilemediğini doğrulayan bir yazılım test tekniklerinden biridir. Bir yazılım uygulamasında her değişiklik yapıldığında, uygulamadaki diğer alanların bu değişiklikten etkilenmesi oldukça olasıdır. Ortaya çıkabilecek bir hatanın başka mevcut bir fonksiyonu veya iş kuralını bozmadığını doğrulamak için regresyon testi yapılır.

Regresyon testi, herhangi bir kod değişikliği, güncelleme veya geliştirmeden sonra uygulamanın beklendiği gibi çalışmasını sağlayan bir yazılım test uygulamasıdır. Kodda yeni bir değişiklik eklendiğinde, her güncellemeden sonra sistemin sürekli iyileştirmeler altında sürdürülebilir kalmasını sağlamak için regresyon testi uygulanır.

Koddaki değişiklikler bağımlılıkları, kusurları veya arızaları içerebilir. Regresyon testi bu riskleri azaltmayı hedefler, böylece daha önce geliştirilen ve test edilen kod yeni değişikliklerden sonra aynı şekilde çalışmaya devam eder. Regresyon testi, ürün davranışlarını bir bütün olarak doğruladığı için son adımdır.

Kurtarma/Geri Yükleme Testi (Recovery/Restore Testing)

Kurtarma testi temel olarak uygulamanın herhangi bir yazılımsal veya donanımsal arıza durumunda hızlı ve olması gerektiği şekilde sorundan kurtulma yeteneğini kontrol etmek için yapılır. Bir sistemin çökmesinden, donanım arızalarından veya diğer felaket sorunlarından ne kadar iyi kurtulduğunu test eder. Kurtarma Testinin amacı, bir felaketten sonra veya sistemin bütünlüğü kaybolduktan sonra işlemlerin devam edip edemeyeceğini belirlemektir. Sistemin bütünlüğünün bilindiği bir noktaya geri dönülmesini ve ardından işlemlerin başarısızlık noktasına kadar yeniden işlenmesini içerir.

Yapılandırma Testi (Configuration Testing)

Yapılandırma testi, gereksinimlerde belirtilen çeşitli donanım ve yazılım yapılandırmalarında sistem davranışını analiz etmek için kullanılır. Bazen sistemler farklı kullanıcılar için, farklı koşullar için, farklı ortamlar için ve benzeri durumlarda farklı yapılandırmaları (konfigürasyonları) kullanır. Sistemin gerekli tüm yapılandırmalarda doğru davranıp davranmadığı kontrol edilir.

Kullanılabilirlik Testi (Usability Testing)

Kullanılabilirlik testleri, kullanıcıların ürünle etkileşimli alanlarını belirler ve iyileştirme için önerilerde bulunmamıza yardımcı olur. Amaç, gerçek kullanıcıların ürününüzle nasıl etkileşime girdiğini daha iyi anlamak ve ürünü sonuçlara göre iyileştirmektir. Kullanılabilirlik testinin temel amacı tasarımı iyileştirmektir. Tipik bir kullanılabilirlik testinde gerçek kullanıcılar, kontrollü koşullar altında bir ürünle belirli hedefleri veya görevleri gerçekleştirmeye çalışır. Paydaşlar, geliştirme ekibi üyeleri veya araştırma ekibi izler, dinler, veri toplar ve not alır.

Kullanılabilirlik testinde gerçek görevleri yerine getiren gerçek müşteriler kullanıldığından, görev zamanı, hata oranı ve görev başarısı gibi objektif performans verileri sağlayabilir. Tasarımcıların ve geliştiricilerin kullanıcılarla empati kurmasına ve görevleri ve iş akışını daha iyi destekleyen alternatif tasarımları düşünmelerine yardımcı olur. Bir başka deyişle kullanılabilirlik testi, uygun kullanıcılarla prototipler ve gerekli belgeleri kullanarak bir yazılım ürününün kullanılabilirliklerini araştırmak için kullanılan bir tekniktir. Temel amacı tasarım sorunlarını bulmak ve bu sorunları düzeltmektir. Yani sistemin kullanımının kolay olduğunu kanıtlamak değil, hataları bulmaktır.

Güvenlik Testi (Security Testing)

Güvenlik testi, negatif testin doğal bir uzantısıdır: kabul edilemez girdilere ve bu girdilerin test edilen ürünün gereksinimleri açısından önemli bir hata oluşturup oluşturmayacağına odaklanır.

security-testing

Sistemin ve bilgilerinin kabul edilemez girdilere karşı güvenli olduğunu göstermek için yeterli kanıt sağlamak, güvenlik testinin en önemli parçasıdır. Temel bilgi güvenliği terimlerinden bazıları şunlardır:

» Varlık (Asset): Her türlü kuruma değeri olan ve tehdide maruz kalan her şey [ISO/IEC 13335-1: 2004].

» Tehdit (Threat): Sistem veya kuruluşa zarar verebilecek istenmeyen bir olayın potansiyel nedeni. [ISO/IEC 27001: 2005].

» Güvenlik Açığı (Vulnerability): Bir varlık veya varlık grubunun bir veya daha fazla tehditten etkilenebileceği bir zayıflık olarak tanımlanır. [ISO / IEC 27001: 2005’ten sonra]. Güvenlik açıkları yazılımda, bilgi sistemlerinde, ağ protokollerinde ve aygıtlarda vb. bulunabilir. Güvenlik açığı yönetilmezse, tehdidin gerçekleşmesine izin verir. Güvenlik açığına örnek olarak işlenmemiş yazılım, zayıf parolalar, erişim denetimi eksikliği, yüklü güvenlik duvarı vb. verilebilir.

» Risk: Belirli bir tehdidin, bir varlık veya bilgi varlıkları grubuna zarar vermek için güvenlik açıklarından yararlanma potansiyeli. Bir olayın olasılığı ve sonuçlarının ciddiyeti ile ölçülür.

» Bilgi Güvenliği (Information Security): Gizliliğin korunması, bütünlük ve bilginin kullanılabilirliği olarak tanımlanabilir. Buna ek olarak, özgünlük, hesap verebilirlik, reddedilmeme ve güvenilirlik gibi diğer özellikler de içerebilir [ISO27002: 2005].

En iyi bilinen güvenlik açıkları şunlardır: SQL injection, kötü amaçlı dosya çalıştırma, güvensiz haberleşme, güvenli olmayan nesne başvurusu, bilgi sızıntısı, sorunlu kimlik doğrulama ve oturum yönetimi, güvenli olmayan kriptografik depolama.

Bu güvenlik açıklarının projede bulunmadığından emin olmak için izlenmesi gereken bazı temel adımlar şunlardır:

  • Testin odaklanacağı güvenlik risklerinin değerlendirilmesi.
  • Yazılımı güvenlik hataları için analiz etme. Güvenlik riskleri, hataları ve bug’ları değerlendirme.
  • Yazılımı güvenlik hataları açısından test etme.
  • Bug’ları regresyon için düzeltme.
  • Önemli güvenlik metriklerini izleme.

Yazılım test teknikleri arasında ayrı bir öneme sahiptir. Güvenlik testi konusuyla ilgili IEEE’ya ait https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=1341418 makalesini de inceleyebilirsiniz.

Sızma Testi (Penetration Testing)

Aslında birçok güvenlik testi çeşidi bulunmaktadır. Sızma testi de bir tür kapalı kutu (black box) güvenlik testidir. Kapalı kutu testinin doğası gereği geliştirme tamamlandıktan sonra yürütülür. “Pen test” olarak da adlandırılır.

Sızma testi, bazen beyaz şapka korsanlığı olarak adlandırılan etik korsanlık olarak düşünülebilir. Gerçek dünyadaki bilgisayar korsanlarının kullanabileceği tüm ipuçlarını ve yöntemlerini kullanarak BT altyapısının ve çalışanların güvenliğini yöntemsel olarak test etmeyi amaçlayan kontrollü bir teknik çalışmadır. Kötü amaçlı bir saldırıdan farklı olarak, sızma testi uzman bir şirket tarafından önceden belirlenmiş bir kapsamda belirli bir zamanda yapılır. Düzenli sızma testi PCI-DSS’in gereksinimlerinden biridir.

Taşınabilirlik Testi (Portability Testing) ve Uyumluluk Testi (Compability Testing)

Yazılımın taşınabilirliği, yazılımın bir ortamdan diğerine taşındığında değişen ortama uyarlama yeteneğidir. Taşınabilirlik testi, yazılımın taşınabilirliğini değerlendirme sürecidir. Taşınabilirlik, bir İşletim Sisteminden diğerine aktarmak için gereken maksimum çaba ve masrafa göre ölçülür. Taşınabilirlik testi temel olarak sistem gereksinimlerini de bir ölçüde değerlendirir. Test stratejisi; RAM, disk alanı, işlemci hızı, çözünürlük, işletim sistemi sürümleri, tarayıcı sürümleri gibi taşınabilirlik gereksinimlerinin her birine taşınabilir olup olmadığını belirlemek için tasarlanmıştır. Ayrıca önyüzleri ve çeşitli tarayıcı ve işletim sistemlerinin işlevsel performansını kontrol eder.

Uyumluluk testi ise iki veya daha fazla sistemin veya bileşenin, aynı ortamı paylaşırken (IEEE 610’dan sonra) gerekli işlevlerini yerine getirebilmesiyle ilgilidir. Aynı ortam üzerinde bulunan iki bileşenin (veya sistemin) birbirleriyle iletişim kurması gerekmez, bu nedenle uyumluluk birlikte çalışabilirlikle ilgili değildir. Tamamen ayrı işlevler gerçekleştiren iki bileşenin (veya sistemin) uyumluluğu test edilir.

portability-compability-testing

Paralel/Denetim Testi (Parallel/Audit Testing)

Paralel / denetim testi, kullanıcının yeni sistemin işlemleri doğru bir şekilde gerçekleştirdiğini doğrulamak için kullanıcının yeni sistemin çıktısını mevcut sistemin çıktısına bağladığı testtir. Mesela finansal hesaplamalar yapan bir masaüstü uygulamasını web tabanlı uygulamaya dönüştürmek istiyorsunuz. Yeni web tabanlı uygulamayı test ederken, web tabanlı uygulamanın aynı hesapları yaptığının doğrulanması gerekir. Bu paralel testtir.

Duman Testi (Smoke Testing) ve Mantıklılık Testi (Sanity Testing)

Her iki test türü de aslında detaylı test değildir. Duman testi, programın kritik işlevlerinin kesinlikle iyi çalıştığından emin olmak için gerçekleştirilen, daha ince detaylarla uğraşmayan bir tür yazılım testidir. Bunu şu şekilde düşünebiliriz; bir motorun testi yapılırken motordan duman çıkıyorsa ana işlevleri çalışıyor demektir. Duman testi teriminin sıhhi tesisat endüstrisinde tesisatçıların genellikle boru sistemlerindeki sızıntı ve çatlakları test etmek için duman kullanmasından geldiği düşünülmektedir. Daha sonra terim elektronik testine uygulandı.

Duman testi genellikle yazılımın yeni işlevleri geliştirilip mevcut bir yapıya entegre edildiğinde yapılır. Bu, tüm kritik işlevlerin doğru çalışıp çalışmadığını garanti eder. Yeni bir geliştirme olduğunda kalite güvence ekibi duman testi yapmak için uygulamadaki ana fonksiyonlar belirlenir. Kalite güvence ortamına gönderildikten sonra kalite güvence mühendisleri tarafından duman testi yapılır.

Mantıklılık testi, küçük bir kod değişikliği yapıldıktan sonra yapılan testtir. Amaç, bahse konu olan işlevselliğin kabaca beklendiği gibi çalışıp çalışmadığını ve hatanın düzeltilip düzeltilmediğini görmektir. Sadece ürünün değişen özelliklerinin test edilmesi gerekir. Yazılımın işlevselliğinin derinlemesine analizi gerekli değildir. Regresyon/gerileme testi prosedürleri ile temelde aynı olduğundan regresyon/gerileme testi altında kategorize edilebilir.

Bu yazı size ne kadar faydalı oldu?

Değerlendirmek için bir yıldıza tıklayın!

Yazının sizin için faydalı olmadığını duymaktan dolayı müteessiriz...

Bu yazıyı geliştirmek isteriz!

Bu yazıyı nasıl geliştirebileceğimizi paylaşmak ister misiniz?