İçeriğe atla

Yazılım testi

TestingCup Polonya Yazılım Testi Şampiyonası, Katowice, Spodek, Mayıs 2016

Yazılım testi (software testing), test altında hizmetlerin veya ürünlerin kalitesi hakkında paydaşlara bilgi sağlamak için yürütülen bir araştırmadır. Yazılım testi aynı zamanda, yazılım uygulamalarının risklerini anlamak için yazılımı bağımsız ve nesnel olarak incelemektir. Test teknikleri yazılım böceklerini (hatalar ve diğer kusurlar) bulma niyetiyle uygulama veya bir programı çalıştırma süreçlerini kapsar.

Yazılım testi bir veya daha fazla ilgili özelliği değerlendirmek için sistem bileşenlerini veya yazılım bileşenlerinin yürütülmesini içerir. Genellikle, bu özellikler test altındaki sistem veya dahili bileşenleri işaret eder:

  • Geliştirme ve tasarımda kılavuzluk eden gereksinimlerin karşılanması
  • Tüm ilişkili girdilere doğru şekilde karşılık verilmesi
  • Kabul edilebilir zaman içerisinde fonksiyonların çalışması
  • Yeterli derecede kullanılabilme
  • Çalıştırılacak platformlarda indirilebilmesi ve kurulması
  • Paydaşların istediği genel sonuçları başarabilme

Pratik olarak sonsuz her bir yazılım bileşeni için bile sayısın mümkün test vardır, tüm yazılım test etme yöntemleri mevcut zaman ve kaynaklar için uygun testleri seçmek için bazı stratejileri kullanırlar. Sonuç olarak yazılım testi tipik olarak (fakat özel değil) yazılım böceklerini bulmaya çalışan uygulama veya programı yürütmeye çalışır.Yazılım testi, yazılımın kalitesi hakkında birbirinden bağımsız bilgiyi ve kullanıcılarına veya sponsorlarına başarısızlık riskini nesnel bir şekilde sağlar.

Yazılım testi yürütülebilen bir yazılım çalıştırıldığı sürece var olur. Yazılım geliştirmeye genel yaklaşım sıklıkla ne zaman ve nasıl testin yürütüldüğünü belirlemektir. Mesela fazlı süreçlerde, çoğu test etme olayı sistem gereksinimleri tanımlandıktan ve test edilebilir programlarda gerçekleştirimi yapıldıktan sonra meydana gelir. Karşıt olarak Çevik yaklaşım, gereksinimler, programlama altında test etme genellikle eş zamanlı olarak meydana gelir.

Test tasarım teknikleri

Statik test etmeye karşın dinamik test etme

Yazılım testinde birçok yaklaşım mevcuttur. Önizleme, talimatlar statik test etme olarak refere edilir, diğer taraftan test olaylarının bir kümesi verilerek yürütülen programlanmış kodların testi dinamik test olarak refere edilir. Statik test etme statik program analizleri olarak veri akışını ve söz dizimini kontrol eden derleyiciler veya kaynak kod yapılarını kontrol eden editörler programlandığı için örtülüdür. Dinamik test etme programın kendisi yürütüldüğünde yer alır. Dinamik test etme, ayrık fonksiyonlara veya modüllere uygulanabilir ve kodun belirli parçalarını test etmek için %100 tamamlanmadan önce başlayabilir. Bunun için tipik teknikler ya sürücüleri ya da hata ayıklayıcılardan çalıştırmayı kullanır. Statik test etme doğrulamayı içerir oysa dinamik test etme geçerliliği doğrular. Bununla birlikte hepsi yazılım kalitesini geliştirmeye yardımcı olur. Statik analizler için teknikler arasında mutasyon test etme kaynak kodu mutasyona uğratarak hataları ortaya çıkartmak için test adımlarından emin olmak için kullanılabilir.

Kutu yaklaşımı

Yazılım test etme metotları geleneksel olarak beyaz-ve siyah kutu test etme şeklinde ayrılır. Bu iki yaklaşım mühendislerin test olaylarını tasarlamakta kullandığı noktaları tanımlamak için kullanılır.

