28 Ocak 2017

Unit Testing (Birim Test) Nedir? ve Kullanılan Araçlar Nelerdir?

Unit Testing (Birim Test) Nedir?

Yazılım Yaşam Döngüsü SDLC içindeki test süreçlerinin başlangıç noktası olan Unit Testing (Birim Testler) yazılımın daha kalite ve az hata ile çıkmasını sağlayan, Developer tarafından yapılan Beyaz Kutu (White Box) testidir. Birim testi, ayrı ayrı test edilebilen yazılım modüllerindeki, programlardaki, nesnelerdeki, sınıflardaki hataları arar ve bunların işleyişini doğrular.

Unit testler genelde fonksiyonel testler, fonksiyonel olmayan testler, yapısal testleri veya sağlamlık testlerinden oluşabilir. Burada bulunan bulgular genelde Developer tarafından fark edilir ve düzeltilir. Developer bu testi yaparken Code Coverage yaparak yazılan kodun ne kadarının test edildiğini görebilir. Oran ne kadar yüksek ise yazılımın kalitesi o kadar iyidir.

Birim Test Üzerine Önemli Bilgiler;

* Code Coverage ve Unit Testing için kullanılan araçlar; Visual Studio Code Coverage, PHPUnit, JUnit, ReSharper, MSpec, dotCover, Mock işlemleri için Mockito, NUnit Framework, BrowserSwarm Javascript, Buster.js Node.js

* Birim Test yaparken elle yazılmış Stub/Mock kullanımından kaçınmak gerekir. Her test başına yalnızca bir Mock Object kullanmak gerekir. Mock ve Stub'lar sade ve anlaşılır olmalıdır.

* Code Coverage'da test kodunu yazarken Public dışındaki Private/Protected erişim belirleyicilerinden kaçınmak gerekir.

* Code Coverage'da Multiple Assert olayından kaçınmak gerekir. Assert: hata varsa Run etmeyi durduruyor, Verify ise hatayı söylüyor ama stepe devam ediyor.

* Bazı projelerde Developer Birim testi Analiz dokümanındaki Happy Path'in doğruluğunu DEV(Local) ortamından test ederek (Input-Output olarak) yapabilir. Bu aslında tam bir birim testi değil sadece yazılan ürünün görsel ve işlevsel (Fonksiyonel) kontrolüdür.

* Birim testi Happy Path'in doğruluğu gibi yapmak isteyen Developer mutlaka Analiz dokümanını okumalı ve detaylı analiz dokümandaki kurallara göre çıkarttığı ürünü hem Lokal hemde DEV ortamında arayüz ve Backend testini yapabilir.

* Code Coverage ile Code Review ayrı kavramlardır. Code Coverage işlemini Developer kendi kodu için yapar ve Test kodlarını kendi oluşturarak kod testi yapar, kendi hatalarını bulur ve düzeltir. Code Review ise yetkin(Senior) bir Developer Junior bir Developer'ın yazdığı kodun Framework(Mimari) çerçevedeki yazımına ve kod kalitesine bakarak test eder ve hatalarını söyleyerek düzeltir. Bunun amacı DEV ortamından UAT gibi kararlı ortamlara kod Merge ederken hatalı ve başka bileşenleri etkileyecek kod atmaması için yapılır.

* Entegrasyon(Smoke) Test case oluştururken Unit Testing yönteminde kullanılan araçları kullanarak test otomasyonununu oluşturabilir ve Steplerinizi işletebilirsiniz.

* Birim testi Entegrasyon testlerinden önce yapılır ve kaynak kod test edilir. Yazılımdaki fonksiyonlarınızı test etme amaçlıdır. Test sonundan hata varsa kodu düzenleme (Refactoring) işlemi yapılır.

* Kodu yazmadan önce Test Driven Development TDD işlemi uygulanarak test caselerini yazıyoruz ardından bu testleri geçecek kodu yazıyoruz. TDD bu şekilde devam eden bir yazılım geliştirme yöntemidir. Burada hem caseleri hemde kodu Developer yazmaktadır.

* Birim Test, yazılım biriminin (Unit of Work) kodunu çağırıp ürettiği tek bir sonucu değerlendiren yazılımdır. Her durumda sadece tek bir sonuç çıkarılmalı ve olması gerektiği düşünülen çıktıyla bu değer karşılaştırılmalıdır.

Kaynaklar
en.wikipedia.org/wiki/Code_coverage (Code Coverage-Test Coverage)
en.wikipedia.org/wiki/Unit_testing (Unit Testing)
tr.wikipedia.org/wiki/Birim_testi (Birim Test)
tr.wikipedia.org/wiki/PHPUnit (PHPUnit)
en.wikipedia.org/wiki/Mockito (Mockito)
msdn.microsoft.com/tr-tr/library/hh694602.aspx (Birim Testi Temelleri)
en.wikipedia.org/wiki/Test-driven_development (Test Driven Development TDD)