25 Aralık 2014 Perşembe

Yazılım Testi Nedir ?


Test ilgili yaygın bir anlayış testin sadece test koşumu işleminden ibaret olduğu yönündedir. Test koşumu, test etme işleminin bir parçasıdır fakat tümü değildir.

Test sürecinde test koşumu öncesi ve sonrasında gerçekleştirilen başka işlemler de vardır. Bu işlemler arasında planlama ve kontrol, test koşullarını seçme, test senaryolarını tasarlama ve koşturma, sonuçları kontrol etme, çıkış kriterini değerlendirme, test süreci ve test edilen sistem ile ilgili raporlama ve test fazı tamamlandıktan sonra kapanış işlemlerini sonlandırma ve tamamlama yer alır. Test ayrıca, dokümanları gözden geçirme (kaynak kod dahil) ve statik analiz işlemlerini de içerir.

Dinamik test ve statik test benzer hedeflere ulaşmak için kullanılabilir ve test edilen sistem ile yazılım geliştirme ve test süreçlerini iyileştirmek için kullanılabilecek bilgiler sağlar.

Testin hedefleri aşağıdaki gibi olabilir:
  • Hataları bulmak
  • Kalite seviyesi hakkında güven kazanmak
  • Karar verme için bilgi
  • Hataları önleme
Kalite kontrol edilmez üretilir düşünce yapısı ve testlerin yazılım geliştirme sürecinin en başından itibaren işin içine dahil olması gerekliliği hataların daha yapılmadan önlenmesini sağlayacaktır. Üretilen çıktıların gözden geçirilmesi sonucunda (örn. analiz dokümanı) bulunan hataların tanımlanıp çözülmesi de kodda hataların çıkmasını engellemeye de yardımcı olabilir.

Test seviyelerindeki farklı bakış açıları farklı test amaçlarını ortaya çıkarabilir. Örneğin entegrasyon testinde amaç mümkün olan en fazla sayıda arızayı ortaya çıkarmak olabilir. Kullanıcı kabul testinde ise amaç yazılımın gereksinimleri karşılaması konusunda güven elde etmek olabilir. Bazı test senaryolarında ise testin amacı yazılımın kalitesini değerlendirmek (hataları düzeltme amacı olmadan) ve yazılımın belirli bir sürede piyasaya sürülmesi ile ilgili riskler konusunda paydaşlara bilgi vermek olabilir.

Bakım testi ise genellikle yazılımda yapılan iyileştirme ve değişikliklerin yeni bir hataya yol açıp açmadığını ortaya çıkarmak için yapılır. Operasyonel test sırasında ise amaç güvenilirlik veya elverişlilik gibi yazılım özelliklerini denetlemek olabilir.

Hata ayıklama ve test farklı kavramlardır. Dinamik test, hataların neden olduğu arızaları gösterebilir. Hata ayıklama ise arızanın sebebini bulan, analiz eden ve ortadan kaldıran bir çeşit yazılım geliştirme aktivitesidir. Düzeltme yapıldıktan sonra test uzmanı tarafından gerçekleştirilen tekrar testi, düzeltmenin arızayı giderip gidermediğinden emin olmak için yapılır. Bu aktivitede genellikle test uzmanları testi yapar, yazılımcılar ise hata ayıklar.

24 Haziran 2014 Salı

Yazılım Testi ve Test Süreçleri

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,
  • 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,
amaçları doğrultusunda da yapılmaktadır. Ayrıca ürettikleri yazılımları yeterince test etmeden müşterilerinin hizmetine sunan firmalar, olası yazılım hataları sonucunda itibar kaybedecekleri gibi müşterilerine tazminat ödemek durumunda da kalabilirler.

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:
  • Ö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.
Yukarıda sıralanan test hazırlık sürecine ait aşamalar gerçeklendikten sonra dinamik yazılım testi aşamalarına geçilir.

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.
Testin Sonlandırılması
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.

19 Mart 2014 Çarşamba

Test Otomasyonu

Neden
– Çok kere çalıştırılabilir,
– Şikayetsiz 7x24 çalışır,
– Daha Çabuktur.
Neler
– Olgunluk derecesi,
– Bağlanım testi sıklığı,
– Otomasyon zorluk derecesi (Fayda/maliyet).
Nasıl
– Program (Yarı/Tam Otomasyon),
– Araçlar (Kaydet/Oynat).

Test Otomasyonundaki Engeller
 Yöneticiler
– Otomasyon istenir fakat fazla para harcamak istenmez (Araçlar, Eğitim, Öğrenme Süresi).
Zaman
– Gereken zaman kodlamaya eşit,
– Özellikler değiştikçe güncellemek gerekir,
– Sürekli bakım/destek ister.
Teknik
– Zamanlama/Senkronizasyon,
– Koordinatlar her seferinde değişebilir.