Showing posts with label Yazılım Testi. Show all posts
Showing posts with label Yazılım Testi. Show all posts

Thursday, March 13, 2025

Yapay Zeka Testlerinde Dikkat Edilecekler

Yapay zeka (YZ) sistemlerinin test edilmesi, geleneksel yazılım testlerinden önemli ölçüde farklılık gösterir. YZ modelleri, veri odaklı öğrenme ve karmaşık algoritmalar kullandığı için, test süreçleri de bu özelliklere uygun şekilde tasarlanmalıdır. Bu makalede, YZ sistemlerini detaylı olarak test etmek için kullanılabilecek yöntemleri ve örnek test senaryolarını inceleyeceğiz.

1. Veri Odaklı Testler

Veri odaklı testler, YZ modelinin eğitim verileriyle olan ilişkisini ve modelin veri üzerindeki performansını değerlendirir.

  • Veri Kalitesi Testleri:
    • Eğitim verilerinin doğruluğunu, tutarlılığını ve eksiksizliğini kontrol eder.
    • Veri etiketlerinin doğru olup olmadığını ve veri setindeki olası önyargıları tespit eder.
    • Örnek Test Senaryoları:
      1. Görüntü tanıma modelinde, etiketlenmiş görüntülerin doğru kategoriye ait olup olmadığını kontrol etmek.
      2. Doğal dil işleme modelinde, metin verilerindeki yazım hatalarını ve tutarsızlıkları tespit etmek.
  • Veri Çeşitliliği Testleri:
    • Modelin farklı veri dağılımlarına ve senaryolara karşı performansını değerlendirir.
    • Modelin, eğitim verilerinde az rastlanan veya hiç görülmeyen durumlara karşı nasıl tepki verdiğini test eder.
    • Örnek Test Senaryoları:
      1. Otonom araç modelinde, farklı hava koşullarında (yağmur, kar, sis) sürüş performansını test etmek.
      2. Öneri sisteminde, farklı kullanıcı demografilerine ve ilgi alanlarına sahip kullanıcılar için öneri doğruluğunu karşılaştırmak.

2. Model Odaklı Testler

Model odaklı testler, YZ modelinin yapısını, algoritmasını ve genel performansını değerlendirir.

  • Doğruluk ve Performans Testleri:
    • Modelin tahminlerinin doğruluğunu ve hata oranını ölçer.
    • Modelin işlem hızını, kaynak kullanımını ve ölçeklenebilirliğini değerlendirir.
    • Örnek Test Senaryoları:
      1. Sınıflandırma modelinde, doğruluk (accuracy), kesinlik (precision), geri çağırma (recall) ve F1 skoru gibi metrikleri ölçmek.
      2. Tahmin modelinde, ortalama karesel hata (MSE) veya ortalama mutlak hata (MAE) gibi hata metriklerini hesaplamak.
  • Genelleme Testleri:
    • Modelin, eğitim verilerinde görülmeyen yeni verilere karşı ne kadar iyi genelleme yaptığını test eder.
    • Modelin aşırı öğrenme (overfitting) veya yetersiz öğrenme (underfitting) sorunları olup olmadığını tespit eder.
    • Örnek Test Senaryoları:
      1. Görüntü tanıma modelini, eğitim verilerinde bulunmayan yeni nesnelerin görüntüleriyle test etmek.
      2. Doğal dil işleme modelini, eğitim verilerinde kullanılmayan farklı cümle yapıları ve kelime dağarcığıyla test etmek.

3. Davranış Odaklı Testler

Davranış odaklı testler, YZ modelinin gerçek dünya senaryolarında nasıl davrandığını ve kullanıcılarla nasıl etkileşim kurduğunu değerlendirir.

  • Etik Testler:
    • Modelin önyargılı veya ayrımcı davranışlar sergileyip sergilemediğini kontrol eder.
    • Modelin, etik kurallara ve toplumsal değerlere uygun kararlar alıp almadığını değerlendirir.
    • Örnek Test Senaryoları:
      1. İşe alım modelinde, cinsiyet, ırk veya yaş gibi faktörlere dayalı ayrımcılık olup olmadığını test etmek.
      2. Kredi puanlama modelinde, farklı sosyoekonomik gruplara karşı adil olup olmadığını değerlendirmek.
  • Güvenlik Testleri:
    • Modelin kötü niyetli saldırılara ve manipülasyonlara karşı ne kadar güvenli olduğunu test eder.
    • Modelin veri sızıntısı veya yetkisiz erişim gibi güvenlik açıklarına sahip olup olmadığını tespit eder.
    • Örnek Test Senaryoları:
      1. Otonom araç modelini, trafik işaretlerini yanıltıcı şekilde değiştirerek veya engelleyerek test etmek.
      2. Sohbet robotunu, kötü niyetli sorular veya komutlarla manipüle etmeye çalışmak.

Test Sürecinde Dikkat Edilmesi Gerekenler:

  • Test verilerinin çeşitliliği ve gerçekçiliği.
  • Test ortamının ve senaryolarının dikkatli bir şekilde tasarlanması.
  • Test metriklerinin doğru seçimi ve yorumlanması.
  • İnsan denetimi ve geri bildirim mekanizmalarının kullanılması.
  • Sürekli test ve izleme süreçlerinin uygulanması.

YZ testleri, karmaşık ve sürekli gelişen bir alandır. Bu nedenle, test yöntemleri ve araçları da sürekli olarak güncellenmeli ve geliştirilmelidir.

Wednesday, March 12, 2025

API Testleri: Yazılım Kalitesinin Temel Taşı (Örneklerle)

API'ler (Uygulama Programlama Arayüzleri), yazılım sistemlerinin birbirleriyle iletişim kurmasını sağlayan kritik bileşenlerdir. Bu nedenle, API'lerin doğru ve güvenilir bir şekilde çalıştığından emin olmak, yazılım kalitesi için hayati önem taşır. API testleri, bu doğruluğu ve güvenilirliği sağlamak için yapılan testlerdir.

API Testlerinin Önemi

  • Erken Hata Tespiti: API testleri, hataların erken aşamalarda tespit edilmesini sağlayarak geliştirme maliyetlerini düşürür.
  • Güvenilirlik: API'lerin doğru çalıştığından emin olarak sistemlerin güvenilirliğini artırır.
  • Güvenlik: API'lerdeki güvenlik açıklarını tespit ederek sistemlerin güvenliğini sağlar.
  • Performans: API'lerin performansını ölçerek sistemlerin verimli çalışmasını sağlar.
  • Entegrasyon: Farklı sistemlerin birbirleriyle sorunsuz bir şekilde entegre olmasını sağlar.

