YAZILIM, KALİTE VE TESTE BAKIŞ

Ozan Eser
5 min readApr 26, 2019

--

Bu yazı dizisinde “Yazılım Nedir? Neden Test Edilmeli?”, “Kalite Nedir? Ne Kadar Önemli?”, “Test Nedir? Kimler Test Yapıyor?”, “Test Ne Zaman Başlatılmalı? Ne Zaman Sonlandırmalı?” ve “Validation Nedir? Verification Nedir? Farkları Nelerdir?” gibi sorulara cevap arıyor olacağız.

  1. YAZILIM NEDİR? NEDEN TEST EDİLMELİ?

Yazılım(software), bilgisayar için belirli bir görevi gerçekleştiren bir dizi talimattır. Yazılım iki ayrı kategoriye ayrılır. Bunlar; Sistem Yazılımı (System Software) ve Uygulama Yazılımıdır (Application Software).

Sistem yazılımı (system software), donanımla ve uygulama yazılımıyla iletişim kurmak için tasarlanmış bir yazılım türüdür. Bir bilgisayar sisteminin bu iki bileşeni arasındaki görevleri koordine eden (donanım ve bilgisayar programları arasında) bir arayüz görevi görür. İşletim sistemi, dil işlemcileri ve aygıt sürücüleri sistem yazılımlarına örnek verilebilir.

Uygulama yazılımı (application software), işletim sistemindeki belirli görevleri gerçekleştirmek için tasarlanmış bir yazılım türüdür. Bu görevlerden bazıları arasında belge kullanımı, hesaplama işlemleri, resim ve video düzenleme sayılabilir. Kelime işlemcileri, elektronik tablolar, veritabanı yazılımları ve resim editörleri uygulama yazılımına örnek verilebilir.

Bir yazılım, müşteri standartlarını ve ihtiyaçlarını karşılamalıdır. Kullanıcı gereksinimlerini karşılayan bir yazılım iyi kalitede(good quality) kabul edilir. Bir yazılımın kalitesini test ederek kontrol edebiliriz. Bu yüzden yazılım müşteriye teslim edilmeden önce fonsiyonalite, performans, kullanılabilirlik, güvenilirlik ve taşınabilirlik gibi bir çok etmen göz önünde bulundurularak test edilmelidir.

2. KALİTE (QUALITY) NEDİR? NE KADAR ÖNEMLİ?

Kalite, yazılımın müşteri ihtiyacını ve beklentisini karşılayan, kusur, eksik ve önemli değişkenlerden arındırılmış hali olarak ifade edilebilir. Kalite (Quality) kısaca “bir derece mükemmelliktir”. Yüksek kaliteli bir yazılım genellikle kullanıcı gereksinimlerine ve beklentisine uygundur. Bir müşterinin kalite fikri; iyi bir tasarım, işlevsellik, özelliklerin uygunluğu ve fazlalığı, iyi bir performansa sahip platform ve konfigürasyonlar ile son kullanıcının kullanımına uygun yazılımlar olarak tanımlanabilir.

Kaliteli yazılım zaman ve para tasarrufu sağlar. Çünkü yazılımda oluşacak daha az hata, test ve bakım (maintenance) aşamalarında zaman kazandırır. Kaliteli yazılımlar, müşteri memnuniyeti sağlamakla birlikte düşük bakım maliyeti ile firmalara ölçülemeyecek düzeyde fayda sağlar. Çünkü bakım, yazılım maliyetinin büyük bir bölümünü temsil eder. Kaliteli yazılımlar sayesinde; projenin genel maliyeti benzer projelerden daha düşük olacaktır.

Aşağıda yazılım kalitesinin önemini gösteren iki örnek vermek istiyorum:

1- Ariane 5 Roket Kazası (4 Haziran 1996): Ariane 5 roketi fırlatıldıktan 40 saniye sonra parçalandı. Zarar yaklaşık yarım milyar dolardı. Ariane 4’ te kullanılan bir modül düzgün test edilmeden yeniden kullanılmıştı ve Ariane 5’e uyum sağlamamıştı. Parçalanmanın sebebi bir yazılım hatasıydı. 64 bitlik ondalıklı sayı, 16 bit işaretli tam sayıya çevrilirken bulunan sonuç beklenenden büyük çıkıyordu. Bu tarihteki en pahalıya mâl olan yazılım hatalarından biridir!

2- Mars Climate Orbiter Hatası (23 Eylül 1999): Gezegenler arası ilk iklim uydusu olarak 1997’de fırlatıldı. Mars Orbiter, 1999’da Mars’ın yörüngesinde kayboldu. Kazanın yazılımda kullanılan İngiliz ölçü birimlerinin metrik sisteme yanlış çevrilmesinden kaynaklandığı belirtildi. NASA ekibi hesaplarında İngiliz ölçü birimini (inç, feet) kullanırken, projeye katılan diğer ekipse metrik (mm, cm, m) sistemi kullanmıştı. 125 milyon dolarlık uydu yörüngeye sabitlenmeye çalışırken Mars’a olması gerekenden fazla yaklaşarak imha olduğu düşünülüyor.

Ayrıca burada bahsedilmesi gereken bir diğer konu kalite güvencesi (Quality assurence) ve kalite kontrol (Quality control) kavramlarıdır. Bu iki kavram birbiri ile çok karıştırılan iki kavramdır. Her ikisi de kalite yönetiminin bir parçasıdır ve birbirlerine sıkı bir şekilde bağlıdır. Fakat kökenleri bakımından birbirlerinden farklıdırlar.

