Sunday, October 22, 2006

Software Testings

Yazılımı yazıyoruz ama testini yapıyor muyuz? Test etmek için kullanılan bir kaç felsefeyi buraya yazmayı uygun gördüm:

Regression Testinglar
Regression testing nedir? Bir yazılım sürecinde yazılımı geliştirdikçe bir yandan da ortaya çıkan hataları düzeltiriz. Bug olarak adlandırdığımız bu hatalar düzeltilmesine rağmen, yazılım geliştikçe yeni modüller eklendikçe yada başka hatalar düzeltikçe tekrara ortaya çıkabilir! Bunun için yazılımın belli anlarında, eskiden düzeltilmiş olan hatalar tekrar test edilmelidir. Eski bugların tekrar ortaya çıkma ihtimaline karşı yazılımı kontrol etmeliyiz. Regression testing bu amacı güder.

Unit Testing
Unit testing denilen test bicimi, yazılımın belirli modüllerini tüm test koşullarıyla test etmektir. Unit testing yazılımı oluşturan bağımsız modüllerin doğru bir şekilde çalıştığını göstermeyi hedefler.
Fakat unit testing yazılımdaki her hatayı bulamaz. çünkü sadece bireysel modülleri kendi başına test eder, bir modülün diğer modül ile olan bağlantısı test edilmez. Bir başka sorun da bir modülü test edebilmek için gerekli olan input sayısının sonsuza gitmesidir. Modüle verilecek giriş sayısı sonsuz olamayacağından unit testing hataların yokluğunu değil hataların varlığını gösterebilir.

Integration Testing
Bireysel modüllerimizi unit testing aşamasından geçirdik ama hayla modüller birlikte çalışırken düzgün çalışırlar mı bilemeyiz. Bunun için integration testing uygularız. Bu test in girişleri modüllerdir. Testin amacı modüllerin birlikte çalıştığını doğrulamakttır. Paylaşılan bellek bölgeleri, IPC ( inter process control ) gibi processlerin ortak kullandıkları yapılar test edilir. Integration testing, unit testingden sonra gelir ve yazılımı system testing için hazırlar. Integration testing yaparken uygulanacak test stratejileri bu testi kategorilere koyar. Bunlar: Big Bang, Top Down, Bottom Up, ve Back bone test stratejileridir.

System Testing
System testing, integration testing den sonraki aşamadır. Integrasyonluğu doğrulanmış modüller birleştirilip en son yazılım ortaya çıkarıldıktan sonra system testing uygulanır ve bu yıkıcı en son testdir. System testing uygularken black-box yaklaşımı kullanılır. Yani kod a bakılmaz inputlar verilir ve sistemin ayakta kalıp kalmadığına bakılır. Alpha ve beta olarak iki fazı vardır.

Acceptence Testing
Buraya kadar olan test metodları yazılımı üreten programcılar ve test takımları tarafından yapılıyordu. Yani yazılım şirketi kendi yazılımını test ediyordu. Acceptence testing de ise kullanıcılar ve diğer üreticler de yazılımı test ederler. Bu yazılım da black-box yaklaşımı ile çalışır.

Özetlersek, bir yazılımı test etmek için gerekli olan en temel testleri soyledik. Tabiki bu testlerden başka daha bir çok test de mevcuttur. Bunlar:
# Functional testing
# User interface testing
# Usability testing
# Compatibility testing
# Model based testing
# Error exit testing
# User help testing
# Security testing
# Capacity testing
# Performance testing
# Sanity testing
# Regression testing
# Reliability testing
# Recovery testing
# Installation testing
# Maintenance testing

olarak sayılabilir. Bir yazılım sürecinde bizim bahsettiğimiz testler şu sırada gerçekleşir.

Unit testing -> integration testing -> system testing -> acceptence testing.
ve regression testing ise her önemli değişiklikte eski hataları test etme biçiminde bütün yazılım sürecinde uygulanır.

2 comments:

Anonymous said...

walla ben run-time testing kullanıyom:p
-nev

Anonymous said...

emre olm chicken test'i koymamışsın şimdi herke$ler onu kullanıyor :)