API Test Türleri ve Örnekleri

  1. Fonksiyonel Testler:
    • API'nin beklenen işlevleri doğru bir şekilde yerine getirip getirmediğini kontrol eder.
    • Örnek 1: Bir e-ticaret API'sinde, doğru ürün ID'si ile yapılan bir GET isteğinin, beklenen ürün bilgilerini döndürüp döndürmediğini test etmek.
    • Örnek 2: Bir kullanıcı kayıt API'sinde, geçersiz bir e-posta adresi ile yapılan bir POST isteğinin, uygun hata mesajını döndürüp döndürmediğini test etmek.
  2. Performans Testleri:
    • API'nin hızını, yanıt süresini, kaynak kullanımını ve kararlılığını ölçer.
    • Örnek 1: Bir hava durumu API'sine, aynı anda 1000 kullanıcıdan gelen istekleri simüle ederek, API'nin yanıt süresini ve sunucu yükünü ölçmek.
    • Örnek 2: Bir dosya yükleme API'sine, büyük boyutlu dosyalar göndererek, API'nin yük altında nasıl performans gösterdiğini test etmek.
  3. Güvenlik Testleri:
    • API'deki güvenlik açıklarını (örneğin, yetkisiz erişim, veri sızıntısı) tespit eder.
    • Örnek 1: Bir kullanıcı giriş API'sine, SQL enjeksiyonu saldırısı yaparak, API'nin veritabanına yetkisiz erişimi önleyip önlemediğini test etmek.
    • Örnek 2: Bir API'nin, hassas kullanıcı verilerini (örneğin, kredi kartı bilgileri) şifrelenmemiş olarak gönderip göndermediğini test etmek.
  4. Güvenilirlik Testleri:
    • API'nin kararlılığını ve tutarlılığını test eder.
    • Örnek 1: Bir API'yi, 24 saat boyunca sürekli olarak çağırarak, API'nin kesintisiz çalıştığını ve hata vermediğini test etmek.
    • Örnek 2: Bir API'nin, farklı giriş parametreleri ile tutarlı sonuçlar döndürüp döndürmediğini test etmek.
  5. Birim Testleri:
    • API'nin tek tek bileşenlerinin (örneğin, fonksiyonlar, metotlar) doğru çalıştığını test eder.
    • Örnek 1: Bir API'deki bir fonksiyonun, doğru girişlerle doğru sonuçlar döndürüp döndürmediğini test etmek.
    • Örnek 2: Bir API'deki bir metodun, beklenen istisnaları (exceptions) doğru bir şekilde fırlatıp fırlatmadığını test etmek.
  6. Entegrasyon Testleri:
    • API'nin diğer sistemlerle (örneğin, veritabanları, harici servisler) doğru bir şekilde entegre olup olmadığını test eder.
    • Örnek 1: Bir API'nin, bir veritabanından doğru verileri okuyup yazabildiğini test etmek.
    • Örnek 2: Bir API'nin, bir ödeme sistemi API'si ile doğru bir şekilde iletişim kurabildiğini test etmek.

API Test Araçları

  • Postman: API testleri için popüler ve kullanıcı dostu bir araçtır.
  • JMeter: Performans testleri için yaygın olarak kullanılan açık kaynaklı bir araçtır.
  • SoapUI: SOAP ve REST API'lerini test etmek için kullanılan bir araçtır.
  • Karate DSL: API otomasyonu için açık kaynaklı bir araçtır.
  • Rest Assured: Java tabanlı REST API testleri için kullanılan bir kütüphanedir.

API Test Stratejisi

  • Test senaryolarını ve test verilerini dikkatlice planlayın.
  • Testleri otomatikleştirerek sürekli test yapılmasını sağlayın.
  • Test sonuçlarını düzenli olarak analiz edin ve raporlayın.
  • Geri bildirimleri dikkate alarak API'yi sürekli olarak iyileştirin.

Mobil Uygulama Yazılım Testlerinde En Sık Karşılaşılan Hata Türleri: Kullanıcı Deneyimi ve Cihaz Uyumluluğu Odaklı Sorunlar

Mobil uygulamalar, günlük hayatımızın ayrılmaz bir parçası haline geldi. Ancak, farklı işletim sistemleri, cihaz modelleri ve ekran boyutları gibi faktörler nedeniyle, mobil uygulamalarda çeşitli hataların ortaya çıkması kaçınılmazdır. Bu hatalar, kullanıcı deneyimini olumsuz etkileyebilir, uygulamanın işlevselliğini bozabilir ve hatta kullanıcıların uygulamayı terk etmesine neden olabilir. Bu nedenle, mobil uygulama yazılım testleri, hataların erken tespiti ve giderilmesi için kritik öneme sahiptir.

En Sık Karşılaşılan Hata Türleri ve Etkileri

Mobil uygulama yazılım testlerinde en sık karşılaşılan hata türleri şunlardır:

  • Uyumluluk Hataları:
    • Farklı işletim sistemleri (iOS, Android), cihaz modelleri ve ekran boyutlarında uygulamanın düzgün çalışmamasıdır.
    • Örneğin, bir Android uygulamasının bazı cihazlarda çökmesi veya iOS uygulamasının farklı ekran boyutlarında bozuk görünmesi.
    • Bu hatalar, uygulamanın geniş bir kullanıcı kitlesine ulaşmasını engelleyebilir.
  • Performans Hataları:
    • Uygulamanın yavaş çalışması, aşırı pil tüketmesi veya çok fazla bellek kullanmasıdır.
    • Örneğin, uygulamanın açılış süresinin uzun olması veya karmaşık işlemler sırasında donması.
    • Performans sorunları, kullanıcıların uygulamayı kullanmaktan vazgeçmesine neden olabilir.
  • Kullanılabilirlik Hataları:
    • Uygulamanın kullanıcı dostu olmaması, karmaşık arayüzler veya anlaşılması zor navigasyonlar içermesidir.
    • Örneğin, butonların çok küçük olması veya menülerin karmaşık bir şekilde düzenlenmesi.
    • Kullanılabilirlik sorunları, kullanıcıların uygulamayı etkili bir şekilde kullanmasını zorlaştırır.
  • Fonksiyonel Hatalar:
    • Uygulamanın temel işlevlerinin (örneğin, giriş, kayıt, ödeme) doğru çalışmamasıdır.
    • Örneğin, kullanıcının giriş yapamaması veya ödeme işleminin başarısız olması.
    • Fonksiyonel hatalar, uygulamanın amacına ulaşmasını engeller ve kullanıcıların güvenini sarsar.
  • Ağ Bağlantısı Hataları:
    • Uygulamanın ağ bağlantısı kesildiğinde veya zayıf olduğunda düzgün çalışmamasıdır.
    • Örneğin, uygulamanın çevrimdışı modda çalışmaması veya verilerin senkronize edilememesi.
    • Ağ bağlantısı sorunları, kullanıcıların uygulamayı her zaman ve her yerde kullanmasını engeller.
  • Güvenlik Hataları:
    • Uygulamanın güvenlik açıklarının (örneğin, veri sızıntısı, yetkisiz erişim) bulunmasıdır.
    • Örneğin, kullanıcı verilerinin şifrelenmemiş olarak saklanması veya uygulamanın kötü amaçlı yazılımlara karşı savunmasız olması.
    • Güvenlik sorunları, kullanıcıların gizliliğini ve güvenliğini tehlikeye atar.

Hata Tespiti ve Giderme Süreci

Mobil uygulama yazılım testleri, bu hataların erken tespiti ve giderilmesi için çeşitli yöntemler kullanır. Bunlar arasında şunlar yer alır:

  • Fonksiyonel Testler: Uygulamanın işlevlerinin doğru çalışıp çalışmadığını kontrol eder.
  • Performans Testleri: Uygulamanın hızını, pil tüketimini ve bellek kullanımını ölçer.
  • Uyumluluk Testleri: Uygulamanın farklı cihazlarda ve işletim sistemlerinde nasıl çalıştığını test eder.
  • Kullanılabilirlik Testleri: Kullanıcıların uygulamayı ne kadar kolay kullanabildiğini değerlendirir.
  • Güvenlik Testleri: Uygulamanın güvenlik açıklarını tespit eder.

Web Sitesi Yazılım Testlerinde En Sık Karşılaşılan Hata Türleri: Kullanıcı Deneyimini ve Güvenliği Tehdit Eden Unsurlar

Web siteleri, günümüz dijital dünyasında işletmeler, kurumlar ve bireyler için vazgeçilmez bir araç haline gelmiştir. Ancak, karmaşık yapıları ve sürekli değişen teknolojiler nedeniyle, web sitelerinde çeşitli hataların ortaya çıkması kaçınılmazdır. Bu hatalar, kullanıcı deneyimini olumsuz etkileyebilir, güvenlik açıklarına yol açabilir ve hatta işletmelerin itibarını zedeleyebilir. Bu nedenle, web sitesi yazılım testleri, hataların erken tespiti ve giderilmesi için kritik öneme sahiptir.

