Apakah "Obvious Implementasi" TDD berarti kode pertama, setelah pengujian?


11

Teman saya dan saya adalah TDD yang relatif baru dan memiliki perselisihan tentang teknik "Obvious Implementation" (dari "TDD By Example" oleh Kent Beck). Teman saya mengatakan itu berarti bahwa jika implementasinya jelas, Anda harus melanjutkan dan menulisnya - sebelum ujian untuk perilaku baru itu. Dan memang buku itu mengatakan:

Bagaimana Anda menerapkan operasi sederhana? Cukup terapkan.

Juga:

Terkadang Anda yakin tahu cara menerapkan operasi. Lanjutkan.

Saya pikir apa yang penulis maksudkan adalah Anda harus mengujinya terlebih dahulu, dan kemudian "implementasikan saja" - sebagai lawan dari "Palsu Itu ('Sampai Anda Membuatnya)" dan teknik lainnya, yang memerlukan langkah-langkah lebih kecil dalam tahap implementasi. Juga setelah kutipan ini penulis berbicara tentang mendapatkan "bilah merah" (gagal tes) ketika melakukan "Obvious Implementasi" - bagaimana Anda bisa mendapatkan bilah merah tanpa tes ?.

Namun saya tidak dapat menemukan kutipan dari buku yang mengatakan "jelas" masih berarti tes pertama.

Bagaimana menurut anda? Haruskah kita menguji dulu atau setelah ketika implementasi "jelas" (menurut TDD, tentu saja)? Apakah Anda tahu buku atau posting blog mengatakan hal itu?


3
Saya setuju dengan interpretasi Anda. Tes dulu dan "implementasikan saja" ketika masalahnya cukup mudah untuk dipecahkan tanpa iterasi. Tapi pasti tes dulu.
Carl Manaster

1
Jelas sekali bahwa kode apa pun hanya dapat diuji setelah ditulis ...
ThomasX

Jawaban:


11

Saya setuju dengan interpretasi Anda - itu masih Red Green Refactor, hanya dengan sedikit Refactor yang ditinggalkan;)

Jadi, pertama-tama tulis tes yang gagal, kemudian implementasikan solusi yang jelas alih-alih secara perlahan membangun desain yang "paling sederhana".


6

Apakah Anda tahu buku atau posting blog mengatakan hal itu?

Saya berpendapat bahwa buku Beck mengatakan hal itu.

Dia melanjutkan dengan mengatakan

Namun, dengan hanya menggunakan Implementasi Jelas, Anda menuntut kesempurnaan diri Anda sendiri. Secara psikologis, ini bisa menjadi langkah yang menghancurkan. Bagaimana jika apa yang Anda tulis sebenarnya bukan perubahan paling sederhana yang bisa lulus ujian? Bagaimana jika pasangan Anda menunjukkan Anda yang lebih sederhana? Kamu gagal! Dunia Anda hancur di sekitar Anda! Mati kau. Anda membeku.

Bagaimana Anda bisa lulus tes dengan menulis kode jika tidak ada sebelum kode itu?


1

Jelas tidak ada aturan yang keras dan cepat di sini, ternyata gesit sehingga kita dapat dan harus beradaptasi seperti yang kita lakukan :)

Sebagian itu akan tergantung pada operasi sederhana, dan ketika Anda berlatih TDD semakin banyak Anda akan secara teratur menemukan hal-hal yang Anda uji buruk atau sebenarnya tidak benar-benar menguji sama sekali, itu semua adalah bagian dari kurva belajar.

Juga jangan lupa bahwa TDD memungkinkan Anda menguji antarmuka dan implementasinya sebelum membuatnya menjadi kode hidup.

Anda mungkin tahu bagaimana menerapkan sesuatu tetapi seberapa sering Anda menulis kelas / metode yang sempurna dll. Pertama kali tanpa beberapa tweak di sepanjang jalan atau melangkah melalui kode sekali atau dua kali dan enam bulan kemudian ketika Anda mengubah sesuatu Anda dapat melakukannya dengan lebih percaya diri dan lagi di kotak pasir tes.

Tentu saja, tes tidak berarti Anda menulis kode dengan lebih tepat pertama kali tetapi perubahan Anda didorong oleh tes dan tes menjadi klien pertama dari kode dan karena tes sangat murah dan yang lebih penting tidak ada risiko untuk berubah Anda memiliki lebih banyak kepercayaan dan kebebasan saat berkembang.

Jika Anda benar-benar berusaha mendapatkan cakupan yang baik dan kualitas yang lebih tinggi, maka mulailah melakukan lebih banyak tes, ketika Anda mempraktikkan TDD semakin banyak, Anda akan semakin mengembangkan tingkat cakupan yang Anda butuhkan.


1

Saya telah belajar bahwa untuk kode sepele seharusnya tidak ada yang tidak sama sekali.

contoh: Jika Anda memiliki metode java pengambil / penyetel yang memetakan suatu metode ke variabel lokal yang belum terjawab untuk ini akan menjadi berlebihan.

mungkin inilah yang dimaksud penulis

> "How do you implement simple operations? Just implement them."
> "Sometimes you are sure you know how to implement an operation. Go ahead."
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.