Apa hubungan BDD dan TDD?
Dari apa yang saya mengerti, BDD menambahkan dua hal utama pada TDD: tes penamaan (pastikan / harus) dan tes penerimaan. Haruskah saya mengikuti TDD selama pengembangan oleh BDD? Jika ya, haruskah pengujian unit TDD saya dinamai dengan gaya sure / should yang sama?
Jawaban:
BDD menambahkan siklus di sekitar siklus TDD.
Jadi, Anda mulai dengan perilaku dan membiarkan hal itu mendorong tes Anda, kemudian membiarkan tes mendorong pengembangan. Idealnya, BDD didorong oleh semacam tes penerimaan, tetapi itu tidak 100% diperlukan. Selama Anda memiliki perilaku yang diharapkan, Anda baik-baik saja.
Jadi, katakanlah Anda sedang menulis Halaman Masuk.
Mulai dengan jalan bahagia:
Sintaks yang diberikan-dan-kapan-kemudian-kemudian-dan umum dalam pengembangan perilaku-didorong. Salah satu keuntungannya adalah dapat dibaca (dan, dengan pelatihan, tertulis) oleh non-pengembang - yaitu, pemangku kepentingan Anda dapat melihat daftar perilaku yang telah Anda tetapkan untuk menyelesaikan tugas dengan sukses dan melihat apakah itu sesuai dengan harapan mereka jauh sebelum Anda merilis produk yang tidak lengkap.
Ada bahasa scripting, yang dikenal sebagai Gherkin, yang sangat mirip dengan di atas dan memungkinkan Anda untuk menulis kode uji di belakang klausa dalam perilaku ini. Anda harus mencari penerjemah berbasis Gherkin untuk kerangka kerja pengembangan Anda yang biasa. Itu di luar cakupan jawaban ini.
Pokoknya, kembali ke perilaku. Aplikasi Anda saat ini belum melakukan ini (jika itu mengapa seseorang meminta perubahan?), Jadi Anda gagal dalam tes ini, apakah Anda menggunakan pelari ujian atau hanya menguji secara manual.
Jadi sekarang saatnya untuk beralih ke siklus TDD untuk menyediakan fungsionalitas itu.
Apakah Anda sedang menulis BDD atau tidak, tes Anda harus dinamai dengan sintaksis umum. Salah satu yang paling umum adalah sintaks "harus" yang Anda gambarkan.
Tulis tes: ShouldAcceptValidDetails. Lewati siklus Red-Green-Refactor sampai Anda puas. Apakah sekarang kita lulus tes perilaku? Jika tidak, tulis tes lain: ShouldRedirectToUserDefaultPage. Merah-Hijau-Refactor sampai Anda bahagia. Cuci, bilas, ulangi sampai Anda memenuhi kriteria yang ditetapkan dalam perilaku.
Dan kemudian kita beralih ke perilaku selanjutnya.
Sekarang Anda seharusnya tidak mendahului ini untuk melewati perilaku Anda sebelumnya. Anda harus gagal dalam tes ini pada saat ini. Jadi jatuhkan kembali ke siklus TDD Anda.
Dan seterusnya sampai Anda memiliki halaman Anda.
Sangat merekomendasikan The Rspec Book untuk mempelajari lebih lanjut tentang BDD dan TDD, bahkan jika Anda bukan pengembang Ruby.
sumber
Pemahaman saya tentang itu:
Jadi untuk mengatasi TDD dilakukan dengan benar bagian dari BDD. BDD dimulai sebagai perubahan bahasa TDD untuk memperjelas maksud proses. Artikel pengantar Dan North tentang BDD menjelaskan mengapa memfokuskan pada kata behaviour daripada tes itu berguna - ini membantu mengonfirmasi bahwa Anda tidak hanya membangun perangkat lunak yang tepat, Anda juga membangun perangkat lunak yang tepat. Ini selalu menjadi bagian dari pendekatan TDD yang baik, tetapi Dan mengkodifikasinya sedikit menjadi BDD.
Apa yang saya pikir BDD buat sedikit lebih eksplisit daripada TDD, atau paling tidak formalisasi dan menyediakan dukungan alat, adalah pendekatan dua siklus / double loop / zoom-in zoom-out / outside-in. Anda pertama-tama menggambarkan perilaku fitur yang diharapkan (loop luar), kemudian memperbesar ke loop dalam untuk berurusan dengan spesifikasi tingkat rendah.
Dari http://www.metesreau.com/ncraft-workshop/
Gherkin bersama dengan alat-alat seperti Mentimun dan SpecFlow menyediakan cara untuk menulis spesifikasi fitur tingkat tinggi tersebut dan kemudian menghubungkannya ke kode yang mengeksekusi kode aplikasi. Saya berpendapat bahwa ini adalah di mana BDD mungkin 'merasa' berbeda dari TDD, tetapi masih benar-benar melakukan hal yang sama, hanya dengan beberapa dukungan alat tambahan dan DSL. Agak lebih dekat dengan 'tradisional' TDD menggunakan alat seperti rspec, nspec, spock. Ini terasa sedikit lebih seperti proses yang sama yang Anda lakukan dalam TDD 'tradisional' tetapi dengan bahasa yang lebih berfokus pada perilaku.
Dalam BDD in Action oleh John Ferguson Smart (sangat disarankan), ia menganjurkan untuk pendekatan loop ganda, dimulai dengan sesuatu seperti jBehave pada spesifikasi yang dapat dieksekusi tingkat luar, kemudian jatuh ke alat seperti Spock untuk spesifikasi tingkat rendah.
BDD membawa konsep uji-didorong lebih dekat dengan para pemangku kepentingan bisnis. Gherkin dirancang agar dapat dibaca oleh bisnis, dan ide 'dokumentasi hidup', yaitu laporan kemajuan yang dihasilkan secara otomatis dari spesifikasi yang dapat dieksekusi adalah tentang memberikan umpan balik kepada para pemangku kepentingan.
Bagian lain dari BDD sekarang, di mana ia benar-benar menjadi sesuatu yang menggabungkan TDD sebagai bagian dari proses yang lebih besar, adalah persyaratan bit-bit elisitasi. Ide-ide seperti Injeksi Fitur, Pemetaan Dampak, dan Opsi Nyata adalah bagian dari sisi ini.
Untuk jawaban kanonik tentang ini, mungkin lebih baik pergi ke Dan North lagi . Jika tim Anda adalah semua pengembang, maka BDD = TDD. Jika tim Anda melibatkan seluruh jajaran pemangku kepentingan, BDD lebih dekat ke XP, dengan TDD menjadi salah satu bagiannya.
sumber
Mereka adalah hal yang sama.
Itu bukan sesuatu yang BDD "tambahkan". Hanya saja konvensi berbeda yang dimaksudkan untuk membuatnya lebih mudah untuk mengajar dan memahami TDD.
Orang-orang yang menciptakan BDD semuanya mengajar TDD, dan mereka memperhatikan bahwa hal yang paling sulit untuk dipahami adalah bahwa TDD sama sekali tidak ada hubungannya dengan pengujian. Begitu siswa mengatasi rintangan itu, itu menjadi jauh lebih mudah bagi mereka. Tapi, sangat sulit untuk menceraikan diri Anda dari berpikir tentang pengujian , ketika kata "test" (atau terminologi terkait seperti "menegaskan") muncul praktis di mana - mana . Jadi, mereka mengubah beberapa kata.
Tapi itu hanya kata-kata! Tidak ada perbedaan aktual antara TDD dan BDD.
Tes penerimaan sama pentingnya dengan TDD seperti halnya BDD. Sekali lagi: tidak ada perbedaan antara TDD dan BDD: TDD yang dilakukan dengan benar adalah BDD, BDD adalah yang dilakukan dengan benar.
sumber