Saya mencoba untuk membungkus kepala saya di sekitar TDD, khususnya bagian pengembangan. Saya telah melihat beberapa buku, tetapi yang saya temukan terutama menangani bagian pengujian - Sejarah NUnit, mengapa pengujian itu baik, Merah / Hijau / Refactor dan cara membuat String Calculator.
Bagus, tapi itu "hanya" Unit Testing, bukan TDD. Secara khusus, saya tidak mengerti bagaimana TDD membantu saya mendapatkan desain yang baik jika saya membutuhkan Desain untuk mulai mengujinya.
Untuk menggambarkan, bayangkan 3 persyaratan ini:
- Katalog perlu memiliki daftar produk
- Katalog harus mengingat produk mana yang dilihat pengguna
- Pengguna harus dapat mencari produk
Pada titik ini, banyak buku menarik kelinci ajaib keluar dari topi dan hanya menyelami "Menguji Layanan Produk", tetapi mereka tidak menjelaskan bagaimana mereka sampai pada kesimpulan bahwa ada Layanan Produk di tempat pertama. Itulah bagian "Pengembangan" dalam TDD yang saya coba pahami.
Harus ada desain yang sudah ada, tetapi hal-hal di luar entitas-layanan (yaitu: Ada Produk, jadi harus ada ProductService) tidak ditemukan di mana pun (misalnya, persyaratan kedua mengharuskan saya memiliki beberapa konsep tentang Pengguna, tetapi di mana saya ingin mengingatkan fungsi ini? Dan apakah Cari fitur dari ProductService atau SearchService yang terpisah? Bagaimana saya tahu mana yang harus saya pilih?)
Menurut SOLID , saya akan membutuhkan UserService, tetapi jika saya mendesain sistem tanpa TDD, saya mungkin berakhir dengan sejumlah Layanan Metode-Tunggal. Bukankah TDD dimaksudkan untuk membuat saya menemukan desain saya di tempat pertama?
Saya adalah pengembang .net, tetapi sumber daya Java juga akan berfungsi. Saya merasa sepertinya tidak ada contoh aplikasi atau buku nyata yang berhubungan dengan lini aplikasi bisnis nyata. Bisakah seseorang memberikan contoh yang jelas yang menggambarkan proses pembuatan desain menggunakan TDD?