Ana içeriğe atla

Terziler ve Yazılımcılar

Teste dayalı yazılım geliştirme (Test Driven Development) fikrini ilk duyduğumda pek şaşırdığımı söyleyemem. Çünkü yaptığım projelerin içine ufak tefek, son kullanıcıyla bir ilgisi olmayan sadece bir problemle karşılaştığım vakit, daha kısa sürede bu problemi çözebilmek için programdaki bazı kod bölümlerini ve değişken değerlerini test eden kodlar yazardım. Bu sayede birçok kez problemleri çok kısa zamanda giderdiğimi hatırlıyorum. TDD ise bu test olayını daha profesyonelce yapan işe verilen addır. İşin temelinde ben şunu görüyorum. Yazılım geliştiren insanların büyük çoğunluğu(bende dahil olmak üzere) yazılım geliştirdiğimiz insanlar kadar bilgisayarın nimetlerinden faydalanamıyor. İnsanlar işlerini daha hızlı ve hatasız yapabilmek için bilgisayarları ve programları kullanıyor. Yazılımcılar ise programları sadece kod yazmak için kullanıyorlar. (Terzi kendi söküğünü dikemezmiş...) Peki bilgisayarın nimetlerinden daha fazla nasıl yararlanabiliriz? Cevap oldukça basittir. :) Bilgisayarın nimetlerinden faydalanmak için kodlar yazıyoruz. Daha fazla yararlanmak için daha fazla kod yazmamız gerekecektir yani yazdığımız kodların doğru çalışıp çalışmadığını test etmek için de kodlar yazacağız. Bu fikir ilk başta pek cazip gelmiyor insana ama başkaları için binlerce satır kod yazayorsunuz biraz da kendiniz için kod yazın. ;) TDD hala gelişmekte olan bir kavram ve kişiden kişiye uygulama değşiklikleri gösterebiliyor. Mesela bazı insanlar "önce kodla sonra testini yaz" derken bazıları "önce testini yaz sonra kodla" yaklaşımını tercih ediyor. Açıkcası ikinci yöntemin nasıl yapıldığına dair her hangi bir fikrim yok. :) Bazı kişiler ise "test edilemeyen kod kötü koddur" kadar iddalı konuşuyorlar. (haksız da sayılmazlar.) Biz ilk önce normal kodumuzu yazıp ardından bu kodun doğru çalışıp çalışmadığını test eden kodumuzu yazacağız. Hemen bir örnek yapalım. Function Topla (Sayi1, Sayi2:Integer):Integer; Begin Result := Sayi1 + Sayi2; End; Procedure TestTopla(); Begin if Topla(1,2) <> 3 Then ShowMessage('Topla fonksiyonu yanlış çalışıyor...') End; İşte ilk örneğimizi yazdık. Anlaşılır olması için çok basit bir örnek seçtik. Böyle bir testi yazmak saçma gelebilir fakat şimdilik olayın mantığını kavramaya çalışalım. Programda her hangi bir hatayla karşılaşmadığınız sürece -ki bu pek mümkün değil- sizin tdd ye ihtiyacınız yok demektir (tebrikler(?)) fakat bir hatayla karşılaştığınız zaman yapacağınz işlemlerden biri de (eğer Topla fonksiyonunun hatalı çalıştığını düşünüyorsanız ) Result := Sayi1 + Sayi2; satırına bir breakpoint koyup o noktada programı durdurarak geriye dönen değerin doğru olup olmadığını debugger da anlamaya çalışmaktır. Şimdi bu işlemleri (topla fonksiyonunun hatalı çalıştığından şüpheye düştüğünüz zamana kadar geçen süreyide eklemeyi unutmayın) yaptığınız süreyle TestTopla(); prosedürünü yazdığınız süreyi (isterseniz TestTopla prosedürünü çalıştırmak için gereken süreyide hesaba katabilirsiniz :) ) karşılaştırın. Hangisi daha fazla zamanınızı çaldı? TDD'nin avantajları sadece bunlarla sınırlı değil. Sizi daya yapısal bir kod yazmak için zorluyor. Butona çift tıkla ve içine kafana göre kodlar yaz olayına pek sinir oluyor. Test yazma ortamını oluşturmak ve testleri çalıştırmak için çeşitli araçlar mevcut. Delphi için DUnit, Java için JUnit .Net için NUnit. Bunların hepsi açık kaynak kodlu ve bedava. Eğer Delphi 2005 kullanıyorsanız DUnit ve NUnit zaten sisteminizde var demektir. DUnit http://dunit.sourceforge.net/ DUnitWizard plug-in for Delphi http://www.xpro.com.au/Freeware/DUnitWizard.htm DUnit: Türkçe: Extreme testing for Delphi (çeviri) http://www.axtelsoft.com/delphi/dunit/dunittr.zip Burdaki belgelerden de DUniti nasıl kuracağınız ve projeyi nasıl oluşturacağınız ile ilgili bilgilere ulaşabilirsiniz. http://www.axtelsoft.com/dtp/docs/ http://www.axtelsoft.com/dtp/docs/doc1.html http://www.axtelsoft.com/dtp/docs/doc2.html http://www.axtelsoft.com/dtp/docs/doc3.html Örnek olması açısından hazırlanmış ufak bir proje. http://delphi53.superihost.com/Delphi/DUnit/DUnitOrnek.rar

