Kara Kutu Test Tekniği Nedir ve Test Tipleri Nelerdir?

Kara kutu testi, sistemin iç işleyişi hakkında bilgi sahibi olmadan sistemin test edilmesi yaklaşımıdır. Sistem üzerinde gerçekleştirilen fonksiyonel aksiyonlar sonrasında, sistemin ürettiği çıktılar ve dönütler gözlemlenir. Test süreci boyunca sistemin iç yapısı, kodu veya kontrol mekanizmaları değerlendirilmez; yalnızca sistemin dış yüzeyiyle etkileşim kurulur.

Beklenen sonuçların elde edilmesi, sistemin tanımlanan gereksinimlere uygun şekilde çalıştığını gösterir. Buna karşılık, sistemin ürettiği çıktılar beklenen davranışların dışındaysa, sistemin istenilen kalite seviyesinde çalışmadığı veya gereksinimleri karşılamadığı anlaşılır.


Yeni bir bilgisayar ve çevre birimleri (kasa, monitör, klavye, mouse, hoparlör) satın alındığında, kurulum tamamlandıktan sonra sistem uçtan uca doğrulanır. Güç düğmesine basılır ve şu sorulara odaklanılır:

• Monitöre görüntü geliyor mu?

• Klavye girdileri ekrana yansıyor mu?

• Mouse hareketleri algılanıyor mu?

• Medya oynatıldığında ses çıkıyor mu?


Bu kontroller sırasında bileşenlerin birbirleriyle hangi protokollerle, hangi donanımsal ya da yazılımsal süreçler üzerinden iletişim kurduğu analiz edilmez. GPU’nun sinyali monitöre nasıl ilettiği, klavye girdisinin işletim sistemi tarafından nasıl işlendiği ya da ses kartının veriyi hoparlöre nasıl aktardığı test kapsamı dışındadır. Odak noktası yalnızca gözlemlenebilir çıktının beklenen davranışla örtüşüp örtüşmediğidir.

Kara kutu testleri de aynı prensiple çalışır:

• Uygulamanın iç yapısı, kodu, algoritmaları veya mimarisi bilinmez.

• Testler tamamen kullanıcı perspektifinden, girdiler ve çıktılar üzerinden yürütülür.

• Amaç, sistemin iş gereksinimlerini ve fonksiyonel beklentileri karşılayıp karşılamadığını doğrulamaktır.


Yazılım uygulamalarında 3. parti (third-party) bileşenler sıkça kullanılmaktadır. Bu tür bileşenlerin test süreçlerinde genellikle kaynak koda erişim mümkün değildir; çoğu zaman yalnızca kullanıcı arayüzü (UI) veya dışa açık API katmanı üzerinden etkileşim kurulabilir. Bu durumda bileşenin iç yapısının nasıl çalıştığı bilinemez ve iç mantığını doğrudan test etmek mümkün olmaz.


Peki, olası bir problem tespit edilirse ne yapılmalıdır? Bu tip senaryolarda bileşenin dışa açık yüzeyi, kara kutu test (KKT) teknikleriyle doğrulanır. Test sırasında tespit edilen hatalar ve tutarsız davranışlar detaylı şekilde raporlanarak 3. parti bileşen sağlayıcısına iletilir ve düzeltmenin ilgili sağlayıcı tarafından yapılması beklenir.


Bunun yanı sıra, üzerinde çalıştığımız uygulamanın kaynak kodları çok karmaşık, gizleme uygulanmış veya farklı nedenlerle anlaşılması zor bir yapıda olabilir. Dolayısıyla uygulamanın iç işleyişi hakkında yeterli bilgi sahibi olmak her zaman mümkün değildir ve bu durum, iç mantığa dayalı testlerin uygulanabilirliğini sınırlar. Kaynak koda erişim mümkün olsa dahi, tüm kodu baştan sona gözden geçirmek; satır satır incelemek ve kontrol akışındaki hataları yakalamaya çalışmak yüksek efor, düşük verimlilik ve yüksek zaman maliyeti doğurur.


