TDD bukan tentang pengujian, ini tentang desain.
Jauh dari keruntuhan dengan kerumitan, ia unggul dalam keadaan ini. Ini akan mengarahkan Anda untuk mempertimbangkan masalah yang lebih besar dalam potongan-potongan kecil, yang akan mengarah pada desain yang lebih baik.
Jangan berangkat untuk mencoba menguji setiap permutasi algoritma Anda. Cukup buat tes demi tes, tulis kode paling sederhana untuk membuat tes bekerja, sampai Anda memiliki basis Anda tertutup. Anda harus melihat apa yang saya maksud dengan memecahkan masalah karena Anda akan didorong untuk memalsukan bagian dari masalah saat menguji bagian lain, untuk menyelamatkan diri Anda dari menulis 10 miliar tes untuk 10 miliar permutasi.
Sunting: Saya ingin menambahkan contoh, tetapi tidak punya waktu sebelumnya.
Mari kita pertimbangkan algoritma in-place-sort. Kita bisa melanjutkan dan menulis tes yang meliputi ujung atas array, ujung bawah array dan segala macam kombinasi aneh di tengah. Untuk masing-masing, kita harus membangun array lengkap dari beberapa jenis objek. Ini akan memakan waktu.
Atau kita bisa mengatasi masalah dalam empat bagian:
- Lintasi array.
- Bandingkan item yang dipilih.
- Ganti item.
- Mengkoordinasikan tiga di atas.
Yang pertama adalah satu-satunya bagian rumit dari masalah tetapi dengan mengabstraksikannya dari yang lain, Anda telah membuatnya jauh, lebih sederhana.
Yang kedua hampir pasti ditangani oleh objek itu sendiri, setidaknya secara opsional, dalam banyak kerangka kerja statis-ketik akan ada antarmuka untuk menunjukkan apakah fungsionalitas itu diimplementasikan. Jadi, Anda tidak perlu menguji ini.
Yang ketiga sangat mudah untuk diuji.
Yang keempat hanya menangani dua pointer, meminta kelas traversal untuk memindahkan pointer, meminta perbandingan dan berdasarkan hasil perbandingan itu, panggilan untuk item yang akan ditukar. Jika Anda telah memalsukan tiga masalah pertama, Anda dapat menguji ini dengan sangat mudah.
Bagaimana kami menghasilkan desain yang lebih baik di sini? Katakanlah Anda membuatnya sederhana dan menerapkan semacam gelembung. Ini bekerja tetapi, ketika Anda pergi ke produksi dan harus menangani sejuta objek, itu terlalu lambat. Yang harus Anda lakukan adalah menulis fungsionalitas traversal baru dan menukarnya. Anda tidak harus berurusan dengan kompleksitas penanganan tiga masalah lainnya.
Ini, Anda akan temukan, adalah perbedaan antara pengujian unit dan TDD. Penguji unit akan mengatakan bahwa ini telah membuat tes Anda rapuh, bahwa jika Anda telah menguji input dan output sederhana maka Anda tidak perlu lagi menulis tes untuk fungsionalitas baru Anda. TDDer akan mengatakan bahwa saya telah memisahkan masalah dengan tepat sehingga setiap kelas yang saya miliki melakukan satu hal dan satu hal dengan baik.