Yorumlar

Bu blogdaki popüler yayınlar

Yazılımı Oluşturan Bileşenler Nelerdir?

Yazılımı oluşturan bileşenlerden daha önce söz etmiştik. Şimdi bu bileşenlerin neler oldukları üzerinde biraz duralım. Yazılımı oluşturan bileşenler = Mantık + Veri + Belge + İnsan + Program. Bu bileşenlerin az çok neler olduğunu, neleri kapsadığını biliyoruz ama biz yine de kıyısından köşesinden açıklayalım. Zaten bu yazıdaki asıl amaç yazılım bileşenlerinden belgelemenin yerini ve önemi (dökümantasyon) vurgulamak. Mantık = Yazılım herşeyden önce bir işin bilgisayar aracılığı ile yapılması amacına yöneliktir. Bu nedenle bilgisayarlaştırılmak istenen işin mevcut mantığı bir şekilde yazılıma da yansılıtılmak zorundadır. Veri = Her tür yazılım mutlaka bir veri üzerinde çalışmak durumundadır. Veri işlemeyen yazılımın geliştirilmesi söz konusu değildir. Söz konusu olan veri dış ortamdan alınabileceği gibi yazılımın içerisinde de üretilebilir. Zaten yazılımın temel amacı veriyi bilgiye dönüştürmektir. İnsan = Doğal olarak yazılımın insan bileşeni iki boyutludur. Yazıl

Leyse li'l-insâni illâ mâ seâ

"Leyse li'l-insâni illâ mâ seâ" derken Hudâ; Anlamam hiç meskenetten sen ne beklersin daha? Mehmet Akif Ersoy / Durmayalim Leyse li'l-insâni illâ mâ seâ : Necm Süresi 39. Ayet. [İnsan için ancak çalıştığı vardır.] Meskenet: 1 . Miskinlik, beceriksizlik. 2 . Yoksulluk, fakirlik. (Türk Dil Kurumu) Olay zaten yeterince acik. Yan gelip yatma kardesim. Calis. Bu misralar yazildigi donemde bu anlami tasiyordu fakat zaman ilerledikce baska bir gercegi de gozler onune seriyor.Gerci bu gercek cok kapsamli bir kac satirla anlatilabilecek bir sey degil kaldiki benim bilgim de buna yeterli degil zaten. Ben giris cumlelerini verebilirim gerisini arastirmak yaziyi okuyanlara kalmis. (Matrix gibi bisey oldu bu yaw. Neo'nun kahinle bulusup yanindan ayrildiktan sonra Morpheus ile konusma sahnesi.) Yani kisaca sunu demek istiyorum. Ben bu misrayi ilk okudugumda hic birsey anlamadim. Bu misralari anlayabilmek icin kuran mealine ve turkce sozluklere bakmak zorunda k

Yunus sen bu dünyaya niye geldin?

Göçtü Kervan Ah nice bir uyursun uyanmaz mısın Göçtü kervan kaldık dağlar başında Çağrışı tellallar inanmaz mısın Göçtü kervan kaldık dağlar başında Emr-i hac göçeli hayli zamandır Muhammed cümleye dindir imandır Delilsiz gidilmez yollar yamandır Göçtü kervan kaldık dağlar başında Yunus sen bu dünyaya niye geldin Gece gündüz Hakkı zikretsin dilin Enbiyaya uğramaz ise yolun Göçtü kervan kaldık dağlar başında Yunus Emre