Bu nedenle test stratejisini, uygulamanın kullanıcının erişebildiği ve aktif olarak kullandığı alanlara yönlendirmek çoğu durumda daha pratik, daha ölçeklenebilir ve daha verimli bir yaklaşımdır.


Bu durumu bilgisayar örneği üzerinden düşünürsek: Tüm sistemin doğru şekilde entegre edildiğini ve çalıştığını doğrulamak için güç düğmesine basmak mı daha az eforludur, yoksa kabloları tek tek kontrol edip bağlantıları yeniden doğrulamak mı? Sistem sorunsuzsa tek bir tuşla açılır ve çalıştığı anlaşılır. Eğer sistemde bir problem varsa, güç düğmesine bastıktan sonra hangi bileşenin çalışmadığı kolayca gözlemlenir. Böylece problem, tüm sisteme yayılmadan hızlıca daraltılır ve yalnızca ilgili bileşenin bağlantıları üzerine odaklanılarak daha kısa sürede tespit edilir.


Tüm kaynak kodlara erişilebilen durumlarda dahi, yalnızca sistemin iç yapısına odaklanarak iç akışları test etmek; uygulamanın dışarıdan nasıl bir bütünlük sergilediğinin gözden kaçmasına neden olabilir. İç yapı incelendiğinde sistem tutarlı ve sorunsuz gibi görünebilir; ancak gerçek kullanım senaryolarında entegrasyon noktalarında, bağlantılarda veya belirli bileşenlerde problemler ortaya çıkabilir. Ayrıca sistemin bazı alanlarında beklenmedik davranışlar, kaçaklar veya uç durumlar, yalnızca iç testlerle tespit edilemeyebilir.

Bu risklerin minimize edilmesi için kara kutu test (KKT) teknikleriyle sistemin uçtan uca doğrulanması ve uygulamanın bir bütün olarak kalite standartlarını karşılayıp karşılamadığının değerlendirilmesi gerekir.

Kara kutu test (KKT) teknikleri, sistemi uçtan uca doğrulamaya imkan tanıdığı için kullanılabilirlik, güvenilirlik ve kullanıcı gereksinimlerinin beklendiği şekilde karşılanması açısından kritik bir test yaklaşımıdır.

Kara kutu testlerinde uygulamanın mimarisi veya nasıl geliştirildiği doğrudan önem taşımaz. Esas hedef; uygulamayı son kullanıcı perspektifinden değerlendirerek, canlı ortamda karşılaşılması en olası temel senaryolar, alternatif senaryolar ve uç (edge) senaryolar altında sistem davranışını sınamaktır. Bu senaryolar kapsamında uygulamanın çökmediğinin, beklenmedik davranışlar sergilemediğinin, tasarımsal ya da mantıksal hatalarla kullanıcı deneyimini ve memnuniyetini riske atmadığının doğrulanması amaçlanır.

KKT teknikleri, kullanıcı davranışını ve sistemin dışa yansıyan çıktısını temel aldığı için genellikle daha düşük test karmaşıklığına sahiptir. Bu yaklaşımı uygulamak için ileri seviye teknik bilgi veya programlama yetkinliği zorunlu değildir; kritik olan nokta, doğru test senaryolarını tanımlayabilmek ve beklenen davranışları doğru şekilde doğrulayabilmektir. Bu nedenle kara kutu testleri, ürün kalitesini doğrudan kullanıcı deneyimi üzerinden güvence altına alan en kritik test katmanlarından biridir.

Uygulamalarda oluşabilecek orta veya büyük ölçekli fonksiyonel problemler, son kullanıcı gözünde ciddi bir itibar kaybı ve güven erozyonu yaratır. Kara kutu test (KKT) teknikleri, bu tür kritik sorunların canlı ortama taşınmadan önce test ortamlarında tespit edilmesini sağlar. Tespit edilen hatalar raporlanır ve giderilerek ürünün kalite seviyesi güvence altına alınır.

