TDD (Test-Driven Development) nedir? Red-Green-Refactor döngüsünü bir örnekle anlatın.

Cevap

TDD, kodu yazmadan önce o kodun davranışını tanımlayan başarısız bir test yazdığınız bir geliştirme disiplinidir. Kent Beck tarafından popülerleştirilmiştir ve üç adımlık kısa bir döngüyle ilerler:

  1. Red: istenen davranış için küçük bir test yaz; çalıştır ve başarısız olduğunu gör.
  2. Green: testi geçirecek en basit kodu yaz.
  3. Refactor: testler yeşilken kodu (ve testleri) temizle, tekrarları kaldır.

Örnek: FizzBuzz benzeri bir kural

Red:

def test_returns_number_as_string():
    assert fizzbuzz(1) == "1"

fizzbuzz tanımlı değil, test kırmızı.

Green:

def fizzbuzz(n):
    return str(n)

Red (yeni davranış):

def test_multiple_of_three_returns_fizz():
    assert fizzbuzz(3) == "Fizz"

Green:

def fizzbuzz(n):
    if n % 3 == 0:
        return "Fizz"
    return str(n)

Ardından 5 ve 15 için testler eklenir; her adımda kod biraz genelleşir. Refactor aşamasında kurallar bir listeye taşınabilir.

Faydaları

  • Test edilebilir, küçük ve gevşek bağlı (loosely coupled) tasarımı zorlar.
  • Refactoring için güvenlik ağı oluşturur.
  • Gereksinimi kod yazmadan önce netleştirmeye iter.
  • Hata ayıklama süresini azaltır; bir şey bozulduğunda son birkaç dakikadaki değişiklik suçludur.

Eleştiriler ve sınırlamalar

  • Keşif aşamasındaki prototiplerde veya belirsiz UI işlerinde yavaşlatabilir.
  • Uygulama detayına bağlı testler (aşırı mock kullanımı) refactoring'i zorlaştırabilir; davranışı test edin, implementasyonu değil.
  • Disiplin ister; ekipte sadece bir kişi uygularsa fayda sınırlı kalır.

İlişkili kavramlar

  • BDD (Behavior-Driven Development): testleri iş diliyle yazar (Given-When-Then, Cucumber/Gherkin).
  • ATDD: kabul kriterlerini önce test olarak yazmak.
  1. Testi olmayan büyük bir legacy kod tabanında değişiklik yapmanız gerekiyor. Nasıl ilerlersiniz?ZorYazılım Geliştirme SüreçleriYazılım Müh.
  2. Semantic Versioning (SemVer) nedir? 2.4.1 sürümündeki her sayı neyi ifade eder?KolayYazılım Geliştirme SüreçleriYazılım Müh.
  3. Teknik borç (technical debt) nedir? Ekipte teknik borcu nasıl yönetir ve iş tarafına nasıl anlatırsınız?ZorYazılım Geliştirme SüreçleriYazılım Müh.
  4. CI/CD nedir? Continuous delivery ile continuous deployment arasındaki fark nedir? Tipik bir pipeline'da hangi adımlar olur?OrtaYazılım Geliştirme SüreçleriYazılım Müh.
  5. Test piramidi nedir? Unit, integration ve end-to-end testler arasındaki farklar nelerdir?OrtaYazılım Geliştirme SüreçleriYazılım Müh.
  6. Code review'da nelere dikkat edersiniz? İyi bir pull request nasıl hazırlanır?OrtaYazılım Geliştirme SüreçleriYazılım Müh.

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle