Saturday, January 27, 2018

IEEE-1044'e Göre Hata, Kusur, Arıza, Bozukluk ve Sorun

Bazen hepsini aynı anlamda kullandığımız ama dikkat edilmediğinde özellikle Güvenilirlik çalışmalarında ve proje kabul aşamalarında ciddi sorunlara sebep olan hata, arıza, kusur, bozukluk ve sorun tanımlarına bakalım.

Google / Apple uygulama pazarları için geliştirilen ürünlerde bu tarz tanımlamaların hemen hemen hiçbir önemi yoktur. Ancak, eğer ki kamu kurumları ve/veya özel şirketlere yönelik yazılım / sistem çözümleri geliştiren bir şirkette çalışıyorsanız, ürününüzün Geçici Kabul, Kabul ve Kullanıma Alınması aşamalarında ortaya çıkacak sorunların sınıflandırılması ve bu sınıflandırma sonrasında sorunların çözüm sırasının / takviminin belirlenebilmesi için, aşağıdaki tanımlamaların (veya benzer bir tanımlamanın) yapılması zorunludur.

Bu tanımlamalar için IEEE-STD-1044 Standard Classification for Software Anomalies standartını temel alıyorum. 

Defect - Hata:

  • Bir iş ürünündeki bir kusur veya eksiklik / kusurlu olma durumu, öyle ki, iş ürünü kendi gereksinimlerini veya tanımlamalarını karşılayamamakta ve tamir edilmesi veya değiştirilmesi gerekmektedir.
  • Örnek 1: Yaşam döngüsünün erken aşamalarında bulunan ihmal ve eksiklikler.
  • Örnek 2: Test veya nihai kullanım için yeterince olgunlaşmış olan yazılımda içerilen bozukluklar.


Error - Kusur (Yanlışlık / Yanılma):

  • Doğru olmayan bir sonuç üreten bir insan eylemi.


Failure - Arıza:

  • Bir ürünün, gerekli bir yeteneği icra etme kabiliyetinin sonlanması veya daha önceden belirlenmiş sınırlar içerisinde icra edememesi.
  • Bir sistem veya sistem bileşeninin gerekli bir yeteneği daha önceden belirlenmiş sınırlar içerisinde gerçekleştirememesi olayıdır.
  • Not: Bir bozukluk ile karşılaşıldığında, bir arıza ortaya çıkabilir.


Fault - Bozukluk:

  • Yazılımdaki bir yanlışlığın ortaya çıkması / görünür hale gelmesi.


Problem - Sorun:

  • Kullanımdaki sistemin tatmin edici olmaması durumu ile sonuçlanan, bir veya daha fazla kişi tarafından deneyimlenen zorluk veya belirsizlik.
  • Üstesinden gelinmesi gereken olumsuz bir durum.

Sunday, January 14, 2018

Yazılım Test Yöntemleri

Yazılımları test etmek kullanılan farklı ana yöntemler vardır. Bunlar sırasıyla:


  • Kara Kutu Testi
  • Beyaz Kutu Testi
  • Gri Kutu Testi

Sırasıyla detaylarına bakalım:



Kara Kutu Testi

Yazılım uygulamasının iç detaylarını bilmeden test yapma tekniğine kara kutu testi denir. Test mühendisi, sistem mimarisine hâkim değil ve kaynak kodunu görmüyordur. Test mühendisi kara kutu testini gerçekleştirirken sistemin kullanıcı arayüzlerini kullanarak sistem girdiler sağlar ve çıktılarını gözlemler; girdilerin nerede ve nasıl işlendiğini görmez.

Kara kutu testinin avantaj ve dezavantajları şu şekilde sıralanabilir.

  • Avantajları:
    1. Kapsamlı yazılımlarda etkin test yapabilme,
    2. Koda erişimin gerekmemesi,
    3. Geliştirici bakış açısından ziyade kullanıcı bakış açısıyla ürüne bakılabilmesi,
    4. Orta seviyede yetkinliği olan pek çok test mühendisi tarafından bir arada testin gerçekleştirilebilmesi
  • Dezavantajları:
    1. Kısıtlı kapsama oranı; belirli sayıda test senaryosu test edilebilir,
    2. Testin etkinliği, testi yapan kişinin yetkinliği ile sınırlıdır,
    3. Kod kapsamada düşük etkinlik; çünkü test mühendisi yapılan testin hangi kod parçasını tetiklediğini bilemez.