Örneğin bir e-ticaret sitesinde gezinirken birkaç ürün beğendiğimizi ve satın almak istediğimizi düşünelim. Alışverişi tamamlayabilmek için sistem, kullanıcıdan giriş yapmasını; üye değilse üyelik oluşturmasını talep eder. Kullanıcının daha önce üye olduğunu varsayarsak; kullanıcı adı/e-posta/telefon ve şifre bilgileri girildikten sonra “Giriş Yap” butonuna basıldığında (doğru bilgi girilmişse) beklenti, giriş işleminin başarıyla tamamlanmasıdır (happy path). Ancak “Giriş Yap” butonunun çalışmaması veya alanların pasif olması gibi bir durum söz konusuysa kullanıcı giriş yapamaz ve alışveriş sürecine devam edemez.

Bu senaryo, web sitesinin sağlaması gereken en temel ve kritik fonksiyonlardan biridir; çünkü kullanıcı açısından alışverişi tamamlamanın ilk adımı oturum açabilmektir. Bu seviyedeki temel bir fonksiyonel arıza, müşteri yolculuğunun daha başlangıç aşamasında kesilmesi anlamına gelir. Kara kutu test teknikleri; ilgili sistem ve alt sistemlerin uçtan uca test edilmesini sağlayarak, ürünün beklenen kalite seviyesinde çalıştığını doğrular ve kritik kullanıcı akışlarının güvence altına alınmasına yardımcı olur.

Test süreçlerinde kara kutu test yaklaşımı kapsamında ele alınabilecek üç ana test kategorisi vardır: Fonksiyonel Testler, Regresyon Testleri ve Fonksiyonel Olmayan Testler.


1- Fonksiyonel Testler

Fonksiyonel testler, uygulamanın önceden tanımlanmış fonksiyonel gereksinimlerine uygun çalışıp çalışmadığını doğrulayan kara kutu test tekniğidir. Uygulama geliştirilmeden önce analiz ekipleri veya ürün sahipleri tarafından iş akışları ve iş kuralları belirlenir; ilgili gereksinim dokümanları ve tasarımlar oluşturulur. Bu gereksinimler baz alınarak uygulama geliştirilir ve birim testlerden sonra test ekibine iletilir. Test aşamasında uygulama, hazırlanan iş akışlarına, kurallara ve tasarımlara uygun olacak şekilde doğrulanır. Beklendiği gibi çalışmayan alanlar raporlanır ve düzeltme sürecine alınır.

Fonksiyonel testlerin temel prensibi, sistemin iç yapısı veya kod mantığı ile ilgilenmeden, yalnızca dışarıdan gözlemlenebilen davranış üzerinden doğrulama yapmaktır. İlgili fonksiyonu tetikleyecek test verileri sağlanır ve elde edilen çıktı beklenen sonuçlarla karşılaştırılır. Sonuç doğruysa test “passed” olarak işaretlenir; beklentiden sapma varsa test “failed” olarak işaretlenir ve yazılım ekibine “bug” olarak iletilir. Düzeltme sonrasında aynı senaryo tekrar çalıştırılarak sonucun beklendiği gibi olduğu doğrulanır.

Fonksiyonel testler; kullanıcı arayüzü (UI), servisler (API), veritabanı ile etkileşim gerektiren akışlar, yetkilendirme kontrolleri gibi sistemin dışarıya sunduğu fonksiyonların doğrulanmasına odaklanır.


Fonksiyonel Testlerin Sürdürülebilirliği ve Otomasyon

Sürekli tekrar edilmesi gereken test senaryoları zaman içinde yüksek efor ve maliyet doğurur. Fonksiyonel testler genellikle sistemin “ana akışlarını” doğruladığı için her sürümde yeniden çalıştırılması gerekir. Bu testlerin otomasyonu mümkündür; ancak senaryo sayısının yüksekliği ve farklı koşulların fazla olması nedeniyle otomasyon kapsamı dikkatli planlanmalıdır.

