25 Mart 2011 Cuma

Yazılım Geliştirme Projelerinde Test

Yazılım projelerinde, geliştirilen her sistem iki aşamalı teste tabi tutulur. Her aşamada sistem birçok farklı perspektiften sınanır. 

Yazılım Test Aşamaları
Bu aşamalardan birincisi ALFA’dır. ALFA testi yazılım ekibi içerisinde yer alan yazılım test uzmanları, iş analistleri, sistem analistleri ve yazılım uzmanları tarafından gerçekleştirilir. Bu testin amacı müşterinin kullanıcı kabul testleri sırasında çok fazla hata, eksiklik, tutarsızlık ve performans düşüklüğü ile karşılaşmasını engellemek ve kullanıcıların geliştirilen sistemi benimsemesini kolaylaştırmaktır.

İkinci aşama BETA’dır. BETA testi geliştirilen sistemi kullanacak kişiler tarafından gerçekleştirilen, geliştirilen sistemin tanımalanan gereksinimleri karşıladığını teyit ettikleri test çalışmasıdır. Kullanıcı kabul testi veya müşteri kabul testi olarak da bilinir. Yazılımı geliştiren ekip, geliştirdikleri yazılımın, tüm fonksiyonel ve fonksiyonel olmayan gereksinimlerin karşılandığını iddia ettiği zaman BETA testine geçilebilir. BETA testi başlatılmadan önce, geliştirilen sistemi kullanacak kullanıcılar arasından heterojen bir grup oluşturulur ve sistemi tanımlı gereksinimlere göre belirli süre içerisinde sınaması istenir. Bu çalışmaya başlanmadan önce kullanıcıların geliştirilen sistem konusunda eğitilmeleri gerekir. Kullanıcılar eğitimi aldıktan sonra yapacakları sınama işlemini planlar ve gerekli test verilerini ve senaryolarını oluştururlar. Kabul testi dahilinde sistemin fonksiyonları test edildiği kadar, sistemin fonksiyonel olmayan gereksinimleri de karşılayıp karşılamadığı kontrol edilir.

Yazılım Test Alanları
Yazılım geliştirme çalışmalarında hem ALFA hem de BETA test aşamalarında sistemin sınanması gereken alanlar ortaktır. Bu çerçevede bu bölümde anlatılan tüm test alanları hem ALFA, hem BETA testi içerisinde gerçekleştirilmelidir.

1. Fonksiyonel Test
2. Kullanılabilirlik Testi
3. Entegrasyon Testi
4. Performans Testi
5. Güvenilirlik Testi
6. Güvenlik Testi
7. Kurulum Testi
8. Bakım Testi
9. Arşivleme ve Yedekleme Testi
10. Denetim Testi
11. Dokümantasyon Testi
12. Regresyon Testi

Fonksiyonel Test (Functional Test)
Geliştirilen sistemin fonksiyonlarının sınandığı test çalışmasıdır. Sistemde geliştirilen fonksiyonların tamlığının, doğruluğunun ve tutarlılığının test edilmesidir. ALFA aşamasında gerçekleştirilen fonksiyonel test, yazılım geliştirme çalışmaları sırasında teknik ekibin yaptığı hataları ortaya çıkarır ve sistemin kullanıcı kabulüne sunulmadan önce fonksiyonel hatalardan arındırılmasını sağlar. BETA aşamasında ise müşteri bir yandan sistemde olacağı iddia edilen fonksiyonların tam ve doğru bir şekilde geliştirilip geliştirilmediğini sınarken, diğer yandan eksik fonksiyonalite olmadığını da garanti almaya çalışır.

