Test için belirli bir yaklaşımın ne kadar değerli olduğu, geliştirilmekte olan sistemin ne kadar kritik olduğu ve diğer bazı kritik görev sistemlerinin ne kadar bağımlı olduğuna bağlıdır. Web siteniz için basit bir ziyaretçi defteri komut dosyası, kritik bir görev olarak kabul edilmeyebilir, ancak üzerinde çalıştığı web sitesi, veritabanına filtrelenmemiş girdi girilmesine izin veren bir hata ile tehlikeye girebilirse ve bu site çok önemli bir hizmet sunarsa, o zaman aniden çok daha fazlası olur. Ziyaretçi defteri betiğinin iyice test edilmesi için önemlidir. Aynısı çerçeve / kütüphane kodu için de geçerlidir. Hata içeren bir çerçeve geliştirirseniz, bu çerçeve özelliğini kullanan her uygulamanın da aynı hatayı vardır.
Teste dayalı geliştirme, testlerde size ekstra bir güvenlik katmanı sağlar. Testleri yanına veya test etmek istediğiniz koddan sonra bile yazarsanız, testlerin yanlış yapılması riski vardır. Önce tüm testleri yazarsanız, kodun dahili olarak nasıl çalıştığını yazdığınız testleri etkileyemez ve bu nedenle yanlışlıkla belirli bir hatalı çıkışın doğru olduğunu düşünen testleri yazmanız olasılığını azaltır.
Test odaklı geliştirme, geliştiricilerin test etmesi kolay bir kod yazmasını da teşvik eder, çünkü kendilerine yapacak daha fazla iş vermek istemezler! Test edilmesi kolay olan kod, anlaşılması, tekrar kullanılması ve bakımı kolay bir kod olma eğilimindedir.
Bakım, TDD'nin ödüllerini gerçekten alacağınız yerdir. Yazılıma harcanan programlama çabasının büyük çoğunluğu bakımla ilgilidir. Bu, yeni özellikler vermek, hataları düzeltmek veya yeni durumlara uyarlamak için canlı kodda değişiklik yapmak anlamına gelir. Bu tür değişiklikler yaparken, yaptığınız değişikliklerin istenen etkiye sahip olduğundan ve daha da önemlisi, beklenmedik bir efekt etkisi olmadığından emin olmak istersiniz. Kodunuz için eksiksiz bir test paketiniz varsa, yaptığınız değişikliklerin başka bir şeyi bozmadığını doğrulamak kolaydır ve yaptığınız değişiklikler başka bir şeyi bozarsa nedenini hemen bulabilirsiniz. Yararları uzun vadelidir.
Sorunuzda aşağıdakileri söylediniz:
Bazı şeyler için test yazarken bazı faydalar görüyorum, ama çok az. Ve önce testi yazma fikrini sevsem de, gerçek kodun hatalarını ayıklamaktan daha çok gerçekten ne demek istediklerini söylemelerini sağlamak için testlerimde hata ayıklamaya çalışmakla daha fazla zaman harcıyorum. Bunun nedeni muhtemelen test kodunun genellikle test ettiği koddan daha karmaşık olmasıdır. Umarım bu sadece mevcut araçlarla deneyimsizliktir (bu durumda rspec).
Bu bana pek test yaptırmadığınızı gösteriyor. Bir birim testinin son derece basit olması beklenir, yalnızca bir yöntem çağrıları dizisi, ardından beklenen sonucu gerçek sonuçla karşılaştırmak için bir iddia. Basit olmaları gerekir çünkü testlerinizdeki hatalar felaket olur ve teste döngüler, dallanma veya başka bir program atma kontrolü eklerseniz, testin içine bir hata girmesi olasılığı artar. Çok fazla zaman ayıklama testi yapıyorsanız, testlerinizin aşırı karmaşık olduğunu ve basitleştirmeniz gerektiğini gösterir.
Testler basitleştirilemiyorsa, bu gerçek tek başına test edilen kodda yanlış bir şey olduğunu gösterir. Örneğin, sınıfınızın uzun yöntemleri varsa, çok sayıda if / elseif / else veya switch deyimine sahip yöntemler veya sınıfın şu anki durumu tarafından dikte edilen karmaşık etkileşimlere sahip çok sayıda yöntem varsa, o zaman testlerin gerekliliği gereği karmaşık olması gerekir. tam kod kapsamı sağlamak ve tüm olasılıkları test etmek. Sınıfınızın diğer sınıflara zor kodlanmış bağımlılığı varsa, bu, kodunuzu etkili bir şekilde test etmek için tekrar atlamak zorunda kalacaksınız.
Sınıflarınızı küçük tutup yüksek odaklanmış, birkaç çalışma yoluna sahip kısa yöntemlerle tutarsanız ve dahili durumu ortadan kaldırmaya çalışırsanız, testler basitleştirilebilir. Ve bu da meselenin özü. İyi kod, doğal olarak test edilmesi kolaydır. Kodun test edilmesi kolay değilse, muhtemelen yanlış bir şeyler vardır.
Birim testleri yazmak, uzun vadede size fayda sağlayan bir şeydir ve onlardan kaçınmak, daha sonra sorun yaşamanızı sağlar. Teknik borç kavramına aşina olmayabilir, ancak finansal borçlara çok benziyor. Test yazmamak, kod yazmamak, kodlanmış bağımlılıklarda yazmak ve böylece borçlanmanın yolları vardır. Köşeleri daha erken keserek zamanınızı ödünç alırsınız ve bu, sıkı bir son tarihe ulaşmanıza yardımcı olabilir, ancak projede daha önce kazandığınız zaman ödünç verilir. Kodu temizlemeden, düzgün yorum yapmadan veya bir test takımı oluşturmadan geçen her gün ilginizi çekecektir. Ne kadar uzun sürerse, ilgi de o kadar artar. Sonunda, kodunuzun istenmeyen sonuçları tetiklemeden değişiklik yapamayacağınız karışık bir karmaşa haline geldiğini keşfedeceksiniz.
Ünite testlerini erken yazmayı ve bunları "teknik kredi" biçimi olarak güncel tutmayı düşünebilirsiniz. İyi uygulamaların takibi için projeye erken zaman ayırarak bankaya zaman ayırıyorsunuz. Daha sonra projenin bakım aşamasına geçtiğinde bu öngörüye ilgi kazanacaksınız. Bir değişiklik yapmak istediğinizde, değişikliğin doğruluğunu kolayca doğrulayabilirsiniz ve istenmeyen yan etkileri yoktur ve hızlı ve telaşsız bir şekilde kapıdan güncellemeleri alabilirsiniz. Hatalar ortaya çıkarsa, hatayı uygulayan yeni bir birim testi ekleyebilir, ardından kodu kodda düzeltebilirsiniz. Ünite testini bir sonraki çalıştırışınızda, hatanın çözüldüğünü ve başka sorunlara neden olmadığını doğrulayabilirsiniz. Dahası, "gerilemeler" den kaçınacaksınız,
TL: DR - Evet, onlar gerçek bir dünya yardımı, ancak bir yatırım. Avantajlar ancak daha sonra belirginleşir.