Yapı bazlı veya beyaz kutu teknikleri

Beyaz kutu testi (cam kutu test etme, açık kutu test etme, transparan kutu test etme ve yapısal test etme olarak da bilinir) iç yapıları veya programın çalışmasını test eder, son kullanıcının maruz kaldığı fonksiyonelliği karşılar.

Beyaz kutu testinde sistemin iç bakış açısı test edilir ve aynı zamanda programlama becerileri test edilir bunlar test olaylarını tasarlamak için kullanılır. Test edici kod ile birlikte çalışacak girdi çalışmalarını ve uygun çıktıları belirler. Bu çevrimde ki test etme düğümlerinin örneklemesidir. Beyaz kutu testi birim, entegrasyon ve sistem seviyelerinde yazılım test süreçlerine uygulanabilir.

Beyaz kutu testinde kullanılan teknikler:

  • API test etme (uygulama programlama arayüzü) uygulamanın kullanılan public ve private API’lerinin test edilmesi.
  • Kod kapsamı: kodun kapsadığı kriterlerin doyurulduğunu test etmek için, mesela test tasarımcısı programda en azından bir kere yürütülmesini sağlayacak testler oluşturabilir.
  • Hata injeksiyon metotları test stratejilerinin etkinliğini ölçümlemek için bilerek hatalara yol açtırma.
  • Mutasyon ve statik test metotları.

Spesifikasyon bazlı veya kara kutu teknikleri

Siyah kutu testi yazılıma bir kara kutu gibi davranır, dahili gerçekleştirimi bilmeksizin fonksiyonelliği inceler. Test ediciler sadece yazılımın ne olduğunun, yaptığı şeyin farkındadırlar, nasıl yaptığının değil. Siyah kutu test teknikleri, Denklik Paylarına Ayırma, Sınırlı Değer Analizi, Karar Tablosu Testi, Durum Geçişi Testi, Kullanım Senaryosu Testi olarak 5 gruba ayrılır.

Kaynakça

Dış bağlantılar

İlgili Araştırma Makaleleri

<span class="mw-page-title-main">C (programlama dili)</span> programlama dili

C, yapısal bir programlama dilidir. Bell Laboratuvarları'nda, Ken Thompson ve Dennis Ritchie tarafından UNIX işletim sistemini geliştirebilmek amacıyla B dilinden türetilmiştir. Geliştirilme tarihi 1972 olmasına rağmen yaygınlaşması Brian Kernighan ve Dennis M. Ritchie tarafından yayımlanan "C Programlama Dili" kitabından sonra hızlanmıştır. Günümüzde neredeyse tüm işletim sistemlerinin yapımında %95'lere varan oranda kullanılmış, hâlen daha sistem, sürücü yazılımı, işletim sistemi modülleri ve hız gereken her yerde kullanılan oldukça yaygın ve sınırları belirsiz oldukça keskin bir dildir. Keskinliği, programcıya sonsuz özgürlüğün yanında çok büyük hatalar yapabilme olanağı sağlamasıdır. Programlamanın gelişim süreciyle beraber programlamanın karmaşıklaşması, gereksinimlerin artması ile uygulama programlarında nesne yönelimliliğin ortaya çıkmasından sonra C programcıları büyük ölçüde nesne yönelimliliği destekleyen C++ diline geçmişlerdir.

<span class="mw-page-title-main">Derleyici</span> kaynak kodunu bilgisayarın işleyebileceği koda dönüştüren program

Derleyici, kaynak kodu makine koduna dönüştüren yazılımdır. Bir programlama dilinin derleyicisi, o programlama dili kullanılarak yazılmış olan kodu hedef işlemci mimarisine göre uygun şekilde makine koduna derler ve genellikle çıktı olarak yürütülebilir dosyanın oluşturulmasını sağlar. Bu eyleme derleme denir. Bir başka ifadeyle derleyici, bir tür yazı işleyicidir; girdi olarak yazı alır ve çıktı olarak yazı verir.

