Ara:

Şu an misafir modundasın. YazılımDevi olmak ister misin? Giriş Yap / Kayıt Ol

Makale Hakkında!

Test Güdümlü Geliştirme Süreçleri Serisi 1, Test Nedir? Önemini Kavrayalım! Makale Yazarı Okunma Sayısı Eklenme Tarihi
Engin Demiroğ 4815 03.02.2012

Makale Detayı

 

 Test Güdümlü Geliştirme Süreçleri Serisi 1, Test Nedir? Önemini Kavrayalım!

 

Yaptığımız yazılımlarda en önemli unsur müşterinin isteklerine uygun çıktıyı üretmektir. Ancak, müşteri “tamamdır,budur” dediği zaman proje kabul edilir. Her yazılımın bir müşterisi olduğuna göre müşteri odaklı çalışma ihtiyaçları da kaçınılmazdır. Dolayısıyla yazılımların öylesine profesyonel yazılması gereklidir ki, müşteri ihtiyaçlarına en az hasarla cevap verebilmeliyiz. Çünkü en temel gerçeklerden birisi şudur: “Değişim(Change), yazılımın doğal sonucudur.”
 
Bizler genellikle yaptığımız yazılımları, mevcut istenenlere karşılık vermesi amacıyla oluştururuz. Fakat bir yazılım ortaya çıkarıldıktan sonra birbiri ardına gelen yeni istekler bizi dirençsiz hale getirir. Çünkü zamanında,” o zamanı” kurtarmak için yazdığımız kod, bugün başımızı ağrıtıyor. Bugüne karşılık veremiyor. Bu durumda biz yazılım geliştiricilerin ve takım liderlerinin, böyle sorunlarla karşılaşmamak adına uyguladığımız teknikler var. Kısaca bir kaç tanesini sayacak olursak OOP, Design Patterns,IoC, N Katmanlı mimari, Test Güdümlü Geliştirme... diyebiliriz.
 
Ben bu yazı serimde, Test güdümlü Geliştirme süreçleri üzerinde duracağım. Öncelikle test’in ne olduğunu, önemini kavrayıp, daha sonra çok daha ileri seviye test yazma teknikleri ile devam edeceğiz. Özellikle basitten başlamamın nedeni, test geliştirme süreçlerine henüz başlamamış arkadaşların sayısının çok fazla olmasıdır.   Bu yazı dizisini ilk bir ay yoğun sonra ara ara ek makalelerle devam ettirmeyi planlıyorum. Haydi kolay gelsin o zaman : )
 
 

Test Nedir?

 

 
Yaptığımız operasyonların doğruluğunu ve ileride de doğru kalacağını garanti eden yapılardır. Genel anlamda düşündüğümüz zaman aslında biz testi ikiye ayırıyoruz.
 
1)Unit(Birim) Test: Küçük ve hızlı çalışması amaçlanan, çabuk oluşturulan testlerdir. Genellikle(hatta herzaman bile diyebiliriz) bir metodun doğruluğunu test etme eğilimi vardır. Bu durumda En Popüler Makale Listesini getiren bir metodunuzun var olduğunu düşünürsek, birim testler, bu metodun işlevselliğini koruduğunu ve koruyacağını garanti eder. Bir metodu test eden birim testleriniz bir tane olabileceği gibi yüz tane de olabilir.
 
Aşağıda bu söylediklerimi doğrulayan ve internette en çok rastladığım birim test tanımını sizlerle paylaşıyorum.
 
 

A unit test is a piece of a code (usually a method) that invokes another piece of code and checks the correctness of some assumptions afterward. If the assumptions turn out to be wrong, the unit test has failed. A “unit” is a method or function.

 

 
2)Integration Test: Yazılım içerisinde birbiriyle bağımlı bir kaç modulün entegrasyonunu test eder. Aslında birim testlerin sonraki adımı bile denebilir. Fakat özellikle test güdümlü geliştirmeye başlayan arkadaşların en sık yaptığı hata, birim test yazmak için başlayıp, entegrasyon testi yapmalarıdır. Halbuki entegrasyon testleri, sadece bir kaç modülün biraraya geldiğinde ortaya çıkardıkları sonuç ile ilgilenir. Bu da metod bazlı doğrulamanın önüne geçer.
 
 

Test Yazmak Önemli midir?

 

 
Şimdi unit ve integration testlerini birbirinden ayıran bir örnek vermek istiyorum. Bu örnek aynı zamanda test yazmanın önemi konusunda bize bir fikir verecek.
 
Bir adet müşteri tablonuz var ve içinde 10 tane ürün almış(UA), 10 tane hiç almamış (HA) ve 10 tane de  sipariş vermiş(SV) müşteri var. Kısacası toplamda 30 müşteri. Varsayalım ki müşterilere mesaj atma modulleriniz var.Birinci modul mevcut müşterilerinizi elde tutmayı amaçlıyor, ikincisi de müşteri kazanmayı amaçlıyor. İki metod yazdınız, bunlardan birincisi ürün almış(UA) müşterilere mesaj atarken, diğeri kalan 20 kişiye mesaj atıyor(HA+SV).
 