Beyaz Kutu Testi

Bu test türü, yazılım kodunun yapısının ve iç mantığının detaylı bir incelemesidir. Bu teste aynı zamanda cam testi veya açık kutu testi de denmektedir. Bu testi yapabilmek için test mühendisinin kodun çalışma mantığını (ve dolayısıyla kodlamayı) bilmesi gerekmektedir.
Test mühendisinin koda bakarak / birim testler yazarak hangi kod parçalarının doğru çalışmadığını bulması gerekmektedir.


Beyaz kutu testinin avantaj ve dezavantajları şu şekilde sıralanabilir.
  • Avantajları
    • Test mühendisi kaynak koduna hâkim olacağı için, etkin bir test yapabilmek için hangi türdeki verilere ihtiyacı olacağını bulabilir,
    • Çok daha yüksek bir test kapsama oranına ulaşılabilir.
  • Dezavantajları
    • Daha donanımlı bir test mühendisinin testleri yazmak zorunda olmasından dolayı maliyetler yükselir,
    • Kaynak kod değişikliklerinde test kodlarının da gözden geçirilmesi gerekecektir.

Gri Kutu Testi

Uygulamanın çalışma prensipleri ile ilgili kısıtlı bir bilgiye sahipken yapılan teste verilen isimdir.
Sistemin çalıştığı alanda bilgi sahibi olan bir test  mühendisi, daha etkili testler yapabilecektir. Kara kutu testinden farklı olarak bu test türünde test mühendisi, tasarım belgelerine ve veritabanına erişim sağlayabilmektedir. Bu sayede çok daha uygun veri kümeleri ile daha detaylı test senaryoları hazırlayabilmektedir.

Bu test türünün;
  Avantajları:

  • Hem kara kutu hem de beyaz kutu testlerinin güçlü yanlarından faydalanır,
  • Kaynak koda ihtiyaç duyulmaz, bunun yerine arayüz tanımları, tasarım kararları ve gereksinimlere göre test yapılır,
  • Tasarımcının değil son kullanıcının bakış açısıyla testler yapılır.

  Dezavantajları:

  • Kaynak koda erişim olmadığı için testlerin kapsama oranı sınırlı olacaktır,
  • Her girdi türünü denemek zaman kaybı olabilir, diğer türlü, diğer iş akışları yeterince test edilmeyebilir.
Bu 3 yöntemi şu şekilde karşılaştırabiliriz:


Kara Kutu TestiGri Kutu TestiBeyaz Kutu Testi
Uygulamanın dahili çalışma mantığının bilinmesine gerek yoktur.Test mühendisi, uygulamanın dahili çalışma mantığı ile ilgili sınırlı bilgi sahibidir.Test mühendisi, uygulamanın dahili çalışma mantığı ile ilgili detaylı bilgi sahibidir.
Test mühendisi tarafından yapılır.
Son kullanıcı tarafından da yapılabilir.

Son kullanıcı tarafından yapılması zordur. 
Test mühendisi ve yazılım geliştirici tarafından yapılabilir.
Yazılım test mühendisleri ve yazılım geliştiriciler tarafından yapılır.
Daha kısa zamanda ama daha düşük kapsama oranı ile testler yapılabilir.Diğer iki yöntemin arasındadır; kısmi olarak zaman ve efor harcanır.En çok zaman ve efor harcanan testlerdir.
Algoritma testi için uygun değildir.Algoritma testi için uygun değildir.Algoritma testi için uygundur.
Sadece deneme-yanılma yöntemi ile yapılabilir.Veri türleri ve dahili sınırlar test edilebilir.Veri türleri ve dahili sınırlar daha kapsamlı olarak test edilebilir.


"Bu 3 test türünden hangisi ile test yaparsam uygulamamızı en kapsamlı şekilde test etmiş oluruz" şeklinde bir soru sorulacak olursa, doğal olarak cevap, "her 3 test türünü de kullanarak yapılan test" olacaktır.