Yapısal programlama, programlama dilleri kullanılarak yazılan, mantıksal bütünlük gösteren bloklara (bölümlere) bölünebilirler. Bu yolla uzun ve karmaşık programların, bloklara ayırarak daha kolay biçimde yazılabilmesi mümkün olmaktadır.

<span class="mw-page-title-main">Bellek yönetimi</span>

Ana belleğin işlemler arasında paylaştırılmasına ana bellek yönetimi ya da bellek yönetimi adı verilir. İşletim sisteminin bu amaçla oluşturulan kesimine de bellek yöneticisi adı verilir.

Yama, bilgisayar programlarında oluşan bir hatayı ya da programın içeriğindeki hatalı bir fonksiyonu düzelten bir programcıktır. Genelde bilgisayarlardaki en büyük güvenlik sorunlarından olan yazılım açıklarına müdahale amacıyla kullanılır.

Arabellek aşımı ya da arabellek taşkını, iki yazılım arasında veri iletişimi için ayrılmış olan bir arabelleğe boyutundan daha fazla veri konulması ile ortaya çıkan durumdur.

<span class="mw-page-title-main">Programlama</span> bilgisayar probleminin orijinal formülasyonundan çalıştırılabilir bilgisayar programlarına yönlendiren süreç

Programlama ya da diğer adı ile yazılımlama, bilgisayarın donanıma nasıl davranacağını anlatan, bilgisayara yön veren komutlar, kelimeler, aritmetik işlemlerdir. Diğer bir tanımla programlama, bilgisayar programlarının yazılması, test edilmesi ve bakımının yapılması sürecine verilen isimdir.

Cephe yönelimli programlama veya ilgiye yönelik programlama, çapraz kesim işlerini bölerek modülerliği artırmayı amaçlayan bir programlama yaklaşımıdır. Bütün programlama yaklaşımlarında kodlar uzadıkça, kodların anlaşılabilirliği çok düşmekte, bazen de içinden çıkılmaz bir hal almaktadır. Programlamanın varlığıyla birlikte bu sorun da hep var olmuştur. Bu sorunla savaşabilmek için sürekli çalışmalar devam etmektedir, bu süreçte ortaya çıkan önemli bir programlama yaklaşımı da Cephe Yönelimli Programlamadır.

<span class="mw-page-title-main">Tersine mühendislik</span>

Tersine mühendislik, bir aygıtın, objenin veya sistemin; yapısının, işlevinin veya çalışmasının, çıkarımcı bir akıl yürütme analiziyle keşfedilmesi işlemidir. Makine veya mekanik alet, elektronik komponent, yazılım programı gibi parçalarına ayrılması ve çalışma prensiplerinin detaylı şekilde analizini içerir.

<span class="mw-page-title-main">Çekirdek (bilgisayar bilimi)</span>

İşletim sistemi çekirdeği, kısaca çekirdek (kernel), işletim sistemindeki her şeyin üzerinde denetimi olan merkezi bileşenidir. Uygulamalar ve donanım seviyesindeki bilgi işlemleri arasında bir köprü görevi görür. Çekirdeğin görevleri sistemin kaynaklarını yönetmeyi de kapsamaktadır. Genellikle çekirdek, işletim sisteminin temel bir elemanı olarak, yazılımın fonksiyonunu yerine getirebilmesi için kontrol etmesi gereken kaynaklar için düşük seviye soyutlama katmanı sağlayabilir. İşletim sistemi görevleri, tasarımları ve uygulanmalarına göre farklı çekirdekler tarafından farklı şekillerde yapılır. Sistem açılırken belleğe yüklenir ve sistem kapatılıncaya kadar ana bellekte kalır.

<span class="mw-page-title-main">Erişilmez kod</span>

Erişilmez kod bilgisayar programlamada programın başka yerlerinden kontrol akışı olmayan kaynak koduna verilen addır.

<span class="mw-page-title-main">Yazılım yaşam döngüsü</span>

