Yazılım Testi nedir? Yazılım Testi Yapmak Neden Zordur?


Yazılımlar son kullanıcıya ulaştığında hiç beklenmedik şekilde, geri bildirimlerle hatalar ortaya çıkar. Neden böyle olduğu sorusu geliştiriciler tarafından kaçınılmaz olarak sorulan sorular arasındadır. Bu soruya cevap verebilmek için yazılım geliştirme bağlamında yapılan testlere bakmak ve yazılım testçileri ile yazılım geliştiricilerin bu süreçteki rolünü anlamak gerekmektedir.

Yazılım son kullanıcıya ulaştığında hatalar ortaya çıkıyorsa bunun birkaç sebebi olabilir. Bunlar:

  • Kullanıcıya test edilmemiş kod ulaşmıştır.
  • İfadelerin kullanıcı tarafından çalıştırılma sırası testlerde uygulanan sıradan farklı olabilir.
  • Denenmemiş bir girdi kombinasyonu kullanıcı tarafından uygulanmış olabilir.
  • Kullanıcının sahip olduğu işletim ortamı test edilmemiş olabilir.

Testçiler ve Test Süreci

Testçinin göz önünde bulundurması gerekenler aşağıda belirtilmiştir.

  • Yazılım ve yazılımın hesaplama işlemlerini gerçekleştiren fonksiyonlar
  • Girdiler ve girdileri sağlayan bileşenler
  • Yazılımın çalışma ortamı

Yukarıda sayılanların hepsi bir arada göz önüne alındığında bu işlemlerin bir bütün olarak test edilmesinin ne kadar zor olduğu görülmektedir. Bu zorlukların üstesinden gelebilmek için iyi bir testçide olması gerekenler şöyledir:

  • İyi bir uygulama geliştirici olmalı
  • Formal diller hakkında bilgi sahibi olmalı
  • Graf teorisi ve algoritmalar hakkında bilgi birikimine sahip olmalı

Uygulamalar basit bile olsa yapılması gerekli olan testlerin kapsam alanı çok büyük olabilmektedir. Bu yüzden test süreci için organizasyon yapmak bir zorunluluk olarak karşımıza çıkmaktadır.

Sağlıklı bir test süreci işlemleri için dört aşamalı bir yaklaşım önerilmektedir:

  • Yazılım çalışma ortamını modelleme
  • Test senaryolarını belirleme
  • Test senaryolarının işletimi ve değerlendirme
  • Test sürecini ölçümlendirme

Bu yaklaşım testlerde karşılaşılan problemlerin gruplanmasını sağlar. Her bir adımı çözerek ilerlemek geriye dönüşleri azaltarak zaman kazancı sağlar.

Yazılım Çalışma ortamını modelleme

Bir testçinin görevi yazılımın çalışma ortamıyla etkileşimini simüle etmektir. Bunu yapabilmek için testçi yazılımın kullandığı ara yüzleri tespit etmeli ve her bir ara yüz için olası girdi şekilleriyle girdi kümelerini belirlemelidir. Bu tespit işlemi yazılım test sürecinin temel olaylarındandır. Çeşitli dosya formatları, iletişim protokolleri ve üçüncü parti yazılımları göz önünde bulundurulduğunda oldukça zor bir durum olduğu görülür.

Ara yüzler arasından en genel dört tanesi şöyledir:

  • Kullanıcı Girdi Ara yüzleri: Yazılım kullanan kişilerin yazılımla iletişime girdiği tüm genel etkileşim mekanizmaları insan ara yüzünü oluşturur.
  • Yazılımlar arası etkileşim ara yüzleri Yazılımın işletim sistemini nasıl kullandığı, veritabanını nasıl kullandığı bunlarla hangi ara yüzler sayesinde iletişim kurduğu olası tüm servisleri ve servislerin çalışma durumuna göre yazılımın tepkileri test edilmelidir.
  • Dosya sistemiyle olan etkileşim için kullanılan ara yüzler: Yazılım veri okuma yazma işlemlerinde çeşitli ara yüzlerle etkileşime girip bunların sonucuna göre nasıl davranması gerektiğini belirlemek zorundadır.
  • İletişimi sağlayan birimlerle olan etkileşim için kullanılan ara yüzler: Yazılımlar iletişim için çeşitli fiziksel araçlar kullanabilirler, bu araçlardan gelen verilerin tüm durumlarla test edilmesi gerekmektedir.