Bu durumda bir yıl sonra şirket politikası değişti ve birinci modülde (UA+SV) lere mesaj atmaya karar verdiniz. Bu durumu yazılımcıya bildirdiğinizde, bunu düzeltmek onun için çok kolaydır. Tek yapması gereken SQL cümleciğini ufak bir “OR” eklemektir. Şimdi sanırım buradaki sorunu yakaladınız.
 
Yazılımcının yaptığı değişiklik her ne kadar hata vermese de sonucu hatalıdır. Çünkü hem ilk modülde hem de ikinci modülde sipariş vermiş(SV) müşterilere mesaj atılmaktadır.
 
Eğer yazılımcı ufak bir test yazmış olsa ve aşağıdaki gibi bir test kuralı(Assert) yazmış olsaydı, yaptığı değişiklikte anında hatadan haberi olacaktı.
 
 

Metod1.Count  + Metod2.Count = Tablo.Count

 

 
İşte gördüğünüz gibi test yazıldığında, yazılım için gelen değişimin, bize maaliyeti ortadan kaldırılacaktır. Çünkü hepimiz biliriz ki, o kadar kodu yazdıktan sonra 6 ay sonra ne yazdığımızı hatırlamamız mümkün bile değildir. Bırakalım bunu test düşünsün!
 
Aslına bakarsanız test yazmanın en büyük gayesi de budur. Daha sıcağı sıcağına yazarken, bütün bildiklerimizi kural olarak teste dökmektir.
 
Özellikle eğitime ve danışmanlıklara gittiğim projelerde ciddi bir test eksikliği olduğunu açıkça söyleyebilirim. Bunun nedeni olarak, birçoğumuz test yazmanın vakit kaybı olduğunu söyler. Halbu ki bu çok ciddi bir yanılgıdır. Test yazmak başta daha fazla zaman istiyor gibi görünür fakat, ilerleyen süreçlerde değişimler ve düzeltmeler geldikçe, yazdığınız testlerden dolayı çok hızlı ilerlersiniz. Aşağıda testin olduğu ve olmadığı ortamı resmeden bir grafik görüyoruz.
 
 
 

Şimdi de bu örneği integration ve unit test açısından yorumlayalım.

 

 
Örneğimiz dikkat ederseniz birden fazla metodu biraraya getirerek test ediyor. Dolayısıyla bu bir integration testtir. Fakat örneğin, birinci metodun içinde sadece ürün almış(UA) müşterilerinin olması kuralını bir unit test olarak da yazmalıyız. Dolayısıyla genel olarak unit testlerin yazılması aslında integration testlere gerekliliği de bir çok noktada ortadan kaldırır.
 
Bu durumda bizim özellikle üzerinde durmamız gereken test türünün birim testler olduğunu söyleyebilirim.
 
Serinin ikinci yazısında görüşmek dileğiyle.
 
 

Engin Demiroğ,MCT,engin@yazilimdevi.com

 

 

Makale Tagları

Makale Dosyası

Makaleye Ait Dosya Bulunamamıştır

Paylaş


Yazar Hakkında
Genel Bilgiler   Yazar Hakkında
Ad: Engin Demiroğ 1985 doğumlu Engin Demiroğ Başkent Üniversitesi Lisans Yönetim Bilişim Sistemleri bölümü mezunudur, Yüksek Lisans Bilgisayar Mühendisliği öğrencisidir. Lise yıllarından itibaren yazılım teknolojileri ile uğraşmaktadır. Bir çok kurumsal projede çalışmış olan yazarımız şu an İnfopark/Ankara bünyesinde kamu kuruluşlarına ve özel kuruluşlara yazılım ve veritabanı danışmanlığı hizmeti vermektedir. Yazarımızın uzmanlaştığı alanlar .Net, Sql Server,Sharepoint,Team Foundation Server, Test ve Modellemedir. YazılımDevi.Com'un kurucularından olan Engin Demiroğ YazılımDevi.Com başta olmak üzere bir çok sitede yüzden fazla makale ve video yayını yapmıştır. Aynı zamanda yazarımız bir çok üniversite ve kuruluşta yüzden fazla eğitim ve semineri başarı ile yürütmüştür.
Kurum: İnfopark
Meslek: Yazilim Danışmanı / Eğitmeni
E-Mail: engin@yazilimdevi.com
Web Sitesi: http://www.engindemirog.com
Makale-Video: 222

Bu makale için yapılmış yorumlar

Bu makale hakkında yorum yapınız!...

Bu makale hakkında yorum yapabilmek için lütfen üye olunuz veya giriş yapınız.

Konular

Yazarlar

Son Eklenen Makaleler

Son Eklenen Videolar

Yazar Blogları

Ziyaretçi İstatistiği

ImageOnline : 548         Bugün : 1928

Bu Ay : 76419        Bu Yıl : 1374123

Toplam : 4122737

Kullanıcı Giriş Paneli!
E-Mail:
Şifreniz:
Giriş Yap

Şifremi Unuttum!
E-Mail:
    Gönder