Kullanılabilirlik Testi
Sistem üzerinde geliştirilen fonksiyonların kullanılabilirlik seviyesinin testidir. Hem ALFA, hem BETA aşamalarında gerçekleştirilen bir test alanıdır. Fonksiyonel gereksinimler müşteriden alındıktan sonra, gereksinimi karşılayacak yapılar sistem üzerinde teknik ekip tarafından farklı şekillerde geliştirilebilir. Bazı durumlarda sistem, müşterinin belirttiği fonksiyonel gereksinimleri karşılasa da, kullanım açısından beklentileri karşılayamayabilir. Bu durum, genellikle yapılan fonksiyonel tasarımlar için müşteriden onay alınmamasından kaynaklanır. Böylesi durumlar ancak BETA aşamasında ortaya çıkar. Bazı durumlarda ise fonksiyonel tasarımları müşteri onaylamış olmasına karşın, tasarım sistem üzerinde onaylanan tasarımlardan farklı şekilde yapılandırılmış olabilir. Bu tür durumların ALFA aşamasında düzeltilmesi beklenir. Bazı durumlarda da tasarım gereksinimleri karşılıyor gibi görünse de, sistem üzerinde yapılandırıldığında uygunsuz olabilir. Bu durum genellikle BETA aşamasında farkedilse de, kullanılabilirlik konusundaki uzmanlar tarafından ALFA aşamasında da ortaya çıkarılabilir. Kullanılabilirlik testi sonucunda ortaya çıkan uygunsuzluklar fonksiyonların kullanıcı etkileşimi olan bölümlerinde tasarımsal değişiklikler yapılmasını gerekecektir.

Entegrasyon Testi
Fonksiyonel gereksinimlerin bazıları geliştirilen sistemin diğer mevcut sistemler ile veri alışverişi yapmasını gerektirebilir. Bunun en sık karşılaşılan örnekleri, geliştirilen sistemin eposta veya sms göndermesi, başka bir sistemdeki bir kaydı güncellemesi veya başka bir sistemde yapılan bir işlem sonrasında yeni geliştirilen sistemdeki kayıtların güncellenmesidir. Böylesi gereksinimlerin var olması durumunda, entegrasyonun tam ve doğru yapıldığının garanti altına alınması için entegrasyon testi gerçekleştirilir. Bu test çalışmaları sonucunda entegrasyonun tam, tutarlı ve doğru çalışmadığı durumlar ortaya çıkarılarak, gerekli düzeltmelerin yapılması sağlanır. Entegrasyon testi hem ALFA, hem BETA aşamlarında gerçekleştirilen bir test alanıdır.

Performans Testi
Bir sistemin kabul edilebilir bir hızda işlemesi beklenir. Sistemin tüm fonksiyonel gereksinimleri karşılamasına rağmen kabul edilebilir olmayan bir yavaşlıkta çalışması, müşterinin geliştirilen sistemi kabul etmemesine neden olabilir. Bir yazılım sisteminin hızı, sistemin birim zamanda yapması gereken işlem sayısına, işlediği veri büyüklüğüne ve veri deposunun büyüklüğüne göre değişkenlik gösterir. Bu bağlamda performans testi kapsamında, sistemin veritabanında çok fazla kayıt olduğunda nasıl davrandığı, veritabanında çok büyük kayıtlar olduğunda nasıl davrandığı, aynı anda çok sayıda kullanıcı tarafından işlem yapıldığı durumda nasıl davrandığı ve aynı anda çok sayıda büyük veriler işlenmesi gerektiğinde nasıl davrandığının test edilmesi gerekir. Tüm bu durumların farklı kombinasyonlarda birlikte nasıl ek sonuçlar doğurduğu da performans testi sırasında sınanır. Performans testi hem ALFA, hem de BETA aşamalarında gerçekleştirilen bir test alanıdır.


Güvenilirlik Testi
Geliştirilen sistemin farklı koşullardaki kararlılığının, sağlamlığının ve tutarlılığının test edildiği çalışmadır. Hem ALFA, hem de BETA aşamasında uygulanır. Güvenilirlik testinin etkin yapılabilmesi için geliştirilen sistemin hangi koşullarda farklı davranış gösterebileceği veya tümüyle işlevsiz olabileceği ve sistemin farklı açılardan kapasitesi (işlem yapabildiği sınır koşullar) belirlenir; sözkonusu  koşullar oluşturularak, sistemin nasıl davrandığı veya tümüyle işlevsiz kalıp kalmadığı gözlenir. Yazılım sistemileri için bu koşullar, sistemde bir anda işlem yapan kullanıcı sayısı, sistemde bir anda yapılmaya çalışılan işlem sayısı, sistemde işlenen verinin büyüklüğü, sistemde işlenen verinin miktarı, parametre veya konfigürasyon farklılıkları, sistemin veri deposunun büyüklüğü, beklenmeyen veri girişleri, beklenmeyen veri formatları, beklenmeyen kullanıcı davranışları, beklenmeyen işletim sistemi koşulları ve beklenmeyen dış uygulama etkileri olabilir.