En Sık Karşılaşılan Hata Türleri ve Etkileri

Web sitesi yazılım testlerinde en sık karşılaşılan hata türleri şunlardır:

  • Fonksiyonel Hatalar:
    • Web sitesinin temel işlevlerinin (örneğin, kayıt, giriş, arama, ödeme) doğru çalışmamasıdır.
    • Örneğin, bir e-ticaret sitesinde sepete ürün ekleme veya ödeme işlemlerinin başarısız olması, kullanıcıların alışveriş yapmasını engelleyerek satış kaybına neden olabilir.
    • Bir bankacılık web sitesinde para transferi işleminin başarısız olması, kullanıcıların finansal işlemlerini gerçekleştirememesine ve güven kaybına yol açabilir.
  • Kullanılabilirlik Hataları:
    • Web sitesinin kullanıcı dostu olmaması, karmaşık arayüzler, anlaşılması zor navigasyonlar veya okunması güç içerikler içermesidir.
    • Örneğin, mobil cihazlarda düzgün görüntülenmeyen veya yavaş yüklenen sayfalar, kullanıcıların web sitesini terk etmesine neden olabilir.
    • Karmaşık menüler veya arama fonksiyonlarının yetersizliği, kullanıcıların aradıkları bilgilere ulaşmasını zorlaştırabilir.
    • Kullanıcıların web sitesinde gezinirken kaybolması veya istedikleri işlemleri gerçekleştirememesi, olumsuz bir kullanıcı deneyimi yaratır.
  • Performans Hataları:
    • Web sitesinin yavaş yüklenmesi, çökmesi veya aşırı kaynak tüketmesidir.
    • Örneğin, yüksek trafik altında web sitesinin yanıt vermemesi veya uzun süre yüklenmesi, kullanıcıların sabrını zorlar ve web sitesini terk etmelerine neden olabilir.
    • Yavaş yükleme süreleri, arama motoru sıralamalarını da olumsuz etkileyebilir.
    • Aşırı kaynak tüketimi, sunucu maliyetlerini artırabilir ve web sitesinin genel performansını düşürebilir.
  • Güvenlik Hataları:
    • Web sitesinin güvenlik açıklarının (örneğin, SQL enjeksiyonu, XSS, CSRF) bulunmasıdır.
    • Örneğin, kullanıcı verilerinin yetkisiz erişime açık olması veya hassas bilgilerin şifrelenmemiş olarak saklanması, ciddi güvenlik ihlallerine yol açabilir.
    • Güvenlik açıkları, kötü niyetli kişilerin web sitesine sızmasına ve kullanıcı verilerini çalmasına veya değiştirmesine olanak tanır.
    • Güvenlik ihlalleri, işletmelerin itibarını zedeler ve yasal sorunlara yol açabilir.
  • Uyumluluk Hataları:
    • Web sitesinin farklı tarayıcılar, cihazlar veya işletim sistemlerinde düzgün çalışmamasıdır.
    • Örneğin, bir tarayıcıda düzgün görüntülenen bir sayfanın başka bir tarayıcıda bozuk görünmesi, kullanıcıların web sitesini doğru şekilde kullanamamasına neden olabilir.
    • Mobil cihazlarda uyumsuzluk, mobil kullanıcıların web sitesine erişimini kısıtlar.
    • Farklı işletim sistemleri ve ekran çözünürlüklerinde uyumsuzluk, web sitesinin tutarsız görünmesine ve çalışmasına neden olabilir.
  • Kodlama Hataları:
    • Söz dizimi hataları, mantıksal hatalar ve çalışma zamanı hataları.
    • Örneğin, yanlış değişken kullanımı veya hatalı döngüler, web sitesinin beklenmedik şekilde davranmasına veya çökmesine neden olabilir.
    • Kodlama hataları, güvenlik açıklarına da yol açabilir.
  • Test Eksiklikleri:
    • Yetersiz test kapsamı ve eksik test senaryoları.
    • Örneğin, web sitesinin tüm özelliklerinin veya işlevlerinin test edilmemesi, bazı hataların gözden kaçmasına neden olabilir.
    • Eksik test senaryoları, kullanıcıların karşılaşabileceği tüm durumları kapsamayabilir.

Hata Tespiti ve Giderme Süreci

Web sitesi yazılım testleri, bu hataların erken tespiti ve giderilmesi için sistematik bir süreç izler. Bu süreç genellikle şu adımları içerir:

  1. Test Planlaması: Test edilecek özelliklerin, test senaryolarının ve test ortamının belirlenmesi.
  2. Test Tasarımı: Test senaryolarının oluşturulması ve test verilerinin hazırlanması.
  3. Test Uygulaması: Test senaryolarının çalıştırılması ve sonuçların kaydedilmesi.
  4. Hata Raporlama: Tespit edilen hataların detaylı olarak raporlanması.
  5. Hata Giderme: Geliştiricilerin hataları düzeltmesi ve yeniden test yapılması.
  6. Test Tamamlama: Tüm testlerin tamamlanması ve test raporunun hazırlanması.

Sunday, March 24, 2019

Özet Olarak Yazılım Testi Nedir




Yazılım sistemlerinin hedeflenen kullanım ortamında tam, doğru ve tutarlı olarak müşteri istek ve beklentilerine uygun çalıştığının kontrolüdür.

Friday, March 22, 2019

Ürünü En Hızlı Şekilde Nasıl Test Edebilirim?

Projelerin doğası gereği bazen regresyon testi kapsamında bazen sistemin canlıya alınmasında bazen de müşteriye yapılacak sunum öncesinde, ürünün beklendiği gibi çalıştığının doğrulamasının yapılması gerekmektedir.

Tabii ki en güvenilir yöntem %100 kapsama oranına sahip testlere sahip olmak ve test otomasyonu kullanarak tüm testleri baştan sona çalıştırmaktır. Fakat çoğu zaman bu rüya-senaryoyu gerçekleştirme imkanı olmaz. 

Böyle bir ihtiyaç varsa şu kararın verilmesi gerekir; ürünün hangi yetenekleri / isterleri daha kritiktir?
Tüm testleri koşturamayacağımıza göre risk temelli test yaklaşımı ile hangi yeteneklere odaklanmamız gerektiğini belirlememiz gerekiyor.

Bankacılık uygulamalarında bu yetenekler farklıyken, stok yönetim yazılımlarda çok daha başka yetenekler önemlidir.

En kritik yetenekler belirlendikten sonra, kritiklik derecesi yüksekten aşağıya doğru sıralanır ve en üstteki yeteneğe en çok zaman ayrılırken, listenin altına doğru inildikçe test süresi de kısaltılır.
Örneğin toplam 10 yetenek varsa ve test için de toplam 20 saat süre ayrılmışsa, 1. yetenek için 3 saat, 2. için 2,5 saat, 3. için 2 saat, ..., 10. için 20 dakika, şeklinde bir planlama yapılabilir.

Burada önemli olan bir diğer konu da testi yapacak kişinin o alandaki bilgisidir. Test altındaki yetenekle ilgili 10 yıl deneyimi olan bir test mühendisinin, 3 yıl deneyimi olan birine göre çok daha etkin test yapacağı da unutulmamalıdır. Test yöneticisinin bu durumu da göze alması önemlidir.

Thursday, March 21, 2019

STANAG Doğrulama

Askeri (çoğunlukla NATO) projelerde sözleşmelerde tanımlı STANAG'lar kullanılarak ürünlerin geliştirilmesi ve doğrulanması gerekmektedir.

