Test odaklı geliştirme. Anladım, beğendim.
Ancak test yazmak genel gider gerektirir. TDD kod tabanı boyunca evrensel olarak mı kullanılmalı yoksa TDD'nin yüksek bir ROI sağladığı alanlar ve ROI'nin düşük olması gereken diğer alanlar var mıdır?
Test odaklı geliştirme. Anladım, beğendim.
Ancak test yazmak genel gider gerektirir. TDD kod tabanı boyunca evrensel olarak mı kullanılmalı yoksa TDD'nin yüksek bir ROI sağladığı alanlar ve ROI'nin düşük olması gereken diğer alanlar var mıdır?
Yanıtlar:
Kodun yapısal olarak çok fazla değişebileceği yerlerde TDD'den kaçının diyebilirim. Başka bir deyişle, imzası nadiren değişen ancak dahili olarak daha sık tekrar sıkılan bir yöntem için çok sayıda test yapmak harika, ancak son derece değişken bir arayüz önemli ölçüde değiştiğinde testlerinizi düzeltmek zorunda kalıyor.
Son zamanlarda üzerinde çalıştığım uygulamalar, Gui-> Presenter-> BusinessLogic-> Data Access Layer tabanlı bir mimariye dayanan veri tabanlı webapps oldu. Veri erişim katmanım kimsenin işi gibi test edilmedi. İş mantığı katmanı oldukça iyi test edildi. Sunucular yalnızca daha kararlı alanlarda test edilir ve saatlik olarak değişen GUI'de neredeyse hiçbir test yapılmaz.
Mantıklı ve pratik olduğu alanlarda tam bir test takımı yazmanızı öneririm. Daha az pratik alanlarda akıl sağlığı kontrolleri yazın.
Tecrübelerime göre, çoğu durumda çoğu test vakasının tam olarak üstesinden gelmeye kesinlikle değer, ancak gerçekçi olarak kod kapsamı azalan getirilere sahip. Bir noktada, sadece kod kapsamını arttırmak için daha fazla test yazmak hiç mantıklı gelmiyor.
Örneğin, dilinize / teknolojinize bağlı olarak, kullanıcı arayüzünü test etmek pratik olmayabilir ya da mümkün olmayabilir. Birçok test muhtemelen bir kullanıcının gördüğü ve otomatik hale getirilemediğine bağlı olacaktır. Bir captcha üretme yönteminin bir insan tarafından okunabilen bir görüntü ürettiğini nasıl test edersiniz?
Komple bir test seti size yazmanız için üç gün sürecekse, bu parçada parçanın aşağısında bir hatanın ortaya çıkma olasılığı çok düşüktür ve fonksiyonun yazması sadece yarım saat sürer, muhtemelen zor düşünmelisiniz. Bu zamanın buna değip değmeyeceği hakkında. Belki de sadece bu fonksiyon için temel bir akıl sağlığı kontrolü yazmanız değer sağlayacaktır?
Genel tavsiyem, testlerin nispeten kolay bir şekilde yazılabileceği bileşenleri tamamen test etmeniz gerektiğidir. Bununla birlikte, test edilmesi çok zor bir alan ise, kuma bir çizgi çizin ve alanı tam olarak test etmek yerine daha yüksek bir seviyede test edecek testleri yazın.
Önceki captcha örneğinde, doğru boyut ve formattaki bir resmi kontrol eden testler yazabilir ve istisnalar atılmaz. Bu, denize girmeden size bir miktar güvence verir.
Bana göre, TDD ek yükü değil. Bu sadece kod yazma biçimim. Neden yazma sınavının "ek yük" olduğunu söylüyorsun? Bu sadece sürecin bir parçası. Benim düşünceme göre, hata ayıklamanın ek yükü olduğu ve bu TDD'ye başladığımda yapmayı bıraktığım bir faaliyetti. TDD'den önce, hata ayıklama yazılım yazma sürecimin ayrılmaz bir parçasıydı.
Test yazmak için hata ayıklamaktan vazgeçmenin çok iyi bir pazarlık olduğunu düşünüyorum.
TDD'nin gerçekten çok zorlandığı yerlerden biri, bir MVC uygulamasında görünümleri test ederken.
Şişman bir html dizesini döndüren bir işlevi test ettiğinizden, html ayrıştırma işlemi yapıp yapılmadığını görmek için sıkışıp kalıyorsunuz. Dahası, sürdürülebilirlik kabusu haline gelebilir. Bir gün etrafta bir onay kutusunu hareket ettirirseniz, testiniz bozulur.
Testlerimin çoğunda TDD'yi seviyorum, ancak programcı kemerindeki tek araç bu değil.