Bu nedenle otomasyona alınacak senaryolar, aşağıdaki kriterlere göre seçilmelidir:

• Senaryonun kullanıcı tarafından karşılaşılma sıklığı

• Senaryonun iş kritikliği (revenue / dönüşüm etkisi)

• Hata oluşması durumundaki risk seviyesi

• Otomasyonun bakım maliyeti ve sürdürülebilirliği

Seçilen senaryolar için kaynak planlaması yapılmalı, otomasyon kapsamı kademeli olarak genişletilmelidir.


2 – Regresyon Testleri

Regresyon testler, uygulama veya sistemin ana ve kritik fonksiyonlarının, yapılan bir versiyon güncellemesi ya da yeni bir özellik geliştirmesi sonrasında halen beklendiği gibi çalıştığını doğrulamak için yürütülen testlerdir. Regresyon testlerinin temel amacı, yeni eklenen geliştirmeleri detaylı şekilde doğrulamak değil; değişikliklerden sonra sistemin uçtan uca kritik akışlarında herhangi bir bozulma olup olmadığını kontrol etmektir.

Örneğin yeni bir sürüm yayınlandıktan sonra, üye girişi (login) akışının bozulup bozulmadığının kontrol edilmesi gerekir. Görünürde ilgili alanların etkilenmeyeceği düşünülse bile, sistemin bileşenleri birlikte çalıştığında nadir de olsa beklenmedik bağımlılıklar ortaya çıkabilir ve kritik iş akışlarında sorunlar meydana gelebilir. Bu tür riskleri minimize etmek için regresyon test setleri çalıştırılır. Regresyon setleri, sistemin genel sağlığını değerlendiren bir kalite kontrol / sağlık kontrolü (health check) olarak da düşünülebilir.

Bu testler; test ortamı, pre-prod ve gerektiğinde canlı ortamda (yayın sonrası doğrulama amaçlı) çalıştırılarak sistemin ana fonksiyonlarının çalışır durumda olduğu doğrulanır.

Regresyon testleri şunları teyit eder:

• Yapılan güncelleme veya yeni geliştirmelerin diğer alanları olumsuz etkilemediğini ve kritik akışların beklendiği gibi çalıştığını,

• Etkilenmiş alanlardaki sorunların erken tespit edilmesini ve düzeltilmesini,

• Düzenli çalıştırılması sayesinde sistem stabilitesinin ve güvenilirliğinin korunduğunu,

• Ortam geçişleri (test → pre-prod → prod) sonrasında kritik fonksiyonlarda bozulma olmadığını.


3 – Fonksiyonel Olmayan Testler

Fonksiyonel olmayan testler, yazılımın yalnızca “çalışıp çalışmadığını” değil; nasıl çalıştığını değerlendiren testlerdir. Bu testler sistemin performans, güvenlik, kullanılabilirlik, uyumluluk ve ölçeklenebilirlik gibi kalite karakteristiklerini doğrulamayı amaçlar. Dolayısıyla sistemin kalitesi, yalnızca fonksiyonların doğru çalışmasıyla sınırlı değildir; aynı zamanda bu fonksiyonların hangi kalite seviyesinde çalıştığı da kritik öneme sahiptir.

Bir sistemde tüm fonksiyonlar doğru çalışıyor olsa bile, beklenen performans seviyesini karşılamıyorsa sistemin sorunsuz olduğu söylenemez. Performans problemleri, en az fonksiyonel bozukluklar kadar ciddi etkiler yaratır. Örneğin üye girişinin teknik olarak başarılı olması yeterli değildir; bu işlemin kabul edilebilir sürede tamamlanması gerekir. Üye girişi işleminin 1 dakikada tamamlanması, sistemin performans açısından beklendiği gibi çalışmadığını gösterir ve kullanıcı deneyimini doğrudan olumsuz etkiler.