STANAG, Standardization Aggrement'in kısaltmasıdır ve tüm listeye buradan ulaşabilirsiniz; fakat çoğuna doğrudan erişim yoktur.

STANAG kullanılarak ürünleri geliştirmenin ve test etmenin güzel tarafı; istenen her yeteneğin detaylı olarak tanımlanmış olması, muğlaklıkların olmamasıdır. 

Zor tarafı ise, kimi STANAG 300-400 sayfa olabilmekte kimi zaman da diğer standartlara referanslar vererek binlerce sayfaya çıkabilmektedir. (Her zaman olduğu gibi) Bu zorluk aynı zamanda bir de fırsat yaratmaktadır. Sektörde bu kadar kalın dokümanları okumaya ve öğrenmeye hevesli çok kimse olmadığı için herhangi bir STANAG ailesini iyi öğrenmeniz durumunda hem yurtiçi savunma sanayinde hem de NATO ve diğer askeri oluşumlara yönelik yazılım yapan yurtdışı firmalarda kolaylıkla iş bulabilirsiniz. Fakat tekrar söyleyeyim; bu dokümanlara hâkim olmak kolay değildir. Çoğunlukla bu dokümanlara uygun olarak geliştirilen ürünler test edildiği zaman standartın ne anlattığı daha iyi anlaşılır olmaktadır.

STANAG kullanarak doğrulama yaparken dikkat edilmesi gereken konu, hazırlanacak test senaryolarının birebir standarttaki maddelerle eşleştirilmesidir; bir senaryo birden çok maddeyi içerebilir. Ve tabii her zaman olduğu gibi, izlenebilirlik matrisini de doğru ve detaylı hazırlamak önemlidir.

Sunday, March 17, 2019

Başlamış bir Projeye Atanan Test Mühendisinin Yapması Gerekenler

Bir test mühendisinin projenin sözleşme aşamasında projeye dahil olması en ideal durumdur. Çünkü, henüz sözleşme aşamasında gereksinimleri inceleyebilecek, gözden geçirip yorum verebilecektir. Böylece projenin sonraki aşamalarında ortaya çıkabilecek eksiklikleri çok daha önceden tespit edebilecektir.

Ancak kimi zaman, projenin ortasından projeye dahil olmak durumunda kaldığımız çok oluyor. Gereksinimlere / ürüne / sürece hızlı bir şekilde hâkim olunabilmesi için gerekli adımları aşağıda listeledim. Bu neden önemli? Çünkü projenin kabul aşaması yaklaştığında, daha henüz sözleşmeyi / gereksinimleri bile okumamış iseniz, (muhtemelen) bir başkasının hazırladığı test senaryolarının geçerliliğinden, tamlığından, doğruluğundan asla emin olamayacaksınız demektir. "Gereksinim İzlenebilirlik Tablosu'na bakarım, her gereksinim en az bir teste atanmışsa, bence testler tamdır, doğrudur" diyemezsiniz. Evet, bu gereklidir ama yeterli şart değildir. Belki testler gereksinimlerde bahsedilen durumları karşılamıyordur? Bu riski almaya gerek yok.


  1. İlk olarak mutlaka sözleşme okuyun. En kapsamlı sözleşme bile 50 sayfayı geçmez. Bir günde okur, 2-3 günde tamamına hâkim olursunuz.
  2. Sözleşmede belirtilen her maddenin (ister yönetimsel ister teknik maddeler olsun) bir proje çıktısı ile karşılandığından emin olun. Örneğin, bir Test ve Değerlendirme Ana Planı ve bir de Yazılım Test Planı istenmişse, sizden önce bunların hazırlanmış olduğundan emin olun. Aylık / haftalık proje ilerlerme raporları isteniyorsa, bunların formatının, içeriklerinin belirlendiğinden emin olun; yoksa hazırlayın.
  3. Sözleşme maddeleri ile Sistem Gereksinimleri arasında izlenebilirlik kurulduğundan, her bir sözleşme maddesinde belirtilen isterin, sistem gereksinim(ler)i tarafından gerçekten karşılandığından emin olun; yoksa sonradan çok sorun çıkacaktır.
  4. Geri kalan dokümantasyon için V döngüsünü uygulayın.
  5. Ürüne en hızlı şekilde adapte olmanın yolu:
    1. Hazır test dokümanları ile sistemi test etmek,
    2. Hazır kullanım dokümanı ile sistemi kullanmaktır.
    3. Ayrıca, (proje ekibine, direktörlere, müşteriye,...) arada bir ürünün tanıtımını yapmak da çok faydalı olacaktır.
  6. Asla varsayım yapmayın: "Nasıl olsa benden öncekiler bunları yapmıştır, dokümanları hazır, gözden geçirme de yapılmış, demek ki bunlar doğrudur" diye düşünmeyin !!!
  7. Kim hazırlamış olursa olsun, kime atanmış olursa olsun, sizin işinizi etkileyen konularda kimseye güvenmeyin. Çünkü onlar da projeden ayrılıp gittiklerinde, aslında bu işlerin kısmen veya tamamen eksik olduğunu görebilirsiniz. Bu durumda da o işleri kim yapacak? :) Evet, bildiniz; siz yapacaksınız.

Thursday, March 7, 2019

Kullanıcı Tanıma Anketi (Sistem Analizi)

Geliştirilmesi planlanan yazılım sistemlerinin amacına uygun, yüksek performanslı, etkinliği yüksek ve müşteri beklentilerinin ötesine geçmesini sağlamanın en kolay yolu detaylı bir sistem analizinin yapılmasıdır.

Sistem Altsistem Tanımları dokümanının Fonksiyonel Gereksinimler kısmında sisteminin "ne yapması" gerektiği belirtilirken "Sistem Karakteristikleri" başlıklarında da yapacağı işi "nasıl yapması" gerektiği belirtilir.

Pek çok projede "Sistem Karakteristikleri" başlıkları bütçe yetersizliği, zaman darlığı veya yeterli uzmanlık olmaması sebepleri ile U/D, N/A, DSB gibi kısaltmalar konularak boş bırakılır.

Sistem kullanıma alındıktan sonra da kullanılabilirlik, erişebilirlik, performans, idame edilebilirlik, gibi konularda ardı ardına sorunlar yaşanmaya başlanır.

Standartlara uygun proje geliştiren şirketler çoğunlukla (kısmen de olsa) "Sistem Karakteristikleri"ni belirlemeye çalışmaktadır. Ancak daha düşük bütçeyle iş yapan şirketlerin bu tarz belgeler oluşturma imkanı olmayabilir.

Bu sebeple, bu tarz şirketlerin kullanımı için, son kullanıcıları tanımaya yönelik soruları aşağıda listeledim. Bu sorulara ek sorular da eklenebilir. Sorulara verilecek cevaplara uygun olarak geliştirilecek yazılım sistemlerinin çok daha az hata içeren ve yüksek müşteri memnuniyeti içeren sistemler haline geleceğine emin olabilirsiniz.

Kullanıcı Beklentileri: 

  • Kullanıcıların sistemden beklentileri nelerdir?
  • Mevcut durumda ne tip işlerde ne tip maliyetler / zararlar oluyor?
  • Kullanıcıların bilgisayar okuryazarlığı hangi seviyededir?
  • Kullanıcılar içinde bedensel / zihinsel engeli olanlar var mı? Ne tür engelleri var?
  • Sistem tek bir yerleşke içinde mi kullanılacak yoksa geniş bir alanda mı?