Güvenlik Testi
Geliştirilen sistemin depoladığı verileri, işlediği bilgileri, barındırdığı fonksiyonları ve özellikleri sadece yetkili kullanıcı ve rollerin erişimine sunduğunu garanti altına almak için yapılan testlerdir. Bu bağlamda yapılan testler yazılımın farklı katmanlarına özel olarak yapılır. Veritabanı üzerinden yetkisiz erişim, kullanıcı önyüzüne yetkisiz erişim, uygulama bileşenleri arasındaki iletişime müdehale, veri alış verişi sırasındaki yetkisiz erişim gibi noktalar güvenlik testinde sıkça sınanan senaryolardır. Bu testler hem ALFA aşamasında, hem de BETA aşamasında yapılması gerekir. Güvenlik testleri hem yazılım, hem de altyapı sistemleri konusunda uzman kişilerce yapılabilir; bu nedenle genellikle BETA aşamasında genellikle bu konuda hizmet veren danışmanlık şirketlerine outsource edilirler.

Kurulum Testi 
Geliştirilen sistemin tanımlanmış sistem gereksinimlerinin ve uygun olarak tanımlanmış kurulum opsiyonlarının tamlığının, tutarlılığının ve uygunluğunun sınandığı test çalışmasıdır. Bu test dahilinde tanımlanmış sistem gereksinimlerini karşılamak kaydıyla, geliştirilen sistemin üzerinde kurulacağı sistemde farklı konfigürasyon koşulları yaratılarak, tüm koşullarda sistemin başarıyla kurulup kurulamadığı test edilir. Genellikle bu test çalışması kapsamında kurulum dokümantasyonlarının tamlığı, doğruluğu ve tutarlılığı da sınanır. Kurulum testleri kapsamında, kurulum fonksiyonlarının testi kadar, kurulum sürecinin performansı, güvenilirliği ve güvenliği de test edilmelidir.

Bakım Testi
Geliştirilen sistemin kullanıma alındıktan sonra, sistem üzerinde yapılacak tanımlı bakım çalışmalarının tam, tutarlı ve uygun olduğunun sınandığı test çalışmasıdır. Bu testin yapılabilmesi için bakım gerektiren sistem bileşenleri ve veriler belirlenerek, sözkonusu bileşen ve verilerin bakımı için gerekli prosedürlerin tanımlı olup olmadığı, tanımlanmış prosedürlerin farklı koşullar yaratıldığında işleyip işlemediği test edilir. Bakım testleri kapsamında, bakım prosedürlerinin tamlık ve tutarlılık testi kadar, tanımlı bakım prosedürlerin ve talimatlarının sonucunda ortaya çıkacak performans, güvenilirlik ve güvenliği de test edilmelidir.

Arşivleme ve Yedekleme Testi
Geliştirilen sistemin depoladığı verileri tanımlanan şekilde arşivleyip arşivleyemediği, arşivlenen verilerin erişilebilir olup olmadığı, depoladığı verilerin tanımlanan şekilde yedeklenip  yedeklenmediği, yedeklenen verilerin erişilebilir olup olmadığının sınandığı test alanıdır. Arşivlemede, depolanan veriler sistem bünyesinde tutulmaya devam edilirken, sistemdeki fonksiyonların erişimine kapatılır. Yedeklemede ise veriler sistemin dışına kopyalanarak, olası veri kayıp risklerine karşı güvence yaratılır. Arşivleme kullanım kolaylığı odaklı, yedekleme ise risk odaklıdır. Arşivleme ve Yedekleme testi dahilinde geliştirilen sistemin arşivleme gereksinimi olduğu tanımlanan verileri fonksiyonların kullanımına tam ve tutarlı biçimde kapatıp kapatmadığı ve arşivlenmiş verilerin arşivden tam ve tutarlı biçimde çıkarılıp normal veri konumuna getirilip getirilemediği test edilir. Arşivleme testi dahilinde dikkate alınması gereken önemli konulardan birisi zaman içerisinde değişen konfigürasyon parametrelerine karşın arşivleme ve arşivden çıkarma durumlarında sistemin tutarlı davranıp davranmadığı konusudur. Bu test dahilinde ayrıca geliştirilen sistemdeki verilerin tam ve tutarlı biçimde yedeklenip yedeklenemediği ve yedeklenmiş verilerin tam ve tutarlı biçimde işlevsel hale getirilip getirilemediği de sınanır.

