Test Driven Development(TDD) nedir? Ne değildir?

      Merhaba Arkadaşlar, evet sizlerle çok şeyler paylaşmak ve uzun uzun makale yazıp, örnek kodlarla bunu pekiştrmek çok isterdim. Bu benim zevk aldığım bir etkinliğim. Fakat bende bazı teknolojileri öğrenme ve kod yazma evresindeyim ve yetiştirmem gereken bazı projeler var. Sanırım ileriki yıllarda bunu daha iyi yapacağıma inanıyorum. Tek sorunum bu iş için zaman ayırabilmek. Buda ne zaman olur bilmiyorum..
      TDD bence profesyonel bir programcının olmazsa olmaz yöntemlerinden biridir. Ben bunu gerçek hayatda (Real Word) şu şekilde açıklarsam sanırım doğru olur.
      Diyelimki ben bir uçak motoru üreticisiyim ve ürettiğim motor gelişime açık bir motor tabiki. Bu motorun yağışlı havalarda, normal havada, olagan üstü durumlarda hiç zorlanmadan görevinin yapması gerekiyor. Ben bir uçak üretici olarak havanın o kouşullarda olmasını, bir pilot bulmayı, motoru takacak bir uçak gövdesinin olmasını bekleyemem, beklememek zorundayım. Dolayısıyla bunu uygun bir similator hazırlayıyorum, biraz zor oluyor ama hazırlıyorum. Böylece ileriki geliştirmelerlede diğer koşullardan bağımsız(Dependecy) bir ürün üretebilirim. Hızlı, çevik(Agile) olmam için muhakkak bağımzısz bir test ortamına ihtiyacım var.
      Kod yazarkende katmanlı kod yazarken katmanların birbirinden mümkün olduğunca bağızsız olmasına özen göstermek gerekir. Bunu başarmak test edilebilirliğide artırmaktadır. Yazdığım kodlar, servislerden, veri tabanından, diğer eklenecek nesne(object), kural(rule), davranışlardan bağımsız olmalı. Musteriden gelen isteklere-(returns),Yani bir anlamda gelişime açık fakat değişime kapalı olmalı. bunun için bazı yazılım şablonları(paterns) ve kurallarına uymamız(priciple) gerekmekte. Bu patern ve şablonlar bence biir yazılımcının ilk öğrenmesi gereken konulardır. Bir kodu diğer etmenlerden bağımsız hale getirmek için bağızsızlık aşılaması(Dependency injection), bağızsızlığın tesr çevrilmesi(Dependecy inversion), gelişime açık, değişime kapalı (open closed priciple), arabirimleri parçalama (Interface Segregation), bir sınıfın bir sorumluluğu olması(Single Responsibility) vs. Object patern, reprository patern, MVC,MVVM gibi bir çok patern ve kalıbı bilmek ve uymak zorundadır. Zaman olduğundna bunları tek tek ele alacağım. Fakat siz bu kavramlar hakkında bir çok yazı ve örnek kod bulabilirsiniz.
      Cihat Altuntaş TDD kısaca özellemiş, çok hoşuma gitti, bende sizlerle paylaşmak istedim.

 Test Driven Development(TDD) nedir?

  1. Daha hızlı yazılım geliştirme
  2. Çok daha az hata içeren kod
  3. Testler kodun çalıştırılabilir örnek dökümanını oluşturur.
  4. Daha iyi tasarıma sahip daha kaliteli kod
  5. Hataların daha çabuk bulunması ve düzeltmesi
  6. Kullanıcı bakış açısından yazılan daha anlaşılabilir kod
  7. Basit ,gereksiz kompekslik içermeyen kod
  8. Kodun tekrar düzenlenmesini oldukça kolaylaştırması
  9. Daha eğlenceli

Ne değildir?

  • Yazılımı test etmek ile alakalı birşey değildir.
  • Projedeki Tester arkadaşların yapması gereken bir aktivite değildir.
  • Kodu yazıp artından test yazmak değildir.
  • Geliştirme süresini arttıran bir stil değildir.
  • Fantezi ürünü gerçek projelerde kullanılmayan bir geliştirme biçimi değildir.
  • Sadece bazı dillerde,bazı projelerde kullanılabilecek bir aktivite değildir.
  • Unit Testing framework kullanmak değildir.
  • Gereksiz hiç değildir.

 

Add comment

The file '/Custom/Widgets/Calendar/widget.cshtml' does not exist.The file '/Custom/Widgets/Category list/widget.cshtml' does not exist.The file '/Custom/Widgets/Tag cloud/widget.cshtml' does not exist.The file '/Custom/Widgets/Page List/widget.cshtml' does not exist.The file '/Custom/Widgets/Month List/widget.cshtml' does not exist.