Kullanıcıları Tanıma:

  • Toplam kaç kullanıcı olacak? Önümüzdeki 5 yılda kullanıcı sayısında tahminen kaç kişilik bir artış olur?
  • Hangi rollerde kullanıcılar olacak? Yönetici, sistem yöneticisi, veri giriş, raporlama / sunum, …
  • Rollere göre kullanıcı sayıları nedir?
  • Rollere göre kullanıcılar hangi gün ve saatlerde sistemi kullanacaklar?
  • Rollere göre hangi kullanıcı sistemi ne kadar süre kullanacak?
  • Rollere göre kullanıcıların en stresli / yoğun / yorucu iş akış(lar)ı nelerdir?
  • Rollere göre kullanıcıların çalışma ortamı kısıtları var mı? Sahada kullanım gibi.
  • Rollere göre kullanıcı için en kritik / beklemeye tahammül edemeyeceği iş akış(lar)ı nelerdir?
  • Kullanıcıların uygulama üzerinden ve/veya dosya sistemi / veritabanı üzerinden girecekleri veri tipleri nelerdir?
  • Kullanıcıların girecekleri veri dosyalarının adet ve/veya boyut sınırı var mıdır?
  • Kullanıcıların sisteme toplu halde girmeleri gereken veriler ve/veya başka bir sistemden aktarılması gereken veriler var mı?
  • İşin zorluklarını ve olası dar boğazlarını anlamak açısından bir müddet çalışma ortamında kullanıcılar ile birlikte vakit geçirmemiz mümkün mü?

Kullanıcı Eğitimi:

  • Kullanıcılara hangi konularda eğitim verilecek?
  • Eğitim hangi ortamda yapılacak?
  • Eğitim sırasında (projenin ilk aşamasında) Kullanabilirlik testi için prototip hazırlanması.
  • Toplamda hangi rolde kaç kullanıcı eğitim alacak?
  • Eğitim materyali nelerden oluşacak?

Donanım/Yazılım Altyapısını Tanıma:

Yazılım:

  • Kullanılan işletim sistem(ler)i nelerdir?
  • Kullanılan internet gezginlerinin isimleri ve versiyonları nedir?
  • İnternet Gezginleri'nde yüklü addon - pluginler var mı?
  • İnternet gezginlerinin / pluginlerin güncellenmesine izin verilmekte midir?
  • Kullanıcı doğrulama için LDAP benzeri bir sistem var mıdır?

Donanım:

  • Sistemin kullanılacağı tesis(ler)in fiziksel altyapısı nedir? Kablosuz iletişim gerekli ise, ortam uygun mudur?
  • Kullanıcıların sistemi kullanacakları donanımın (bilgisayar, tablet, telefon) özellikleri nelerdir? Rollere göre hangi tip donanımlar kullanılacaktır?

Kalite Karakteristikleri:

  • Sistemin herhangi bir çevresel şart kısıtı var mıdır? Sıcaklık, nem, toz, gürültü, sarsıntı, ...
  • Sistemin kullanılacağı tesis(ler)in donanım altyapısı nedir? Ağ hızı, sunucu sayısı, elektrik altyapısı, jeneratör / UPS varlığı, …
  • Sistemin Genişleyebilirlik ihtiyacı var mı? Sınırları nedir?
  • Sistemin Yedekleme ihtiyacı var mı? Nasıl bir süreç düşünülüyor?
  • Sistemin uyması gereken bir Sertifikasyon kısıtı var mı?
  • Sistemin birlikte çalışması gereken (Uyumluluk) başka sistemler var mı? Arayüzler ve veri tipleri nedir?
  • Sistemin Kaynak Kullanım kısıtları var mı? CPU, bellek, disk alanı, ağ kapasitesi kullanım sınırları gibi.
  • Sistemin Afet Kurtarma özelliği ihtiyacı var mı?
  • Sistemin Efficiency (belirli bir yük için kaynak tüketimi) kısıtı var mı?
  • Sistemin Effectiveness (harcanan efor sonrasında elde edilen performans) kısıtı var mı? Bir işlemin en fazla 3 adımda yapılması gibi.
  • Sistemin uyması gereken bir yasal mevzuat / standart var mı? Nedir?
  • Sistemin Performans (tepki süreleri) kısıtı var mı? Hangi yük altında bu süreler nedir?
  • Sistemin Platform Uyumluluk kısıtı var mı? Hangi platformlar?
  • Sistemin veri / bilgi Gizliliği kısıtı var mı? Ne tür veriler, hangi roldeki kullanıcılar?
  • Sistemin Kurtarılabilme (Recovery / recoverability) kısıtı var mı? Ölümcül hata durumunda en geç 5 dakikada sistemin faal hale gelmesi gibi.
  • Sistemin Bakımı için izin verilen gün / saatler nelerdir?
  • Sistem için Hizmet Seviyesi Anlaşma şartları nelerdir?

Kullanıcı Destek:

  • Kullanıcıların eğitim sonrası sorunlarında hangi yöntem ile yardımcı olunacak?
  • Bir Destek Merkezi kurulması ihtiyacı var mı?
  • Destek hangi ortam üzerinden sağlanacak? E-posta, telefon, video konferans, …
  • Soru ve hata bildirimleri nerede kayıt altına alınacak?

Wednesday, November 21, 2018

Mikro ve Küçük Ölçekli Yazılım Firmaları için Test Stratejileri

24.06.2018'de güncellenen KOBİ tanımına göre Mikro Ölçekli firmalar çalışan personel sayısı 10'dan az olan ve Küçük Ölçekli firmalar da çalışan personel sayısı 50'den az olan firmalardır.

Nakit akışı, yüksek ve düzenli kâr bırakan pazarlara erişim, çalışan motivasyonunu yüksek tutamamak gibi yönetim seviyesi zorluklar bir yana, az sayıdaki personelin pek çok farklı faaliyeti yoğun ve fazla mesai yaparak gerçekleştirmeleri sonucu hatalar yapılabilmekte, bu da nihai ürünün toplam kalitesinde zayıflığa ve müşteri memnuniyetsizliğine sebep olabilmektedir.

Bir soru sorarak başlayalım: 
Mikro ve küçük ölçekli yazılım firmalarının nihai müşteri memnuniyetlerini nasıl yükseltebiliriz?
Şunu belirtmekte fayda var: bu firmaların CMMI, SPICE, ISO 12207 gibi ağır metodolojilere uymaya yetecek kaynakları çoğunlukla olmayacaktır. Hatta bazen çevik yöntemleri bile uygulamakta zorlanabilirler.

Tümdengelim yaparsak; 

  • Müşteriler ne kadar az hata ile karşılaşırlarsa o kadar "Düzelt-Test Et-Yayınla" döngüsü işletilir,
  • Ürünün kullanımı ne kadar kolaysa o kadar az eğitim / kullanım desteği verilmesi gerekecektir,
  • Personel teslimat sonrası ne kadar az hata ve destek ile uğraşırsa, bir sonraki ürünü geliştirmek için daha çok zamanı olacaktır.
"Test Mühendisliğinde Olası Riskler ve Alınabilecek Tedbirler" başlıklı yazımda belirttiğim pek çok durum firmanızın işleri zorlaştırıyor olabilir ancak sorunun özü kısıtlı kaynaklar sebebiyle firmaların Test ve dokümantasyona yeterince zaman harcayamamalarıdır.