Fonksiyonel olmayan testler şunlara katkı sağlar:

• Sistemde performans kaybı veya darboğaz yaşanmamasına,

• Güvenlik zafiyetlerinin ve istismar edilebilir açıkların bulunmamasına,

• Artan kullanıcı sayısı ve yük altında sistemin beklenmedik davranışlar sergilememesine,

• Gelecekteki büyüme ihtiyaçlarına göre kapasite planlamasının yapılmasına ve ölçeklenebilirliğin doğrulanmasına,

• Uzun süreli çalışmalarda sistemin kararlılığını korumasına (crash / memory leak vb. problemlerin engellenmesine),

• Canlı ortamda oluşabilecek problemler nedeniyle oluşabilecek maddi kayıpların ve operasyonel risklerin azaltılmasına,

• Farklı cihazlar, ekran boyutları, tarayıcılar ve işletim sistemleriyle uyumlu çalışmasına,

• Veri güvenliği ve veri koruma ihlallerinin yaşanmamasına.

Yukarıda bahsedilen test tipleri sayesinde kara kutu test (KKT) teknikleri uygulanarak sistemin uçtan uca, bir bütün olarak doğrulanması sağlanır. Bu yaklaşımın önemli avantajları olduğu gibi bazı dezavantajları da bulunmaktadır. Özellikle sürekli koşulan ve kritik fonksiyonları doğrulayan test senaryoları, otomasyon kapsamına alınarak geliştirmeler veya güncellemeler sonrasında düzenli şekilde otomasyon tarafından çalıştırılabilir. Bu sayede tekrar eden senaryolar için sürekli insan kaynağı ayırmaya gerek kalmaz ve test süreçleri daha sürdürülebilir hale gelir.

Bununla birlikte kara kutu testlerinde çalıştırılan senaryoların sayısı oldukça fazladır. Bu senaryoların tamamını otomasyona taşımak pratik değildir; çünkü öncelikle kapsamın risk bazlı şekilde belirlenmesi ve uygun senaryoların seçilmesi gerekir. Ayrıca tüm kullanıcı senaryolarını test etmek zaten mümkün değildir. Güncellemeler ve geliştirmeler belirli bir versiyon planına göre canlı ortama alındığından her sürüm için bir yayın tarihi bulunur ve bu tarihe kadar regresyon dahil tüm gerekli testlerin tamamlanması beklenir. Bu nedenle yazılım test ekipleri teorik olarak sınırsız senaryoyu test etmeye çalışmaz; release deadline’a kadar maksimum risk azaltımını sağlayacak kapsamı seçer, uygular ve önceliklendirir.

Kara kutu test yaklaşımında sistemin iç yapısı hakkında bilgi sahibi olmadan kullanıcı/müşteri perspektifinden doğrulama yapıldığından, test sürecinde tespit edilen hataların kök nedenlerini (root cause) anlamak zaman zaman zorlaşabilir. Bu durum, aynı kök nedenden türeyebilecek benzer hataların erken fark edilmesini ve gelecekte oluşabilecek problemlerin proaktif şekilde engellenmesini zorlaştırabilir. Bu nedenle ideal test stratejisi, kara kutu testlerini beyaz kutu ve gri kutu yaklaşımlarıyla destekleyerek hem kullanıcı deneyimini hem de kök neden analizini aynı anda güvence altına almalıdır.

Yazımızın sonuna yaklaşırken, yazı boyunca ele aldığımız kara kutu test (KKT) tekniklerinin avantaj ve dezavantajlarını özetleyerek listeleyelim. Bu sayede aktardığımız kavramları genel çerçevede toparlayabilir ve konuyu daha net bir şekilde sonuçlandırabiliriz.

Kara Kutu Test Tekniklerinin Avantajları

Kara kutu test (KKT) tekniklerinin avantajları aşağıdaki şekilde özetlenebilir:

• Yazılım, uçtan uca kullanıcı/müşteri perspektifinden test edilerek canlı ortamda yaşanması muhtemel kritik sorunların önüne geçilir.

• Yazılımı test edebilmek için kaynak kod bilgisi veya derin teknik detay bilgisi zorunlu değildir.

• Testler, farklı ekipler tarafından veya dış kaynak (outsourcing) test ekipleri ile yürütülebilir.

• Genel kullanıcı davranışları ve ana akışlar test edildiğinde testlerin uygulanması görece daha düşük karmaşıklığa sahiptir.

• Test senaryoları standartlaştırılabilir ve tekrar edilebilir yapıdadır.

• Sürekli tekrar edilmesi gereken kritik senaryolar otomasyona uygun hale getirilebilir.

• Regresyon kapsamını oluşturacak senaryolar belirlenerek sistemin ana iskelet fonksiyonları için düzenli çalıştırılabilecek manuel/otomasyon test kütüphaneleri oluşturulabilir.

• Yazılımın belirsiz, riskli veya problemli alanlarının erken tespit edilmesini sağlar.

• Yazılımın önceden belirlenen gereksinimlere, özelliklere ve iş akışı kurallarına uygun geliştirildiğini doğrular.

• Yetkilendirme, erişim kontrolleri ve doğrulama mekanizmaları gibi alanlarda test edilerek güvenlik zafiyetlerinin tespit edilmesine katkı sağlar.

• Beklenen veya beklenmeyen veri girişlerinde sistemin doğru validasyonları uyguladığını ve uygun aksiyonları verdiğini doğrular (ör. uyarı mesajı, hata yönetimi, kural doğrulama).

Kara Kutu Test Tekniklerinin Dezavantajları

Kara kutu test (KKT) tekniklerinin dezavantajları aşağıdaki şekilde özetlenebilir:

• Aynı test senaryolarının farklı sürümlerde tekrar tekrar çalıştırılmasını gerektirebilir.

• Gereksinimler net değilse veya eksik tanımlanmışsa doğru test senaryolarını tasarlamak zorlaşır.

• Tüm kullanıcı senaryolarını ve uç durumları kapsamlı şekilde test etmek pratikte mümkün değildir.

• Senaryo sayısı ve değişken koşullar arttıkça testlerin otomasyona taşınması ve sürdürülebilir şekilde bakımının yapılması zorlaşabilir.

• Hatalar tespit edilse bile sistemin iç yapısı görünmediği için kök neden analizi (root cause analysis) daha zor hale gelebilir.

• Kod seviyesindeki kontrol akışı hataları, mimari problemler veya düşük seviyeli mantık kusurları gibi durumları doğrudan ortaya çıkarmayabilir.

Kara kutu testlerini uygulamak için birçok farklı test tekniğinden yararlanılabilir. Bu yazımızda kara kutu test (KKT) yaklaşımının ne olduğundan ve avantaj–dezavantajlarından bahsettik; ancak bu testlerin pratikte nasıl uygulanabileceğine detaylı şekilde değinmedik. Yazının daha fazla uzamaması adına, kara kutu testlerinde kullanılan teknikleri bu bölümde yalnızca başlıklar halinde listeleyeceğiz. Her bir tekniğin detaylı açıklaması ve örnekli uygulaması ise bir sonraki yazımızda ele alınacaktır.

Yaygın olarak kullanılan kara kutu test teknikleri aşağıdaki gibi listelenebilir:

• Denklik sınıflarına ayırma (Equivalence Partitioning)

• Sınır değer analizi (Boundary Value Analysis)

• Karar tablosu testleri (Decision Table Testing)

• Durum geçiş testleri (State Transition Testing)

• Hata tahminleme (Error Guessing)

• Senaryo bazlı test (Scenario-Based Testing)

• İkili kombinasyon testi / Pairwise testing (Pairwise Testing)


TSTK7M9Q2X4L8N1R5T3V6

Erhan Eşkin

Yazılım Test Uzmanı

http://pi404.com

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir