Değerli kardeşim doğru yoldasın, burada yapılan olumsuz yorumlar seni yıldırmasın.
Testi yazılmış kod sana güven verir ve böylece değiştirmekten daha iyisini yapmaktan korkmazsın.
TDD ne yazık ki tam olarak anlaşılamadığı için başta gözlerimiz korkuyor. Fakat biraz dişini sıkıp bu yöntemi kullanmaya başladığın zaman göreceksin ki, TDD olmadan geliştirme yapmak sana zor gelecek.
TDD bir geliştirme metodudur, ve zannedilenin aksine ilk başta bütün testlerin yazıldığı bir metod değildir. TDD, temelde aşağıdaki 3 kurallı döngüden oluşur:
1) RED: kodunun nasıl çalışmasını istediğin düşün ve buna ait FAIL eden bir test yaz.
2) GREEN: bu yazdığın ve FAIL olan testin GREEN yani geçer olmasını sağlayacak production kodunu "en hızı ve kısa şekilde" yaz.
3) REFACTOR: Yazmış olduğun production kodu için artık bir testin var.. korkusuzca refactor et.
Burada en büyük zorluk 1. aşamadaki testi yazabilmek.. Burada çok az kod ve test yazarak başlıyorsun, sonra kademe kademe kodun gelişiyor.. Yani örnek olarak ben sisteme yeni bir feature ekleyeceksem gidip bütün testleri yazıp sonra bittikten sonra production kodunu yazmaya başlamıyorum. Bu tamamen yanlış.
Başka yanlış bilinen bir nokta ise TDD için ekstra zaman harcaman gerektiğidir. Ben 2 senedir TDD kullanan ve 15 senedir PHP geliştiren biri olarak iddia ediyorum ki, TDD olmadan gerçekleşen bir süreç çok çok daha fazla zaman almaktadır. Bunun sebeplerinden bazıları:
- TDD varsa kodunda daha az bug çıkar, ve önceden tespit edersin. Böylece ileride oluşabilecek sorunları önceden halletmiş olursun.
- TDD seni daha fazla decoupled (birbiri ile bağımsız class ve sistemler) kod yazmaya zorladığı için, kodunun tekrar kullanabilirliği ve sağlamlığı artar
- TDD sana sistemin bir yerinde değişik yaptığın en ummadığın köşesinde bir hata oluşursa bu daha sen geliştirmeni bitirmeden haber verir.
- Testler aynı zamanda kodunun nasıl çalıştığını gösteren iyi bir doküman sistemidir.
- TDD metodunda kod yazmadan önce ne yapmak istediğini oturup iyice düşünmen gerekir.
- Testlerin varsa değişimden korkmazsın, her zaman kodunu daha iyi çalışması için refactor edersin. sana güven verir.
- Testlerin varsa Travis vs gibi CI sistemleri ile kodunu production'a göndermen önce otomatik test edebilirsin. Bu da sorunlu kodun daha production'a gitmeden engellenmesidir.
- Takım çalışmasında kod kalitesini ve sağlamlığını garantileyen olmazsa olmaz bir metoddur.
Daha sayılacak çok şey var bunun gibi.
Ülkemizdeki yazılım geliştirme süreçleri ne yazık ki çok iç açıcı değil bunu kabul ediyorum. Ama sen bir geliştirici olarak yaptığın işe saygı göstermek istiyorsan en iyisi olması konusunda çalışmalı ve bunun için gerekli metodolojileri kullanmalısın. En azından hiç yapamıyorsan kendi hobi projelerinde TDD kullanabilirsin.
Bu konuda soracağın, danışacağın bir şey olursa benimle iletişime geçebilirsin.
Selamlar