Aşağıda, bu sorunu çözmeye katkı sağlayabileceğini düşündüğüm maddeleri veriyorum. Firmanızın kaynaklarına ve yapısına en uygun yöntemi yine kendiniz belirleyebilirsiniz. Bunların uygulanması konusunda veya firmanızın yapısına özel sorularınız olursa da yardımcı olmaya çalışırım.




  • PERSONEL:
    1. İmkanınız varsa, mesleği test mühendisliği olan personel istihdam edin. Yazılımı geliştirenler (ve müşteriler) test yapmaktan genelde hoşlanmaz, bazen üstünkörü yaparlar, genelde de sadece "happy path"i test ederler. 1 kişi bile olsa istihdam edeceğiniz test mühendisi, müşteriden dönme ihtimali olan hataları çok büyük oranda azaltacaktır. Eğitim dokümantasyonu, müşteri desteği vermesi de cabası; çünkü sistemin genelini (çoğu zaman) en iyi bilen kişi test mühendisidir. 
    2. Sürekli olarak test mühendisi istihdam edemiyorsanız, stajyer / yarı-zamanlı çalışacak öğrencilere test yaptırabilirsiniz. Fakat bu personelin "test  mühendisi bakış açısı" olmadığından bu konuda eğitim almaları gerekecektir, bir danışmanın vereceği 2 günlük bir eğitim bile çok fark yaratacaktır. Aksi durumda çok fayda sağlanamayabilir. 
    3. Sürekli veya yarı zamanlı personel istihdamı da sizin için mümkün değilse, yine mesleği test mühendisliği olan bir danışman sadece ihtiyaç zamanlarında size destek verebilir.  Bu ihtiyaç zamanları şunlar olabilir:
      • Projenin ilk aşamasında sözleşme / sistem gereksinimlerinin gözden geçirilmesi ve bir ana test planı / stratejisi hazırlanması,
      • Sistem tasarımı sonrasında sistem seviyesi test senaryolarının ("Öncelikli Senaryo") yazılması,
      • Ara teslimat dönemlerinden önce testlerin koşturulması ("Detaylı Senaryo"),
      • Nihai teslimat öncesinde tüm senaryoların koşturulması.
"PERSONEL" konusunu çözüme ulaştırdıysanız;
  • TEST SÜRECİ: 
    1. Mutlaka gereksinim yönetimi yapılmalı. Böylece hiçbir istek/gereksinim göz kaçamaz.
    2. Müşterinin en çok önem verdiği, olmazsa olmaz dediği, beklemeye tahammül edemeyeceği işlevlerin neler olduğunu listeleyin. Bu işlevler belirlenirken kullanıcı ile empati kurabilmek çok önemlidir.
    3. Risk temelli test yaklaşımı ile bu listedeki maddelerin tamamını üst seviyede test eden bir senaryo oluşturun ("Öncelikli Senaryo").
    4. Her teslimat öncesi "Öncelikli Senaryo"yu mutlaka çalıştırın.
    5. "Öncelikli Senaryo"yu alt parçalara ayırıp detaylı senaryolar hazırlayın ("Detaylı Senaryo").
    6. Geri kalan kısımlar için "İkincil Senaryolar" oluşturun.
    7. Teslimatları ayda bir yaptığınızı varsayarsak, haftada 1 kere "Öncelikli Senaryo", 2 haftada 1 "Detaylı Senaryo", ayda 1 kere de "İkincil Senaryolar"ı koşturabilirsiniz.
      • "Ürün bitsin, testleri sonra yaparız" diye düşünmeyin, böyle bir yaklaşım kaosa davetiye çıkartmaktır.
    8. Eğer resmi bir "Kabul Testi" yapılacaksa, "Kabul Testi Nedir, Nelere Dikkat Etmek Gerekir" başlıklı yazımda belirttiklerim uygulanmalı.
  • HATA YÖNETİMİ:

    1. Proje ilerledikçe hata sayıları da doğal olarak artacaktır.
    2. Eğer müşteriye bir ara ürün / demo ürünü teslimatı yapılmışsa, önem derecesi ne olursa olsun müşteriden gelen hata bildirimlerine öncelik verin ve en kısa zamanda ilk onları çözün ("ÖNCELİK 1").
      • Bizler için önemsiz gibi görünen hatalar, son kullanıcı gözünde çok önemli olabilir.
    3.  "Öncelikli Senaryo" ve "Detaylı Senaryo"dan bulunan hatalara 2. seviye öncelik verin ("ÖNCELİK 2").
    4. "İkincil Senaryo"dan bulunan hatalara 3. seviye öncelik verin ("ÖNCELİK 3").
    5. Firmanıza daha yüksek katma değer sağlayacak ve müşteri memnuniyetini artıracak hata çözüm sırası da doğal olarak ÖNCELİK 1 > ÖNCELİK 2 > ÖNCELİK 3 şeklindedir.
    6. Jira, Mantis veya diğer bir hata yönetim uygulaması kullanmak şarttır. Mümkünse son kullanıcıların da bu sistem üzerinde hata açabilmelerini sağlamak geri bildirim hızınızı artıracaktır. 

  • DOKÜMANTASYON:
    1. Kod içinde mutlaka "comment"ler ile neyin ne iş yaptığını belirtmek, hata düzeltme ve bakım dönemlerinde hayat kurtarıcı olmaktadır.
    2. Müşteriniz eğer formal test dokümantasyonu istiyorsa (örneğin TÜBİTAK), Mil-Std-498'i kullanabilirsiniz, ücretsizdir.
    3. Uygulamanın kurulumu ve kullanımı ile ilgili kısa da bir belgeyi tercihen web sayfası veya uygulamanın içine entegre olarak hazırlamanız, sonrasında kullanımla ilgili gelecek pek çok sorudan kurtaracaktır sizi.
    4. Ürünün kapsamlı eğitimi gerekiyorsa, ürün olgunlaştıktan sonra eğitim videosu hazırlayarak maliyeti azaltabilirsiniz.

  • ARAÇ KULLANIMI:
    1. Eğer ürününüz test otomasyonuna uygunsa, personelinizin bu konuda deneyimi varsa ve en önemlisi otomasyona alınan testlerin çok sık güncellenmesi gerekmeyecekse, test otomasyonu fayda sağlayacaktır. Ancak uyarmam gerekir: bu iş ayrı bir uzmanlık alanıdır ve kimi zaman faydadan çok zarar da verebilir.
    2. Sadece açık kaynaklı test araçlarından faydalanın. Ticari test araçları genelde fazlasıyla pahalıdır, eğitim / destek maliyeti olabilmektedir, alınan araç âtıl kalabilmektedir.
    3. Test verisi hazırlama ve kaynak kodu sık değişmeyecek kısımlar için otomasyon kodu yazılabilir. Bir kere yaparsınız, proje boyunca sizi tekrarlayan işlerden kurtarır.

Wednesday, November 14, 2018

Fonksiyonel Olmayan Gereksinimler: Uygunluk

Kullanıcıların, "normal çalışma zamanlarında" sistemin çalışabilir olduğuna güvenme derecesidir. Diğer bir deyişle, kullanıcılar normal çalışma saatlerinde sistemi kullanmak istediklerinde sistemin kullanıcı isteklerine cevap verebiliyor olması gerekmektedir.

Örnekleyecek olursak;

  • Çevrimiçi Ödeme Sistemi saat 06 ile 23 arasında kullanıma uygun olmalıdır.
  • Çevrimiçi Ödeme Sistemi 100 saatlik MTBF (Mean Time Between Failures - Arızalar Arasındaki Ortalama Süre) değerine sahip olması gerekmektedir.
  • Çevrimiçi Ödeme Sistemi, kullanıcıların isteklerinin %95'ine 15 saniye içinde cevap verebilmelidir. Geri kalan zamanlarda 20 saniye içinde cevap verebilmelidir.
  • ATM cihazı hafta içi günlerde saat 06 ile 23 arasında %99 oranında uygun olmalıdır. 
  • Sistemin yeni bir kurulumu, kurulum işlemi başlatıldıktan sonra 24 saat içinde ilk kullanıma hazır olmalıdır.
  • Sistem kullanıma kapatıldıktan sonra sistemin veritabanı yedeği 15 dakika içinde alınabilmelidir.
  • Sisteme kapatma komutu gönderildikten sonra 3 dakika içinde sistem kapanmış olmalıdır.
  • Acil durum veri silme komutu gönderildiğinde 15 saniye içinde her 3 sabit diskteki tüm veri geri kurtarılamaz şekilde silinmelidir. 

