Bu blogu Joel Spolsky tarafından daha iyi kodlamak için 12 adımda okuyordum . Teste Dayalı Geliştirme'nin yokluğu beni gerçekten şaşırttı. Bu yüzden soruyu Gurus'a atmak istiyorum. TDD gerçekten çabaya değmez mi?
Bu blogu Joel Spolsky tarafından daha iyi kodlamak için 12 adımda okuyordum . Teste Dayalı Geliştirme'nin yokluğu beni gerçekten şaşırttı. Bu yüzden soruyu Gurus'a atmak istiyorum. TDD gerçekten çabaya değmez mi?
Yanıtlar:
Kent Beck'in önce test odaklı geliştirme hemen hemen hiç bilinmiyordu kitap iki yıl, 2002 yılında çıktı sonra Joel o yazı yazdım. O zaman soru, Joel'in testini neden güncellemediği ya da TDD'nin 2000 yılında daha iyi bilinmesi durumunda, bunu kriterleri arasına dahil etmesi halinde olur mu?
Yapamayacağına inanıyorum, basit bir nedenden ötürü, önemli olan şey, o sürecin belirli ayrıntılarına değil, iyi tanımlanmış bir sürece sahip olmanızdır. Belirli bir sürüm kontrol sistemi belirtmeden sürüm kontrolünü önermesi veya belirli bir marka önermeden hata veritabanına sahip olmasını tavsiye etmesinin nedeni budur. İyi takımlar sürekli olarak kendilerini geliştirir ve uyarlarlar ve o sırada kendi durumlarına uygun olan araçları ve süreçleri kullanırlar. Bazı takımlar için bu kesinlikle TDD demektir. Diğer takımlar için çok değil. TDD'yi kabul ediyorsanız, kargo kültü zihniyetinin dışına çıkmadığından emin olun .
Joel bunu özellikle birkaç yerde ele aldı.
Test testlerinin pek çok önemli sorunu, özellikle de “bu yazılımın kullanıcı arayüzü berbat ediyor mu?” Gibi öznel konuları yakalayamadığını açıkladı. Ona göre , Microsoft'taki otomatikleştirilmiş testlere aşırı güvenmek, Windows Vista ile nasıl sonuçlandığımızla ilgili.
Deneyiminde, kullanıcıların gerçekte buldukları hata türlerinin iki kategoriye ayrılma eğiliminde olduğunu yazdı: 1) programcıların kullanmadan önce kendi kodlarını koyduğunu tespit ettiği ortak kullanımda ortaya çıkanlar , veya 2) kenar davaları, hiç kimsenin, ilk etapta onları kapsayacak sınamalar yazmayı düşünmeyeceği konusunda belirsizdir. FogBugz'de ve ekibinin düzelttiği hataların çok küçük bir yüzdesinin, birim testlerinin yakalayabileceği türden bir şey olduğunu belirtti. (Bu makaleyi şimdi bulamıyorum, ancak hangisini kastettiğimi bilen biri varsa, buradaki bağlantıyı düzenlemek için çekinmeyin.)
Ve özellikle projeniz birçok ünite testiyle çok büyük bir projeye büyüdüğünde, daha sonra bir şeyi (kasıtlı olarak) değiştirdiğinizde ve çok sayıda kırık ünite testiyle sonuçlandığında , bunun değerinden daha fazla sorun olabileceğini yazdı . Ünite testinin neden olabileceği problemleri, Joel'in test etmesi için 13. bir nokta olarak eklememesinin nedeni olarak, insanların yapması gerektiğini önermesine rağmen bile kullanır.
Joel Spolsky, bu soruyu 2009'da tekrar cevapladı :
Joel: Test Driven Development hakkında bir tartışma var ... her şey için birim testleri yaptırmalıysanız, bu tür şeyler ... bir çok insan bana yazmış, Joel Testini okuduktan sonra, "13. yaşın olmalı Burada bir şey var: Birim Testi, tüm kodunuzun% 100 birim testi. "
Ve bu, ihtiyaç duymayabileceğiniz bir şey için biraz fazla doktrinli olduğum için beni vurguluyor. Gibi, çevik programlama fikri, ihtiyaç duymadan önce işleri yapmak değil, gerektiği gibi sayfa hata yapmaktır. Her şeyin otomatik olarak test edilmesi gibi hissediyorum, çoğu zaman, sadece size yardımcı olmayacak. Başka bir deyişle, bu kodun gerçekten işe yarayacağına dair çok sayıda ünite testi yazacaksınız ve işe yarayıp yaramadığını kesinlikle kesinlikle öğreneceksiniz. testleri yaz] gerçekten işe yarıyor ... ... Bilmiyorum, bunun için alevli posta alacağım çünkü o kadar iyi ifade etmiyorum. Ancak, bir ekibin birim testlerini% 100 kod kapsaması dahil etmiş olsaydı, birkaç sorun çıkacağını hissediyorum. Bir, ünite testleri yazmak için çok fazla zaman harcayacaklardı ve o zaman bunun için iyi kalitede ödeme yapamayacaklardı. Demek istediğim, bazı iyileştirilmiş kaliteye sahiplerdi ve kodlarındaki bir şeyi hiçbir şeyi bozmadıkları güvencesinde değiştirme yeteneğine sahiplerdi, ama hepsi bu.
Ancak, keşfettiğim gibi birim testleriyle ilgili asıl sorun, kod geliştikçe yapma eğiliminde olduğunuz değişiklik türlerinin birim testlerinizin sabit bir yüzdesini kırma eğiliminde olmasıdır. Bazen kodunuzda, bir şekilde birim testlerinizin% 10'unu kıran bir değişiklik yapabilirsiniz. Kasıtlı. Çünkü bir şeyin tasarımını değiştirdiniz ... bir menüyü taşıdınız ve şimdi o menüye dayanan her şey orada ... menü artık başka bir yerde. Ve böylece tüm bu testler şimdi bozuldu. Ve kodun yeni gerçekliğini yansıtmak için bu testleri girip yeniden oluşturabilmek zorundasınız.
Sonuçta, projeniz büyüdükçe büyüdükçe, gerçekten çok fazla birim testiniz varsa, bu birim testlerini sürdürmek, güncel tutmak ve sürdürmek için yapmanız gereken yatırım miktarı geçtiklerinde, onlardan aldığınız fayda miktarına orantısız olmaya başlar.
Joel'den başka kimse kesin olarak cevaplayamadı. Ancak bazı nedenleri / gözlemleri deneyebiliriz.
Her şeyden önce Joel'in Testinde sınav yoktur.
İkincisi, Joel Test'in bütün fikri (anladığım kadarıyla) hızlı, evet-hayır soruları. "TDD yapıyor musunuz?" tam olarak uymayacak (cevap: "bazılarımız", "kodun o kısmı için" veya "birim testi yapacağız" olabilir).
Üçüncüsü, hiç kimsenin (Joel'in bile) “sadece zamana değer olanların” (bu arada, “programlıyor musunuz” üzerinde olmadığını) işaret etmediğini, sadece bu soruların geldiğinde sorulacak hızlı ve hızlı sorular olduğunu gösterdiğini düşünüyorum. Gelecekte bir ekip üyesi olarak veya bir müşteri olarak bile bir yazılım ekibiyle temas halinde olmak; bu, çevremdeki bazı teknik olmayan insanlara, kendi BT departmanlarının ne kadar iyi / kötü olduğu hakkında ipucu arayan bir liste. Her şey değil, ama üç dakika içinde yenmek gerçekten kötü.