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
Bazıları haber sunarken güzel görünmeye çalışıyorlar bazıları ise güzel oldukları için haber sunuyorlar. Bunun yanında hem haber sunan hem de güzel olanlarda yok değil. Nasıl bir haber sunduğu konusunda (tonlama, vurgu, mimik) fazla bilgim olmasada çok güzel bi hanım kızımız olduğu gözlerden kaçmıyor Melissa Theuriau'in. Meslek hayatında başarılı olmasını dilemekten başka bir şey söyleyemiyorum :) Türkiye tarafında ise ön plana çıkan Banu Güven (Ntv) ve Burcu Esmersoy (CnnTurk) var. Bana göre Banu Güven işini yaparken güzel görünüyor Burcu ise güzel göründüğü için iş yapıyor. Her ikisininde konuşmakla ilgili bir takım problemleri var ama her zaman için Banu Güven'i tek geçerim bu alemde :)
Yorumlar