Tuesday, November 13, 2018

Fonksiyonel Olmayan Gereksinimler: Hayatta Kalabilirlik

Bir sistem arızası ortaya çıktığında yazılım sisteminin kendini toparlaması ve çalışmaya devam etmesinin ölçüsüdür.

Örnekleyecek olursak;

  • Denetleme yazılımı arıza sonrası kapanırsa kullanıcının sözleşme dosyasında yaptığı değişiklikler kurtarılmalı ve dosya arıza oluşumundan bir dakika öncesindeki duruma gelmeli.
  • Yazılımın güncellenmesi sırasında bir arıza ortaya çıkarsa yapılan tüm veri ve güncellemeler geri alınmalı ve yazılım eski haline dönmelidir.
  • Bir arıza durumu sonrasında işletime devam edilirken kullanıcıya yazılımın "güvenli mod"da çalıştığı ve tüm verinin salt okunur durumda gözden geçirmeye hazır olduğunun bilgisi verilmelidir.
  • Sistem, arızalı olduğu tespit edilen yeteneklere erişimi engellerken diğer tüm yeteneklere erişime izin vermelidir.
  • Montaj hattındaki tüm donanım bileşenleri yedekli olmalıdır, böylece herhangi bir donanım bileşeni arızalandığında montaj hattının durması engellenmelidir.

Monday, November 12, 2018

Testler Ne Zaman Biter?

Yazılım sektöründe bir süre çalışanların çok iyi bildiği gibi, yazılım ve sistem projelerinin karmaşıklık sebebiyle, test edilebilecek patikaların sayısı neredeyse sonsuzdur. Ve proje yöneticilerinin en sık sorduğu sorulardan biri "testler ne zaman biter"dir.

Öncelikle testlerin sayısının neden çok olabileceğini inceleyelim.

Örnek olarak E-Devlet giriş sayfasını kullanabiliriz.



Uygulayabileceğimiz testleri listeleyelim:

  1. T.C. Kimlik No alanı ve e-Devlet Şifresi alanını boş bırak, "Sisteme Giriş Yap" düğmesine tıkla,
  2. T.C. Kimlik No alanına geçerli değer gir ve e-Devlet Şifresi alanını boş bırak, "Sisteme Giriş Yap" düğmesine tıkla,
  3. T.C. Kimlik No alanını boş bırak ve e-Devlet Şifresi alanına geçerli değer gir, "Sisteme Giriş Yap" düğmesine tıkla,
  4. T.C. Kimlik No alanına boşluk karakteri gir ve e-Devlet Şifresi alanına boşluk karakteri gir, "Sisteme Giriş Yap" düğmesine tıkla,
  5. T.C. Kimlik No alanına geçerli değer gir ve e-Devlet Şifresi alanına boşluk karakteri gir, "Sisteme Giriş Yap" düğmesine tıkla,
  6. T.C. Kimlik No alanına boşluk karakter gir ve e-Devlet Şifresi alanına geçerli değer gir, "Sisteme Giriş Yap" düğmesine tıkla,
  7. T.C. Kimlik No alanına 500 adet karakter gir ve e-Devlet Şifresi alanına 500 adet karakter gir, "Sisteme Giriş Yap" düğmesine tıkla,
  8. T.C. Kimlik No alanına Kopyala-Yapıştır ile 10 karakterlik değer gir ve e-Devlet Şifresi alanına Kopyala-Yapıştır ile 10 karakterlik değer gir, "Sisteme Giriş Yap" düğmesine tıkla,
  9. 1-8 arasındaki testleri tekrarla, "Sisteme Giriş Yap" düğmesine tıklamak yerine klavyedeki ENTER tuşuna bas,
  10.  T.C. Kimlik No alanına geçerli bir değer gir ve e-Devlet Şifresi alanına geçerli değer gir, "Sisteme Giriş Yap" düğmesine tıkla,

Yukarıda tanımlanan 10 (aslında 17) adet teste daha pek çok test eklenebilir. 
Görüldüğü üzere sadece 2 tane alan için bile bu kadar test tanımlanabiliyorken, yüzlerce ekran ve binlerce veri giriş alanı / kontrol düğmesi içeren, birden fazla yazılım ve donanımın entegre olduğu, yedekli veritabanı sistemleri, yük dengeleyiciler, CBS yazılımları, masaüstü / web / mobil arayüzleri olan devasa bir sistemde, yapılabilecek testlerin sayısı (sonsuz olmasa bile) on binlere ulaşabilir.

Peki soru şu: Testler ne zaman biter?
  1. Atanan efor / süre bittiğinde: Proje takviminde test için ayrılan süre bittiğinde,
  2. Test durumları belirli bir başarı yüzdesine ulaştığında,
  3. Hata oranı belirli bir yüzdenin altına indiğinde,
  4. Tüm gereksinimler %100 doğrulandığında
    • Gereksinimlerin %100 doğrulanmış olmasının, geçilebilecek tüm patikalardan geçildiği anlamına gelmediğini de belirteyim.
Anlaşıldığı üzere, bir sistemi %100 test etmek hem ekonomik değil hem de kimi durumlarda mümkün değildir.
Bunun istisnası, görev-kritik yazılımlardır; hata yapması durumunda insan yaşamına ve ülke güvenliğine ciddi zararları olabilecek yazılımlar için yazılan birim testlerin %100 kapsama oranına sahip olması beklenmektedir.

Peki, madem sistemi %100 test etmek ekonomik / mümkün değil, o zaman "nasıl bir test stratejisi izlersek hem sistemi yeterli derecede test etmiş oluruz hem de hataların büyük kısmını müşteri ortamına kurulum yapılmadan önce tespit etmiş oluruz?".

Bu da bir başka yazının konusu: En Uygun Test Stratejisini Nasıl Belirleriz?

Monday, March 19, 2018

Yazılım Testi ile Sistem Testi Arasında Ne Fark Vardır?

Sistem, yazılım ürünleri ile (kimi zaman) donanım ürünlerinin birleşiminden oluşmuş yapıya verilen isimdir.
Yazılım ise sadece yazılım ürünleri ve destekleyici konfigürasyon ve veri dosyalarından oluşan yapıya verilen isimdir.

Eğer geliştirilen ürün, sadece yazılım parçalarından oluşuyorsa, bu bütüne yazılım sistemi adı da verilebilmektedir.

Test açısından bakıldığında yazılım testi ile ifade edilen;

  • yazılım seviyesi gereksinimlerin doğrulandığı,
  • normal girdiler haricinde sınır değerlerin, boş değerlerin, hatalı ve eksik değerlerin de testlere dahil edildiği,
  • testin akışının (test betiği / test durumu) sadece hedeflenen fonksiyonu test ettiği 
yapı anlaşılır.

Sistem testi dendiğinde ise;
  • sistem seviyesi fonksiyonel gereksinimler ile kalite karakteristiklerinin doğrulandığı,
  • (çok büyük çoğunlukla) sadece normal girdilerin testlere dahil edildiği,
    • çünkü yazılım seviyesi testlerde ekranlardaki / servislerdeki sınır değerler vesaireyi zaten test ettik,
  • belirli bir operasyonel konsept senaryosu kullanılarak sistemi baştan sona bir ana akış dahilinde test eden,
  • yazılımın, sistemin diğer bileşenleri olan donanım ürünleri etkileşiminin de test edildiği,
bir yapı anlaşılır.

