TDD(Test Driven Development) - Test Yönelimli Programlama Eğitimi
Test Driven Development son yıllarda profesyonel yazılım geliştiricilerin kullandığı bir pratik haline gelmiştir. Kısaca TDD pratiğinde kod yazımı testler tarafından yönlendirilir. Yazılacak kodun
işlevini test ederek doğrulayacak olan test kodu daha önce yazılır. Bu işlem için genellikle xUnit araçları kullanılır. Test kodu daha sonra çalıştırılarak sistemin mevzubahis işlevi yerine
getirmediği görülür yani test başarısız olur. Sonraki aşamada testin geçmesi için gerekli kod hazırlanır ve test tekrar çalıştırılarak testin geçtiği yani sistemin yeni işlevi yerine getirdiği
doğrulanır. Pratik yeni testlerle devam eder.
Bu pratik ilk bakışta kod yazım maliyetini arttırıyor gibi görünse de özellikle projenin ilerki aşamalarında bu maliyeti kat kat amorti eder.
Bu pratiğin avantajları şu şekilde özetlenebilir.
- Kodun istenen işlevi yerine getirdiğine dair yüzde 100 güven duygusu
- Bug sayısının en aza indirilmesi.
- Gereksinimlerin yanlış anlaşılması
- Kod değişikliklerinin mevcut fonksiyonaliteyi bozma riskinin ortadan kalkması
- Bu testlerin regresyon testlerinin bir parçası haline gelmesi ve otomatik binlerce testin çalıştırılabilmesi
- Kolay ve risksiz kurulumların sağlanması. Projenin her an kuruluma hazır olması
- Kodların test edilebilir yazılması sayesinde sade ve nesne yönelimli programlama prensiplerine uygun olması
- Testlerin sağladığı güvenlik sayesinde projenin ilerki aşamalarında dahi tasarım iyileştirmelerinin risk olmadan yapılabilmesi
- Testlerin kodlar için dokümantasyon haline gelmesi. Kodun hangi işlevi yerine getirdiği sorusuna cevap vermeleri
- Kod tekrarları, fonksiyonel olmayan kodların ortadan kaldırılması
- Testçi personelin zamanında tasarruf sağlanması. Bugların azalması sayesinde proaktif çalışabilmelerinin sağlanması.
- Geliştiricilerin küçük adımlarla(bir test- bir production kod) çalışmaları sayesinde dikkatlerini daha uzun süre sağlayabilmeleri
- Erich Gamma nın dediği gibi yazılım geliştirmenin daha eğlenceli ve verimli hale gelmesi
Eğitimci
Eğitimcimiz Cenk Çivici 2001 yılından beri Amerika'da ve Ingiltere'de Fortune 500 şirketler için yapılan projelerde Agile pratiklerin kullanımı ile ilgili olarak
danışmanlık yapmaktadır. Bu pratiklerin kullanımı konusunda lider Thoughtworks firmasında Senior Consultant olarak görev almıştır. Halen Londra ' da danışmanlık faaliyetlerine
devam etmektedir.Türkiye 'de Prime teknoloji bünyesinde Agile süreçler ve pratikleri konusunda eğitimler vererek yurtdışında kazandığı deneyimleri Türk şirketleri ile paylaşmayı
amaçlamaktadır.
Süre
Eğitim süresi 2 gündür. Eğitimin ikinci günü gerçek proje gereksinimlerine benzer gereksinimler TDD pratiği uygulanarak geliştirilecektir. Pratik eğitimde kullanılacak
teknolojiler katılımcıların isteklerine göre şekillendirilir. Bu eğitim isteğe göre .NET veya J2EE uygulama platformları kullanılarak verilir.
TDD - Test Driven Development - İçerik
Overview of TDD
- Theory
- Principles
- Mechanics
- Test Classification(Acceptance, Integration, Unit, Performance) tests
xUnit Tools
- XUnit Design
Test Structure (Suites, Runners, Listeners,TestCases)
- Practice : Stack implementation
Top down TDD with Mock Objects
- IOC Principles and Dependency Injection pattern
- Improving Testability of Designs
- Mock versus Stubs
- Dynamic Mocking libraries
- Practice 2: Caching
Unit test quality / patterns
- Fine grained,Simple,Isolated,Fast,Readable
- Naming conventions
- Testing for behaviour
- Using ObjectBuilder/ObjectMother pattern in test preparation
- Testing with the database
Common test smells
- Long tests
- Using mocks instead of stubs
- Testing implementation - coupling tests to impl
- Too many assertions
- Intermittent Failures
Automating Test Suites
- Integration with Build tools
- Test Coverage and Analysis
- Coverage Tools
- Integration with Continuous Integration tools
- Intermittent Failures
- Multilevel builds in large scale projects
Acceptance Test Driven Development
- Acceptance Tests
- User Story & Acceptance Criteria
- Acceptance Test tools(e.g Fit, Selenium, Watir)
- The Process
- Best Practices
Workshop Activities
- Blog Web Application with TDD
- Template Engine with TDD
- Bowling Score calculation