"Geçti kadar test testi + refactor" yaklaşımı inanılmaz anti-mühendislik görünüyor.
Hem refactoring hem de TDD ile ilgili yanlış bir anlayışa sahip görünüyorsunuz.
Kod yeniden düzenleme , bir bilgisayar programının kaynak kodunu, yazılımın bazı işlevsel olmayan niteliklerini geliştirmek amacıyla dış işlevsel davranışını değiştirmeden değiştirme işlemidir.
Bu nedenle, geçinceye kadar kodu yeniden sorgulayamazsınız .
TDD, özellikle birim testi (diğer testler benim için makul gözüktüğü için temel gelişmeyi düşündüğüm gibi), bir bileşeni çalışana kadar yeniden tasarlamakla ilgili değil. Bir bileşen tasarlamak ve bileşen tasarlandığı gibi çalışana kadar uygulama üzerinde çalışmakla ilgilidir.
Ayrıca, ünite testinin test üniteleri ile ilgili olduğunu gerçekten anlamak önemlidir . Sıfırdan her zaman çok fazla şey yazma eğilimi nedeniyle, bu birimleri test etmek önemlidir. Bir inşaat mühendisi, kullandığı birimlerin özelliklerini (farklı malzemeler) zaten biliyor ve çalışmalarını bekleyebilir. Bunlar genellikle yazılım mühendisleri için geçerli olmayan iki şeydir ve kullanmadan önce birimleri test etmek için çok iyi bir mühendislik çalışması yapıyor çünkü test edilmiş, yüksek kaliteli bileşenler kullanmak anlamına geliyor.
Bir inşaat mühendisi bir stadyumu örtmek için çatı yapmak için bazı yeni fiber dokular kullanma fikrine sahipse, onu bir ünite olarak test etmesini beklersiniz, yani gerekli özellikleri (örneğin ağırlık, geçirgenlik, stabilite vb.) bundan sonra, onları karşılayana kadar test edin ve düzeltin.
TDD'nin çalışmasının nedeni budur. Çünkü, test edilmiş birimler yazılımı oluşturuyorsanız, şanslar çok daha iyidir, bunları bir araya getirdiğinizde ve sorunların yapıştırma kodunuzda olmasını bekleyemezseniz, testlerinizin iyi kapsamaya girdiğini varsayarsınız.
düzenleme:
Yeniden düzenleme anlamında: işlevlerde değişiklik olmaması . Birim yazı testinin bir noktası, yeniden düzenlemenin kodu ihlal etmemesini sağlamaktır. Bu nedenle TDD, yeniden yapılanmanın yan etkileri olmadığını garanti etmek içindir.
Taneciklilik bir perspektif konusu değildir çünkü dediğim gibi, birim tanecikleri tam olarak tanımlanmış olan test ünitelerini test eder, sistemleri test etmez.
TDD iyi mimariyi teşvik eder. Tüm birimleriniz için spesifikasyonları tanımlamanızı ve uygulamanızı gerektirir, sizi uygulama öncesinde tasarlamaya zorlar, bu sizin düşündüğünüzün tam tersidir. TDD, ayrı ayrı test edilebilecek ve bu nedenle tamamen ayrıştırılmış birimlerin oluşturulmasını belirler.
TDD, spagetti kodunda bir yazılım testi yaptığım ve pastayı geçene kadar karıştırdığım anlamına gelmiyor.
İnşaat mühendisliğine zıt olarak, yazılım mühendisliğinde genellikle bir proje sürekli olarak gelişir. İnşaat mühendisliğinde, A pozisyonunda, x ton taşıyabilecek ve saatte n araç için yeterince geniş bir köprü kurma zorunluluğu vardır.
Yazılım mühendisliğinde, müşteri temelde herhangi bir noktada (tamamlandıktan sonra) karar verebilir, iki katlı bir köprü istiyor ve en yakın otoyolla bağlantı kurmasını istiyor ve onun bir asansör köprüsü olmasını istiyor, çünkü şirketi Son zamanlarda yelkenli gemileri kullanmaya başladı.
Yazılım mühendisleri tasarımları değiştirmekle görevlidir . Tasarımları kusurlu olduğu için değil, modus operandi olduğu için değil. Yazılım iyi tasarlanmışsa, tüm düşük seviyeli bileşenleri yeniden yazmak zorunda kalmadan yüksek düzeyde yeniden tasarlanabilir.
TDD, ayrı ayrı test edilmiş, yüksek oranda ayrıştırılmış bileşenlere sahip yazılım oluşturma ile ilgilidir. İyi yürütülmüş, gereksinimlerdeki değişikliklere cevap vermemenizden çok daha hızlı ve daha güvenli şekilde yanıt vermenize yardımcı olacaktır.
TDD geliştirme sürecine gereksinimler ekler, ancak diğer kalite güvence yöntemlerini yasaklamaz. Verilen, TDD, resmi doğrulama ile aynı güvenliği sağlamaz, ancak daha sonra, resmi doğrulama, son derece maliyetli ve sistem düzeyinde kullanmak imkansızdır. Ve yine de istersen ikisini de birleştirebilirsin.
TDD ayrıca, sistem düzeyinde gerçekleştirilen birim testleri dışındaki testleri de kapsar. Bunları açıklaması kolay, ancak uygulaması zor ve ölçülmesi zor buluyorum. Ayrıca, oldukça makul. Gereksinimlerini kesinlikle görmeme rağmen, onlara gerçekten fikir olarak değer vermiyorum.
Sonunda hiçbir araç aslında bir sorunu çözmez. Araçlar sadece bir problem çözmeyi kolaylaştırır. Sorabilirsiniz: Bir keski, harika bir mimariye nasıl yardımcı olur? Düz duvarlar yapmayı planlıyorsanız, düz tuğlalar yardımcı olacaktır. Ve evet, kabul edildi, eğer o aleti bir salaka verirseniz, muhtemelen sonunda ayağından atar, ama bu keskilerin suçu değil, TDD'nin acemilere yanlış güvenlik sağladığı bir kusur olmadığı sürece, kim iyi testler yazmaz.
Sonuç olarak, TDD'nin TDD'den çok daha iyi çalıştığını söyleyebiliriz.