Yazılım testleri de birer senaryo dahilinde işletilir ama bu senaryolar sadece bir veya birkaç fonksiyonu içerir. 

Sunday, February 25, 2018

Platform Uygunluk Testi

Platform Uygunluk Testi'nin amacı, geliştirilen ürünün hedef işletim sistemlerinin tamamında sorunsuz olarak çalıştığının doğrulanmasıdır. Web ürünlerinin farklı internet gezginlerinde çalışmasına yönelik testler de bu kapsamda değerlendirilebilir.

Normal şartlar altında, kurulum işlemleri hariç olmak üzere, ürünün arayüzünün ve yeteneklerinin her platformda birebir aynı olması beklenmektedir. Ancak, test adımlarında komut ekranı / terminal ekranında yazılması gereken komutlar varsa, Windows ve Linux temelli işletim sistemleri için bu komutlar farklı olduğundan, bu detay test adımlarında belirtilmelidir.

Bu test türünün zorluğu, aynı testlerin her bir platform için tekrarlanması gerekliliğidir. O sebeple, mümkün mertebe test otomasyonu yapılarak harcanacak eforun asgari seviyeye indirilmesi önemlidir [test otomasyonu için harcanacak efor da ayrıca göz önünde bulundurulmalıdır, çünkü kimi durumda otomasyon kodunun yazılması, bakımının yapılması, farklı platformlarda çalışır olduğunun garanti edilmesi çok zor olabilir].

Bu test türünde karşılaşılabilecek bazı sorunlar şunlardır:

  • Kütüphane / eklenti uyumsuzlukları,
  • Konfigürasyon dosyalarındaki dizin adreslerinin gösterim farklılıkları sebebiyle dosyalara erişim sorunu,
  • Performans farkları,
  • Dosya formatlarındaki farklılık sebebiyle gösterim sorunları.

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.

Thursday, June 1, 2017

Yazılım Projelerinde Müşteri İletişiminin Önemi



Her ne kadar yazılım mühendisliği yoğun teknik bilgiler gerektirse de en nihayetinde yapılan iş bir müşteri / kullanıcı grubunun ihtiyaçlarını karşılamak üzere yapılır. Dolayısıyla ciddi miktarda sosyal beceriler de gerektirir.

Bu sebeple, hem ürünün geliştirilmesi için bütçe ayıran Müşteri ile hem de ürünü kullanacak Son Kullanıcı ile yakın iletişimde olmak, sonradan ortaya çıkabilecek kullanım zorluklarını çok daha erken bir zamanda ortadan kaldırmak için fırsatlar sağlamaktadır.

Bu faydaları şu şekilde sıralayabiliriz:

    • Sözleşme Aşaması: Bu aşamada ihale çağrı dosyasında, müşteri ve son kullanıcı menfaatine olacak olan ancak sözleşmede belirtilmemiş idari ve teknik konularda müşteriye fikir sunulabilir. Örneğin, ürünün hedeflenen performansı, donanım altyapısı, engelli kullanıcıların da sistemi kullanmasını kolaylaştıran erişebilirlik isterleri gibi konularda önerilerde bulunabiliriz. Yine bu aşamada müşteri ve son kullanıcı hakkında mümkün mertebe detaylı bilgi sahibi olmak, nihai ürünün kalitesini artırıcı faydalar sağlayacaktır.
    • Analiz Aşaması: Son kullanıcının nasıl bir ortamda, hangi şartlar altında, hangi işi, nasıl ve neden yaptığı, iş akışının ne olduğu, bu akışta kimlerin hangi sorumlulukları ve sınırlamaları olduğu gibi ürün için son derece önemli olan "kullanım durumları", kullanıcı ile empati kurularak, ortaya çıkarılmış olacaktır.
    • Geliştirme Aşaması: Sözleşmede "Proje İlerleme Raporları" istenmemiş bile olsa, müşteri temsilcilerini projenin gidişatı hakkında bildirmek ve ürün ortaya çıktıkça sunumlar yapmak, müşteri temsilcilerinin projenin sağlıklı bir şekilde ilerlediğini görmeleri bakımından faydalıdır.
    • Kabul Aşaması: Kabul işlemleri öncesinde oryantasyonlar verilerek, kabul sürecine müşteri temsilcilerinin en iyi şekilde hâkim olmaları sağlanır ve akıllarında herhangi bir soru işareti kalmaz.
    • Ürünün Devreye Alınması: Bu aşamada yüklenici şirketin personelinin, son kullanıcı ile yakın çalışması, ürünün kullanıcı tarafından sahiplenilmesi, eski sistemden yeni sisteme geçişin hızlandırılması, ürünün nihai ortamında çalışma performansının yakından takip edilmesi gibi pek çok konuda fayda sağlar. Bu aşamada özellikle dikkat edilmesi gereken konu, kullanıcıdan gelecek olan istek / hata bildirimlerine çok hızlı bir şekilde geri dönüş sağlamak, ürünün kullanımının sekteye uğramasına engel olmaktır.

Sunday, May 28, 2017

Pazarlama Faaliyetlerine Test Mühendisleri Nasıl Destek Verebilir

Test mühendisleri, geliştirilen sistemin / yazılımın ( = ürünün) tüm yeteneklerine hâkim oldukları için gerek fuarlardaki tanıtımlarda, gerek şirkete misafir olan potansiyele müşterilere yapılan sunumlarda, gerekse tanıtım araçlarının oluşturulmasında şirketlerin satış / pazarlama / iş geliştirme bölümlerine ciddi destekler verebilirler.

Aşağıdaki liste bu noktada aydınlatıcı olabilir:



  • Demo Hazırlığı
    • Geliştirilen ürünün demosunun, potansiyel müşteri gruplarına yönelik verilerini içererek hazırlanması,
    • Demo senaryosunun oluşturulması,
    • Demonun gerçekleştirilmesi  
  • Sunum Hazırlığı
    • Demo, fuar, müşteri ziyareti gibi amaçlara yönelik olarak ürünün genel olarak tanıtımını içeren sunum dosyasının hazırlanması,
    • Sunumda 5N1K sorularına yönelik cevaplar içerilmesi,
    • Potansiyel müşterinin hangi ihtiyaçlarına cevap verdiğinin net olarak belirtilmesi,
  • Pazarlama Araçları Hazırlığı
    • Hazırlanacak broşür için ürünün ekran görüntülerinin alınması,
    • Ekran görüntüleri ile ilişkili olarak ürünün yeteneklerinin listelenmesi,
    • Ürünün uyumlu olduğu standartların belirtilmesi,
    • Ürünün, sektördeki diğer ürünlere göre karşılaştırmalı performansının ölçülmesi,
    • Ürünün demo videosunun hazırlanması.

Wednesday, May 24, 2017

Gereksinim Anlaşılabilirlik Toplantısının Amacı

Her ne kadar gereksinim analizi çalışmaları sonucunda ortaya çıkan gereksinimler mümkün mertebe atomik hale getirilse ve okuyan herkesin aynı şeyi anlaması sağlanmaya çalışılsa da kimi gereksinimler özellikle farklı ekip üyeleri (yazılım mühendisi  - test mühendisi - kalite uzmanı - müşteri temsilcisi) tarafından farklı anlaşılabilmektedir.

Bu nedenle, özellikle gereksinim analizinin hemen ardından, müşteri tensilcilerinin de katılımıyla, (özellikle sistem seviyesi) hangi gereksinimde tam olarak neyin amaçlandığının net bir şekilde tüm ilgili ekip üyeleri tarafından anlaşılması çok önemlidir.

Bu amaçla yapılan toplantıların adı Gereksinim Anlaşılırlık Toplantısı veya Gereksinimleri Anlama Toplantısı'dır.