PRIMETEKNOLOJI
 AGILE & OPEN JAVA
AGILE Solutions
 
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