Kaliteli yazılımlar, kabul edilebilir düzeyde hatasız, planlanan
bütçe ile zamanında bitirilip dağıtılabilen, gereksinimleri ve/veya
beklentileri karşılayabilen ve sürdürülebilir özelliklere sahip
yazılımlardır. Ancak, kalite terimi kişilere göre oldukça değişebilen
bir terim olup müşterisinin kim olduğuna ve tasarımda hedeflenen
unsurlara bağlı olarak farklılıklar gösterebilmektedir. Doğal olarak,
her kişinin kalite hakkında bireysel eğilimleri veya tercihleri söz
konusu olmasına karşın kaliteyi ortaya koyan nesnel yöntemler yansız
değerlendirmeleri olanaklı kılmaktadır.
Test, bir sistemi manuel veya otomatik yollarla deneyerek veya değerlendirerek, belirlenmiş gereksinimleri karşıladığının doğrulanması veya beklenen ile gözlenen sonuçlar arasındaki farkların belirlenmesi sürecidir. Yazılım testi ise bir yazılımın sonsuz sayıdaki çalışma alanından, sınırlı sayıda ve uygun şekilde seçilmiş testler ile beklenen davranışlarını karşılamaya yönelik, dinamik olarak yapılan doğrulama faaliyetlerini kapsamaktadır.
Yazılım Testinin Yapılma Nedenleri
Geliştirilen yazılımlarda, kaynağı ve sebebi değişmekle birlikte çeşitli hataların olması kaçınılmazdır. Çalışılan uygulama alanının kritikliğine göre bu hataların doğuracağı sonuçların biçimi değişebilmektedir. Bir finans uygulamasında yapılan küçük bir hata çok büyük miktarlarda para kaybına yol açabilecekken, bir askeri uygulamada yapılması muhtemel küçük bir hata mal kaybının yanı sıra can kaybına da neden olma riskini taşımaktadır. Bununla birlikte uygulamanın türüne bağlı olarak yazılım testleri,
Yazılım Test Süreci
Genel olarak yazılım projeleri analiz -> tasarım -> kodlama -> test -> ürün süreçleri izlenerek geliştirilir. Bütün süreçler birbirini bu şekilde izlese de test süreci hiçbir zaman kodlama sürecinin bitmesini beklemez. İdeal bir yazılım test süreci, analiz -> tasarım -> test hazırlık süreci-> kodlama -> dinamik test süreci -> testin sonlandırılması -> ürün şeklinde olmak durumundadır. Test süreçlerince yapılması gereken işlemler şu şekilde sıralanır:
Test Hazırlık Süreci
Bu süreç, yazılım test süreçleri içindeki ilk aşama olmakla beraber, testin efektif sonuçlar vermesi ve verimli olması açısından büyük öneme sahiptir. Dolayısıyla, bir yazılımı iyi test edebilmek için, test işlemlerinden önce, sağlıklı bir test hazırlık süreci kaçınılmazdır. Test hazırlık sürecinde yapılması gereken birtakım standart işlemler şu şekilde sıralanır:
Dinamik Test Süreci
Bu süreç kodlama çalışmalarının bitmesine yakın bir dönemde başlar. Bulunan tüm hatalar çözülmeden ve testin sonlandırma kriterleri sağlanmadan sona ermez. Test edilecek yazılımın türüne göre, dinamik olarak uygulanacak test teknikleri ve bu tekniklerin uygulanma metotları farklılık gösterebilir. Genel olarak dinamik test süreci içinde ve sonrasında uygulanabilecek olan testler ve test teknikleri şu şekilde sıralanır:
Yapılan testler sonucunda bulunan hatalar düzeltildikten sonra test sonlandırma kriterleri (test hazırlık süreci) kontrol edilir. Eğer tüm kriterlerin kabul edilebilir düzeyde sağlandığı tespit edilirse test sonlandırılır. Testin sonlandırılmasının ardından uygulama müşteri testine açılır (Kullanıcı Kabul Testi). Müşterilerin bulduğu hatalar veya değiştirilmesi istenilen noktalar gözden geçirilerek tekrar test ekibinin kontrolüne sunulur. Bu kontrolden çıkan uygulama ürün aşamasına geçer ve böylelikle yazılım test süreci sona erdirilerek, yazılım geliştirme sürecinin son basamağına geçilmiş olunur.
Test, bir sistemi manuel veya otomatik yollarla deneyerek veya değerlendirerek, belirlenmiş gereksinimleri karşıladığının doğrulanması veya beklenen ile gözlenen sonuçlar arasındaki farkların belirlenmesi sürecidir. Yazılım testi ise bir yazılımın sonsuz sayıdaki çalışma alanından, sınırlı sayıda ve uygun şekilde seçilmiş testler ile beklenen davranışlarını karşılamaya yönelik, dinamik olarak yapılan doğrulama faaliyetlerini kapsamaktadır.
Yazılım Testinin Yapılma Nedenleri
Geliştirilen yazılımlarda, kaynağı ve sebebi değişmekle birlikte çeşitli hataların olması kaçınılmazdır. Çalışılan uygulama alanının kritikliğine göre bu hataların doğuracağı sonuçların biçimi değişebilmektedir. Bir finans uygulamasında yapılan küçük bir hata çok büyük miktarlarda para kaybına yol açabilecekken, bir askeri uygulamada yapılması muhtemel küçük bir hata mal kaybının yanı sıra can kaybına da neden olma riskini taşımaktadır. Bununla birlikte uygulamanın türüne bağlı olarak yazılım testleri,
- Müşteriye sunulmadan önce ürün kalitesinden emin olmak,
- Yeniden çalışma (düzeltme) ve geliştirme masraflarını azaltmak,
- Geliştirme işleminin erken aşamalarında yanlışları saptayarak ileri aşamalara yayılmasını önlemek, böylece zaman ve maliyetten tasarruf sağlamak,
- Müşteri memnuniyetini arttırmak ve izleyen siparişler için zemin hazırlamak,
Yazılım Test Süreci
Genel olarak yazılım projeleri analiz -> tasarım -> kodlama -> test -> ürün süreçleri izlenerek geliştirilir. Bütün süreçler birbirini bu şekilde izlese de test süreci hiçbir zaman kodlama sürecinin bitmesini beklemez. İdeal bir yazılım test süreci, analiz -> tasarım -> test hazırlık süreci-> kodlama -> dinamik test süreci -> testin sonlandırılması -> ürün şeklinde olmak durumundadır. Test süreçlerince yapılması gereken işlemler şu şekilde sıralanır:
Bu süreç, yazılım test süreçleri içindeki ilk aşama olmakla beraber, testin efektif sonuçlar vermesi ve verimli olması açısından büyük öneme sahiptir. Dolayısıyla, bir yazılımı iyi test edebilmek için, test işlemlerinden önce, sağlıklı bir test hazırlık süreci kaçınılmazdır. Test hazırlık sürecinde yapılması gereken birtakım standart işlemler şu şekilde sıralanır:
- Öncelikle test edilecek yazılıma ait analiz ve teknik tasarım aşamaları ile ilgili dökümanlar, test ekibi tarafından incelenir.
- Yazılım içinde test edilecek ve edilmeyecek modüller belirlenir.
- Risk analizi yapılır ve yapılan değerlendirmeye göre dinamik test aşamasında uygulanacak olan test teknikleri ve metodları belirlenir.
- Dinamik testin uygulanacağı ortamlar ve bu ortamların ihtiyaçları belirlenip, uygun şartlar sağlanır.
- Test ekibi içinde görev paylaşımı ve zaman planlaması yapılır.
- Testin sonlandırma kriterleri belirlenir.
- Bir programa belirli girdiler (input) verildiğinde hangi çıkışların (output) ne şekilde alınması gerektiğini bildiren test case senoryaları belirlenir.
- Dinamik testin hangi adımlarla ve ne şekilde uygulanacağının belirtildiği test planı hazırlanır.
Dinamik Test Süreci
Bu süreç kodlama çalışmalarının bitmesine yakın bir dönemde başlar. Bulunan tüm hatalar çözülmeden ve testin sonlandırma kriterleri sağlanmadan sona ermez. Test edilecek yazılımın türüne göre, dinamik olarak uygulanacak test teknikleri ve bu tekniklerin uygulanma metotları farklılık gösterebilir. Genel olarak dinamik test süreci içinde ve sonrasında uygulanabilecek olan testler ve test teknikleri şu şekilde sıralanır:
- Birim Testi (Unit Testing) :
Dinamik test sürecinin ilk aşaması olmakla beraber, hataların erken
bulunup düzeltilebilmesi açısından da bu sürecin en önemli aşamasını
oluşturur. Mikro ölçekte yapılan bu testte, özel fonksiyonlar veya kod
modülleri (fonksiyonlar, veri yapıları, nesneler vb.) test edilir. Bu
test, test uzmanlarınca değil programcılar tarafından yapılır ve program
kodunun ayrıntıları ile içsel tasarım biçiminin bilinmesi gerekir.
Uygulama kodu çok iyi tasarlanmış bir mimaride değilse oldukça zor bir
testtir.
- Tümleyim Testi (Integration Testing) :
Bir uygulamanın farklı bileşenlerinin beraberce uyum içinde çalışıp
çalışmadığını sınamak için yapılan bir testtir. Bileşenler, modüller,
bağımsız uygulamalar, istemci/sunucu uygulamaları biçiminde olabilirler.
Bu tür testlere, özellikle istemci/sunucu uygulamaları ve dağıtık
sistemlerin testinde başvurulmaktadır. Bunun yanısıra uygulamaya yeni
işlevsel elemanlar ya da program modülleri eklendikçe sürekli test
edilmesi işlemine de “Artımsal Tümleyim Testi” adı verilir. Test
uzmanları ve/veya programcılar tarafından gerçekleştirilen testlerdir.
- Regresyon Testi (Regression Testing) :
Uygulamada ve uygulama ortamlarında gerekli değişiklikler ve
sabitlemeler yapıldıktan sonra yeniden yapılan testlere çekilme
(regresyon) testi denilir. Böylece, önceki testlerde belirlenen
sorunların giderildiğinden ve yeni hatalar oluşmadığından emin olunur.
Uygulamanın kaç kez yeniden test edilmesi gerektiğini belirlemek güçtür
ve bu nedenle, özellikle uygulama geliştirme döneminin sonlarına doğru
yapılır.
- Zorlanım – Performans Testi (Performance Testing) :
Bu test, çoğu kez "yük testi" ile aynı anlamda kullanılmaktadır. Aynı
zamanda, beklenmedik (normal olmayan) ağır yükler, belirli eylemler ve
taleplerin çok fazla artışı, çok yoğun sayısal işlemler, çok karmaşık
sorgulamalar vb. ağır koşullar altında olan bir sistemin işlevsellik
testi (iş yapabilme testi) olarak da tanımlanabilmektedir. Bir web
sitesi için sistem tepkisinin hangi noktada azaldığı veya yanıt veremez
olduğunu belirlemek için yapılan testler, performans testine örnek
teşkil edebilir.
- Kullanıcı Kabul Testi (User Acceptance Testing) :
Son kullanıcı veya müşteri siparişine (veya isteklerine) dayanan son
test işlemidir. Kullanıcıların, uygulamayı “kabul” etmeden önce, söz
konusu uygulamanın gereksinimlerini ne ölçüde karşılayıp karşılamadığını
belirleyip, geri dönüş yapabileceği testlerdir.
- Beyaz Kutu Test Tekniği (White Box Testing Technic) :
Beyaz kutu test tekniğinin en genel tabiri kod testidir. Projenin hem
kaynak kodu, hem de derlenmiş kodu test edilir. Bu tür testler, uygulama
kodunun iç mantığı üzerindeki bilgiye bağlıdır. Yazılım kodundaki
deyimler, akış denetimleri, koşullar vb. elemanlar sınanır.
- Kara Kutu Test Tekniği (Black Box Testing Technic ) : Test ekipleri tarafından en çok kullanılan teknik olan kara kutu test tekniği adından da anlaşılacağı gibi uygulamanın sadece derlenmiş kodu üzerinden test edilmesi olarak bilinir. Bu test tekniğinde, yazılımın programatik yapısı, tasarımı veya kodlama tekniği hakkında herhangi bir bilgi olması gerekli değildir. Yazılımın gereksinimine duyulan şeylere yanıt verip veremediği ve işlevselliği sınanmaktadır.
Yapılan testler sonucunda bulunan hatalar düzeltildikten sonra test sonlandırma kriterleri (test hazırlık süreci) kontrol edilir. Eğer tüm kriterlerin kabul edilebilir düzeyde sağlandığı tespit edilirse test sonlandırılır. Testin sonlandırılmasının ardından uygulama müşteri testine açılır (Kullanıcı Kabul Testi). Müşterilerin bulduğu hatalar veya değiştirilmesi istenilen noktalar gözden geçirilerek tekrar test ekibinin kontrolüne sunulur. Bu kontrolden çıkan uygulama ürün aşamasına geçer ve böylelikle yazılım test süreci sona erdirilerek, yazılım geliştirme sürecinin son basamağına geçilmiş olunur.