Denetim Testi
Geliştirilen sistemin, müşterinin hesap vermekle yükümlü olduğu kurumlar tarafından denetlenebilir olup olmadığının, denetlenmek istenebilecek işlem izlerinin ve veri değişiklik tarihçesinin sistemde tutulup tutulmadığının, sözkonusu tüm denetim verilerine ulaşılıp ulaşılamadığının sınandığı test çalışmasıdır. Bu kapsamda sistemde geliştirilmiş loglama mekanizması, loglama mekanizmasının konfigürasyon seçenekleri ve logların erişimi ve yönetimi, hem fonksiyonel, hem performans, hem güvenilirlik, hem de güvenlik perspektiferinden test edilir. Denetim Testi hem ALFA, hem de BETA aşamalarında gerçekleştirilir.

Dokümantasyon Testi
Geliştirilen sistem için hazırlanan hertürlü dokümantasyonun geliştirilen sistemin eldeki versiyonu için tam, doğru ve tutarlı olup olmadığının sınandığı test çalışmasıdır. Bu çalışma dahilinde hazırlanan tüm dokümanlardaki bilgiler ve argümanlar, işleyen sistem ile karşılaştırılarak, tamlık, doğruluk ve tutarlılık açısından incelenir. Bu çalışma hem ALFA aşamasında, hem de BETA aşamasında gerçekleştirilir.

Regresyon Testi
Geliştirilen ve test edilmiş sistem üzerinde yapılan değişikliklerin sistemin test edilmiş ve onaylanmış fonksiyon ve özelliklerini bozup bozmadığının sınandığı test çalışmasıdır. Döngüsel bir çalışma olup, tüm test alanlarını kapsar. Regresyon testleri daha önce yapılan ve başarı ile sonuçlanan tüm testlerin tekrarını gerektirir.

9 Kasım 2007 Cuma

Köpek Maması

Dogfood,

"şirketin satmaya çalıştığı ürünü veya servisi kendi operasyonu dahilinde kullanmasıdır."

"We need to dogfood this product before we roll it out to the public."

Microsoft'ta Visual Basic Development grubunun lideri Paul Vick şöyle diyor:

Dogfood Microsoft'un şirket kültürünün bir parçasıdır, çünkü:

1) Dogfood, Microsoft'un kendi ürünlerine inancının en güzel kanıtıdır.

2) Dogfood, yazılımlardaki hataların müşterilere sunulmadan ortaya çıkmasını sağlar, zira Dogfooding yapılması bir nevi Pre-Beta testtir.

3) Dogfood sayesinde, Microsoft çalışanları, müşterileri çileden çıkaran hatalar ve tasarım bozukluklarını bilfiil yaşarlar ve bu problemleri giderme konusunda son derece hassas olurlar.

4) Dogfood, üretilen ürünlerin ve verilen hizmetlerin Microsoft'un pazara söylediği iyi olup olmadığını anlamanın en gerçekçi yoludur.

5) Microsoft oldukça büyük kurumsal bir şirket olduğundan, dogfooding, kurumsal seviyedeki müşterilerde yaşanabilecek sıradışı sıkıntıların önceden ortaya çıkmasını sağlar.

6) Dogfooding, Microsoft yazılım geliştiricilerinin, onların düşündükleri gibi değil, gerçekten çalışıp çalışmadığını görmelerini sağlar.

23 Ekim 2007 Salı

Video: Gerceklestirilebilir Hedefler

Yazılım Testi konusunda cok derin tecrubesi olan James Lyndsay'in Google'da verdigi seminerde, Lyndsay yazılım test süreçlerini entellektüel bir perspektiften inceliyor. Yazılım Test süreçlerini kavramsal boyutta sorgularken, konun felsefesine deginiyor.

Not: Pratik bilgi ve metod arayan arkadaslara sıkıcı gelebilir.