1 Mayıs 2011 Pazar

Test Driven Development

Test Driven Development
TDD, kod yazılmadan önce test senaryolarının yazılması, bu senaryolara bağlı olarak kodun yazılması ve refactor edilmesi tekniğidir. TDD yaklaşımıyla, yazılması planlanan kodun test senaryoları, sürekli olarak koşturulabilir ve bu sayede programın daha az hata ile geliştirilmesi sağlanabilir. Ayrıca, waterfall yöntemlerdeki yazılım tasarımı problemi de, isteği karşılayacak sınıfların yazılması zorunluluğu ile büyük ölçüde aşılmaktadır. Bu da geliştirilen yazılımın kalitesini arttırmakla kalmaz, değişim yönetimini ve tutarlılığı maksimize ederek yazılım maliyetlerini düşünüldüğünden çok daha aşağıya çeker.

Bilindiği gibi birim testleri, tam olarak yazılan metotların işlevlerini düzgün bir şekilde yerine getirip getirmediğini test etmektedir. Ancak birim testleri düzgün bir şekilde yapabilmek göründüğü kadar kolay değildir. Öncelikle kullanılacak olan araçların belirlenmesi gerekmektedir. Önceleri kalite kontrol ekipleri tarafından kullanılan, çeşitli script dilleri ile konfigüre edilen büyük test motorlarının birim testleri için yeterince güçlü ve kolay kullanılabilir olmamaları TDD'nin oluşmasına ön ayak olmuştur. TDD bu noktada sadece birim testlerin yapılmasını kolaylaştırmakla kalmaz, kalite kontrol testleri, kullanıcı kabul testleri, yazılım tasarımı ve değişiklik yönetiminin en az maliyetle gerçekleştirilmesine olanak sağlar. Günümüzde geleneksel yöntemlerle geliştirilen çoğu proje, yukarıdaki problemlerden dolayı başarısız olmakta ya da kalitesiz ve demode olduklarından iş ihtiyaçlarını karşılayamamaktadırlar. Ancak, doğru ve bilinçli uygulanan TDD sayesinde, projelerin başarı oranlarının ciddi artışlar gösterdiği ispat edilmiştir. TDD nin getirdiği iş yükü, sağladığı kazancın yanında önemsenmeyecek kadar küçüktür.

Kısaca TDD'nin getirileri şöyle sıralanabilir;
- Sadece ilgili birim testlerinin yapılarak kodun güvenli hale getirilmesi.
- Kod tasarımından kaynaklanabilecek problemlerin ortadan kaldırılması.
- Testlerin bir bütün haline getirilerek, geriye dönük testlerin sürecin önemli bir parçası haline getirilmesi.
- Yeni eklenen kodlar, ya da değiştirilen kodlarda mevcut kodların işlevlerinin bozulmaması.
- Kodların güvenli ortamda nesneye yönelik tasarı mimarisine uygun üretilmesini azami ölçüde kolaylaştırması.
- Kodların dokümantasyon yerine, test senaryolarından daha kolay anlaşılabilir olması.
- Sağlanan güvenli ortam sayesinde, refactoring işlemlerinin güvenli hale getirilmesi.
- Bug oluşması ihtimalinin azaltılması.
- Her an live ortama geçilebilecek kodların çıkarılması.
- Gereksiz kod kalabalığının ortadan kaldırılması.
- Test ekibinin gerçek test işlemlerine odaklanmasının sağlanması.
- Proaktif çalışma sayesinde, sıkıcı bir geliştirme ortamı yerine, eğlenceli ve güvenli bir ortamda motivasyonu yüksek ekiplerin oluşturulabilmesi.

Hiç yorum yok:

Yorum Gönder