Yazılım yaşam döngüsü, bilgisayar yazılımlarının ilk geliştirme aşamalarından başlayarak; yayındaki mevcut sürümün hatalarının giderilmesi, iyileştirme odaklı yeni ara sürümlerin yayınlarak yazılımın güncellenmesi de dâhil olmak üzere nihai (kararlı) sürüme ulaşana dek geçen geliştirme ve olgunlaştırma aşamalarının tamamını ifade etmek için kullanılan terimdir.

<span class="mw-page-title-main">V-Model (Yazılım geliştirme)</span>

V-model şelale (waterfall) modelinin gelişmiş hali olarak düşünülebilecek bir yazılım geliştirme süreci sunar. Doğrusal bir yönde ilerlemek yerine, süreç adımları kodlama evresinden sonra yukarıya doğru eğim alır ve tipik V şeklini oluşturur. V-Model geliştirme yaşam çevriminin her bir evresi arasındaki ilişkileri gösterir. Yatay ve dikey açılar zaman veya projenin tamamlanabilirliğini ve soyut seviyeyi gösterir.

Dart, ilk kez Google tarafından geliştirilen ve daha sonraları ECMA tarafından standart (ECMA-408) haline getirilen açık kaynaklı ve genel-amaçlı bir programlama dilidir. Dart dili kullanılarak web, sunucu, mobil uygulamalar ve IoT cihazları geliştirilebilir.

<span class="mw-page-title-main">Regresyon testi</span>

Regresyon testi uygulama ortamındaki yapılan tüm değişiklikleri; uygulamaya yeni eklenen özellikler, daha önceki yaşanan hataların düzeltilmesinden sonra, mevcut problemlerin giderildiği ve yeni yapılan güncellemelerin, eklenen özelliklerin yeni bir hata üretip üretmediğini kontrol amaçlı olarak yapılan yazılım test türüdür.

Yazılım test etmede, test otomasyonu önceden tahmin edilmiş sonuçlarla gerçek sonuçların karşılaştırılması ve testlerin koşulmasını kontrol etmek için(test edilmiş yazılımdan farklı olan) belirli yazılımın kullanılmasıdır. Test otomasyonu tekrar eden fakat çoktan test etme süreçlerinde yer almış gerekli testlerin otomatikleştirebilir veya manuel olarak koşulmasının zor olacağı testleri de içerebilir. Test otomasyonları sürekli paket dağıtımı veya sürekli test etme için kritik öneme sahiptir.

Kara kutu testi yazılımı testinde bir uygulamanın işlevselliğini iç yapısını veya işleyişini kontrol etmeden inceleyen bir yöntemdir. Bu test yöntemi hemen hemen her seviye yazılım testinde uygulanabilir. Sadece üst seviye testlerde değil, birim Testlerinde de sıklıkla kullanılır.

Yazılım, hümanistik (insani), bilimsel teoriler, yönetim ve organizasyon gibi çeşitli alanlarda kullanılan, yukarıdan aşağıya ve aşağıdan yukarıyanın her ikisi de bilgi işleme ve bilgi sıralama stratejisidir. Pratikte, bir düşünce, öğretim veya liderlik biçimi olarak görülebilirler.

JIT ; bilgisayar kodunu çalıştırmanın bir yoludur. Yürütülmeden önce bir program yürütülürken çalışma zamanında derleyici içerir. Genellikle bu, kaynak kodu ve daha sonradan makine diline bytecode kod çevirisini içerir ve bu kod doğrudan doğruya çalıştırılır. Bir JIT derleyicisi uygulayan bir sistem genellikle yürütülen kodu sürekli olarak analiz eder, daha sonra derleme veya tekrar derlemeden elde edilen hızlanmanın bu kodun derlenmesinin yükünden daha ağır olacağı kod bölümlerini tanımlar.

Beyaz şapkalı hacker, bilişim suçları işleyen hackerların kullandıkları teknik ve yöntemleri bilen ve hackerların eylemleri sırasında kullandıkları araçları ve yazılımları tanıyan, iyi niyetli hackerlardır.