Bir yıldan biraz daha uzun bir süre önce işten 9 ay ara verebilecek kadar şanslıydım. O zaman, C # becerilerimi geliştirmeye karar verdim. Bir sürü proje üzerinde çalışmaya başladım ve kendimi TDD'yi takip etmeye zorladım.
Bu oldukça aydınlatıcı bir süreçti.
İlk başta zordu, ancak zamanla daha fazla test edilebilir kod yazmayı öğrendim (bu, ortaya çıktığında, daha fazla SOLID kodu olma eğilimindedir) ve bu süreçte OO tasarım becerimi de arttırdım.
Şimdi işgücüne geri döndüm ve tuhaf bir şey fark ediyorum.
TDD'yi takip etmemeyi tercih ederim.
TDD'nin beni yavaşlattığını ve temiz bir uygulama tasarlamayı zorlaştırdığını biliyorum.
Bunun yerine, biraz (kitlesel) farklı bir yaklaşım benimsedim:
- Dikey bir iş parçası seç
- İşlevsel bir prototip geliştirin
- Her şey güzel ve düzenli olana kadar refactor
- Yazdığım güzel SOLID ve test edilebilir kodunu tekrar takdir edin.
1. adımın "test hedefimin genel yüzeyini tanımla" olmadığını ve 2. adımın "sözde kamusal yüzeyden bejesi test et" olmadığını fark etmiş olabilirsiniz. Ayrıca, adımlardan hiçbirinin test etmediğini fark etmiş olabilirsiniz. Test edilebilir kod yazıyorum, ancak henüz test etmiyorum.
Şimdi, herhangi bir testten vazgeçmediğimi açıkça belirtmek isterim. Yazdığım kod çalışıyor . Çalışıyor çünkü manuel olarak test ediyorum.
Ayrıca tüm otomatik testlerden de vazgeçmediğimi de açıkça belirtmek isterim. Burası benim sürecimin farklı olduğu yer. İşte bu yüzden bu soruyu soruyorum.
Teoride TDD. Uygulamada değil.
Sürecim biraz gelişti ve TDD ile çok verimli ve aynı zamanda makul derecede güvenli bulduğum testler arasında bir denge kurdum. Aşağıdaki gibi gider:
- Düşey bir çalışma dilimini test akılda tutarak uygulayın, ancak herhangi bir test yazmayın.
- Yolun aşağısında (örneğin, bir ay sonra) bu dilimin değiştirilmesi gerekiyorsa
- Çalışma biriminin doğru olduğunu garanti eden Birim Testleri, Entegrasyon Testleri, Davranış Testleri vb. Yazın.
- Kodu değiştirin
- Bu dilimin değişikliğe ihtiyacı yoksa,
- Hiçbir şey yapma
Test yazma zorluğunu kod yazmadan önce kod değiştirmeden önce değiştirerek çok daha fazla çalışma kodu üretebildim. Ve test yazmaya başladığımda, bunlardan daha azını yazıyorum ancak neredeyse çok fazla zemin kaplıyordum (daha yüksek yatırım getirisi).
Bu süreci seviyorum, ama iyi ölçeklenemeyeceğinden endişeliyim. Başarısı, geliştiricilerin bir şeyleri değiştirmeden önce test yazma konusunda gayretli olmalarına bağlıdır. Ve bu oldukça büyük bir risk gibi görünüyor. Ancak, TDD'nin de aynı riski var.
Öyleyse, [BT] DD cehenneme mi gidiyorum, yoksa bu yaygın bir kodlama ve test şekli midir?
Bu şekilde çalışmaya devam etmek isterim. Bu sürecin uzun vadede çalışması için ne yapabilirim?
Not:Projelerimdeki tek geliştiriciyim ve her şeyden sorumluyum: Gereksinimler toplama, tasarım, mimari, test, dağıtım vb. İşlemim bu yüzden çalışıyor.
If that slice doesn't need modification
. lizkeogh.com/2012/06/24/beyond-test-driven-development