· Kalite Güvencesi (Quality Assurence), hata veya kusurun önlenmesini hedefler. Kalite kontrol (Quality Control) ise hata veya kusurun tespit edilmesini ve iyileştirilmesini hedefler.

· QA, kaliteyi yönetme tekniğidir. QC, kaliteyi doğrulama tekniğidir.

· Kalite güvencesi kalite kontrolü kavramını kapsamaktadır. QA bir sürecin planlanmasıdır. QC ise planlanan bu sürecin yürütülmesidir.

· Bir takımda tüm takım üyeleri QA’dan sorumluyken, QC’den sadece test uzmanları sorumludur. Bir başka deyişle; QA, Yazılım Geliştirme Yaşam Döngüsünden (SDLC) sorumluyken QC, Yazılım Test Yaşam Döngüsünden (STLC) sorumludur.

Yazılım test kavramını ele aldığımızda, test ürün veya uygulamaya odaklandığı için QC altında yer alır. Aslında kaliteyi kontrol etmek için ürünü test ediyoruz. Ayrıca, testlerimizi planlanan QA süreçlerine göre yönetiyoruz. Yani QA, QC’yi kapsarken, QC’de testi kapsamaktadır.

3. TEST NEDİR?

Test, bir sistemin veya sistemin bileşenlerinin belirtilen gereklilikleri karşılayıp karşılamadığını öğrenmek amacıyla yapılan bir değerlendirme sürecidir. Tanımlanan gereksinimlerdeki boşluklar, hatalar (errors) ve eksik gereksinimler (missing requirements) bu sayede tespit edilir.

Bu değerlendirme süreci aşağıdaki adımlardan meydana gelmektedir.

· Test planlama ve kontrol

·Test analizi ve tasarımı

· Test uyarlama ve yürütme

· Çıkış kriterlerini değerlendirme ve raporlama

· Test kapanışı işlemleri

İşletilen bu test sürecinde; hataları bulmak, kalite seviyesi hakkında güven kazanmak, karar vermek için bilgi sağlamak ve hataları önlemek hedeflenmektedir.

Peki Kimler Test Yapıyor? Testin kim tarafından yapıldığı, sürece ve projenin paydaşlarına bağlı olarak değişmektedir. Çoğu büyük şirkette; aşağıdaki uzmanlar bir sistemi kendi kapasiteleri dahilinde test ederler.

· Yazılım Test Mühendisi (Software Test Engineer)

· Yazılım Geliştirici ( Software Developer)

· Proje Lideri/Müdürü ( Project Lead/Manager)

· Son Kullanıcı (End User)

Yazılımı test eden kişilerin bilgi birikimi ve tecrübelerine göre şirketlerde farklı pozisyonlar mevcuttur. Örneğin; Yazılım Test Mühendisi(Software Test Engineer), Yazılım Kalite Güvence Mühendisi(Software Quality Assurance Engineer), QA Analist(QA Analyst) bunlardan bazılarıdır.

4. TESTE NE ZAMAN BAŞLANMALI VE NE ZAMAN BİTİRİLMELİDİR?

Teste erken başlamak, hatasız yazılım üretme maliyetini ve süresini azaltır. Yazılım Geliştirme Yaşam Döngüsü’nde (SDLC); test aktiviteleri yazılım projelerinin erken fazlarında (örn: planlama, analiz, tasarım) başlatılır ve yazılımın dağıtımına kadar devam eder.

Ayrıca teste ne zaman başlanacağı kullanılan geliştirme modeline de bağlıdır. Test tek başına var olamaz, test adımları yazılım geliştirme adımları ile iç içe geçmiş durumdadır. Farklı yazılım geliştirme yaşam döngüsü modelleri (örn: V Modeli, Döngüsel-Artımlı Geliştirme Modeli ve Yaşam Döngüsü Modeli.), farklı test yaklaşımları gerektirir.

Testin ne zaman biteceğini ise belirlemek zordur, çünkü test hiç bitmeyen bir işlemdir ve yazılımı %100 test etmek imkansızdır. Bu süreçte, test koşum işleminin bitmesi, test bitiş tarihi, yönetim kararı gibi etmenler rol oynamaktadır.

5. VALIDATION (ONAYLAMA) NEDİR? VERIFICATION(DOĞRULAMA) NEDİR? FARKLARI NELERDİR?

Bu iki terim, karşımıza çok sık çıkan, biribiri ile karıştırılan hatta birbiri yerine kullanılan iki terimdir. Aşağıda bu iki terimin farkları vurgulanmıştır.

· Verification(Doğrulama), “Are you building it right?” sorusuna cevap arar. Yani “Doğru mu inşa ediyorsunuz?”. Validation(Onaylama) ise “Are you building the right thing?” sorusuna cevap arar. Yani “Doğru şeyi mi inşa ediyorsunuz?”.

· Verification, işlemi yazılım geliştiriciler (developer) tarafından yapılırken, Validation, işlemi test mühendisleri tarafından yapılır.

· Verification, nesnel bir süreçtir ve yazılımı doğrulamak için öznel bir karara gerek yoktur. Validation ise, öznel bir süreçtir ve bir yazılımın ne kadar iyi çalıştığına dair öznel kararlar içerir.

--

--

Ozan Eser

Software Test Automation Engineer @Ciceksepeti #JMeter #Postman #Appium #Selenium