Bu ara yüzlerin tespiti ile girdi kümeleri belirlenebilecektir. Modelleme işlemi bu belirleme adımlarıyla son bulur. Artık ara yüzler ve girdi kümeleri temel alınarak test senaryoları oluşturma adımına geçilebilir. Bütün bunları gerçekleştirirken girdilerin sonsuz sayıda olasılık oluşturabileceği göz önüne alınmalıdır. Girdiler arasından uç durumlar seçip, en büyük paydayı oluşturarak denek alt kümesi oluşturmak zorunluluğu doğar. Yine bu ara yüzlerin ihtiyaç duyduğu girdi kümelerinin oluşturduğu karmaşıklığın üstesinden gelebilmek için düzenli ifadeler ve genetik algoritmalar, stokastik süreçler kullanılır.

Test Senaryolarının Belirlenmesi

Modellerin çok olması ve girdi kümelerinin çeşitliliği sonsuz sayıda senaryoya sebep olur. Hepsini tek tek ele almak zaman ve para kısıtlarından dolayı mümkün değildir. Bu yüzden testçiler en az senaryo ile en çok test kapsam alanı yaratmak için stratejiler geliştirmek zorundadırlar. Test işleminin tamamlanabilmesi için tüm kod satırlarının en az bir kez işletilmesi ve tüm girdileri kapsayan bir test kümesi kullanılması gerekmektedir.

Senaryolar iki temel kıstas üzerine kurgulanır:

Çalışma Akışı test kıstası:

  • Her bir kod ifadesini en az bir kez çalıştıracak bir test kümesi belirlenmelidir.
  • Dallanmaya yol açan her bir yapıyı test eden bir test kümesi belirlenmelidir.

Girdi Kapsamı test kıstası:

  • Her bir fiziksel girdiyi içeren test kümesi belirlenmelidir.
  • Her kontrol ara yüzünü en az bir kez tümüyle kullanan test kümeleri oluşturulmalıdır

Test senaryolarının işletimi ve değerlendirme

Uygun test kümeleri oluşturduktan sonra testçiler bunları çalıştırılabilir formlara çevirirler, böylece tipik bir kullanıcının aksiyonlarını simüle eden senaryolar elde edilir.

Testleri çalıştırma işlemleri çeşitli araçlarla kolaylaştırılabilmektedir. Bunun yanı sıra otomatik yapılması sağlanabilmektedir. Fakat testlerin sonucunu değerlendirmek testlerin uygulanışı kadar kolay olmamaktadır. Değerlendirme işlemi bir karşılaştırma işlemi olup yazılım test sonuçları ile şartnamede belirtilen çıktıların karşılıklı olarak değerlendirilmesidir.

Testlerin sonuçlarının değerlendirilmesinde iki farklı yaklaşım uygulanmaktadır. Bunlar formalizm ve gömülü kod testleridir.

Formalizm, şartnamede belirlenen sonuçların/özelliklerin sağlanıp sağlanmadığını kontrol etme ve testleri bu kapsamda yapıp sonuçlarını değerlendirmekten ibarettir.

Gömülü kod testi ise yazılım kapsamındaki veri nesnelerinin belirli zamanlarda durumlarını göstererek testçinin olayı adım adım takip sağlanır ve olması gerekenle karşılaştırmasını sağlar. Bu işlem otomatik olarak da yapılabilmektedir.

Test Süreci Ölçümleri

Test süreci hakkında bilgi oluşturmak için belirlenmesi gereken yüzdeler ve rakamlar bu sürecin ölçümünü oluşturur. Bulunan hata sayısı, uygulanan girdi sayısı, test edilen kod yüzdesi gibi bilgiler yazılımın genel gidişatı hakkında bilgilendirici sayılar olup kararlar vermede etkili bilgilerdir.

Sonuç

Yazılım testi temel olarak elde edilen ürünün beklenen kalitede olduğunu belirlemek, değilse istenilen kaliteye ulaştırılmasını sağlamak için kullanılan bir süreçtir. Kalite düzeyi müşteri tarafından maliyet analizi göz önüne alınarak belirlenir.

Bilgisayar sitemleri hatalar barındırır. Bu hatalar insan(geliştirici, analist…vb.) ve donanım kaynaklı olabilir hatalar maddi ve/veya prestij kayıplara neden olabilir. Yazılım test sürecinin proje döngüsüne katılmasıyla bu kayıplar en aza indirebilir. Unutulmaması gereken şey mükemmel program olmadığı ve bir yazılımın asla 100% test edilemeyeceğidir.

Bunun dışında risk bulunmayan projelerde yazılım testine gerek olmayabilir. Bu karar maliyet analizi göz önünde bulundurularak alınmalıdır.

Referans:

James A. Whittaker in What Is SoftwareTesting? And Why Is It So Hard?

Not: Yukarıda belirtilen makale kaynak olarak alınarak test sürecinde yapılan işlemlerin neler olduğu ve ne gibi zorluklarla karşılaşıldığını anlatan bir yazı.

Reklamlar