Apa perbedaan utama antara TDD dan BDD? [Tutup]

129

Pengembangan Test Driven telah menjadi kemarahan di komunitas .NET selama beberapa tahun terakhir. Baru-baru ini, saya telah mendengar gerutuan di komunitas ALT.NET tentang BDD. Apa itu? Apa yang membuatnya berbeda dari TDD?

Bukan dirimu sendiri
sumber
2
Lihat juga, programmers.stackexchange.com/q/135218/76176 . Pertanyaan ini lebih pada topik di sana.
Evan Carroll
TDD untuk tes mikro. BDD adalah untuk persyaratan atau tes makro. Dengarkan episode 1 hingga 8 tentang Test Pyramid dan itu akan menjelaskan level-level ini: agilenoir.biz/series/agile-thoughts
Lance Kind

Jawaban:

104

Saya mengerti BDD lebih tentang spesifikasi daripada pengujian . Ini ditautkan dengan Desain Berbasis Domain (apakah Anda tidak menyukai singkatan * DD ini?).

Ini terkait dengan cara tertentu untuk menulis cerita pengguna, termasuk tes tingkat tinggi. Contoh dari Tom ten Thij :

Story: User logging in
  As a user
  I want to login with my details
  So that I can get access to the site

Scenario: User uses wrong password

  Given a username 'jdoe'
  And a password 'letmein'

  When the user logs in with username and password

  Then the login form should be shown again

(Dalam artikelnya, Tom melanjutkan untuk langsung menjalankan spesifikasi tes ini di Ruby.)

Paus BDD adalah Dan Utara . Anda akan menemukan pengantar yang bagus dalam artikel BDD Memperkenalkannya .

Anda akan menemukan perbandingan BDD dan TDD dalam video ini . Juga pendapat tentang BDD sebagai "TDD dilakukan dengan benar" oleh Jeremy D. Miller

Pembaruan 25 Maret 2013

Video di atas telah hilang untuk sementara waktu. Ini adalah yang terbaru oleh Llewellyn Falco, BDD vs TDD (dijelaskan) . Saya menemukan penjelasannya jelas dan to the point.

Christian Lescuyer
sumber
10
Tautan video tampaknya menjadi buruk
James Nail
1
Christian, apa judul video dan nama pembicara? jadi kita bisa melacaknya
smci
1
Tautan di atas 'Tom Ten Thij' sudah mati sekarang .. inilah langsung @ - tomtenthij.nl/2008/1/25/…
Kundan Pandit
Berikut ini adalah permainan singkat yang mengajarkan poin utama BDD: agilenoir.biz/en/am-i-behavioral-or-not
Lance Kind
16

Bagi saya perbedaan utama antara BDD dan TDD adalah fokus dan kata-kata. Dan kata-kata penting untuk mengomunikasikan niat Anda.

TDD mengarahkan fokus pada pengujian. Dan karena dalam "air terjun dunia lama" tes datang setelah implementasi, maka pola pikir ini mengarah pada pemahaman dan perilaku yang salah.

BDD mengarahkan fokus pada perilaku dan spesifikasi, sehingga pikiran air terjun terganggu. Jadi BDD lebih mudah dipahami sebagai praktik desain dan bukan sebagai praktik pengujian.

Juha Pohjalainen
sumber
2
TDD tidak ada hubungannya dengan siklus hidup desain perangkat lunak "air terjun". Jika ada, TDD adalah agnostik SDLC. Maksud TDD adalah untuk menulis jumlah minimum kode yang diperlukan untuk mendapatkan tes untuk lulus. Di satu sisi tes menjadi spesifikasi teknis untuk kode untuk dipatuhi.
Gavin Baumanis
1
TDD adalah "Tes pertama" dan dapat bekerja cukup baik dengan Agile. Ini tidak akurat.
Terrance
13

Tampaknya ada dua jenis BDD.

Yang pertama adalah gaya asli yang dibahas Dan North dan yang menyebabkan penciptaan kerangka gaya xBehave. Bagi saya gaya ini terutama berlaku untuk pengujian penerimaan atau spesifikasi terhadap objek domain.

Gaya kedua adalah apa yang dipopulerkan Dave Astels dan yang bagi saya adalah bentuk baru TDD yang memiliki beberapa manfaat serius. Ini berfokus pada perilaku daripada pengujian dan juga kelas tes kecil, mencoba untuk sampai ke titik di mana Anda pada dasarnya memiliki satu baris per spesifikasi (tes) metode. Gaya ini cocok untuk semua tingkat pengujian dan dapat dilakukan dengan menggunakan kerangka kerja pengujian unit apa pun yang ada meskipun kerangka kerja yang lebih baru (gaya xSpec) membantu memusatkan satu perilaku daripada pengujian.

Ada juga grup BDD yang mungkin berguna bagi Anda:

http://groups.google.com/group/behaviordrivendevelopment/


sumber
7

Test-Driven Development adalah metodologi pengembangan perangkat lunak yang pertama kali diuji, yang artinya diperlukan penulisan kode uji sebelum menulis kode aktual yang akan diuji. Dalam kata-kata Kent Beck:

Gaya di sini adalah menulis beberapa baris kode, kemudian tes yang harus dijalankan, atau bahkan lebih baik, untuk menulis tes yang tidak akan berjalan, kemudian menulis kode yang akan membuatnya berjalan.

Setelah mencari tahu cara menulis sepotong kecil kode, sekarang, alih-alih hanya menulis, kami ingin segera mendapatkan umpan balik dan mempraktikkan "sedikit kode, uji sedikit, kode sedikit, tes sedikit." Jadi kami segera menulis tes untuk itu.

Jadi TDD adalah metodologi teknis tingkat rendah yang digunakan pemrogram untuk menghasilkan kode bersih yang berfungsi.

Pengembangan Berbasis Perilaku adalah metodologi yang dibuat berdasarkan TDD, tetapi berkembang menjadi proses yang tidak hanya menyangkut pemrogram dan penguji, melainkan berurusan dengan seluruh tim dan semua pemangku kepentingan penting, teknis dan non-teknis. BDD memulai dari beberapa pertanyaan sederhana yang TDD tidak jawab dengan baik: berapa banyak tes yang harus saya tulis? Apa yang sebenarnya harus saya uji — dan apa yang seharusnya tidak saya uji? Manakah dari tes yang saya tulis akan menjadi penting bagi bisnis atau untuk kualitas produk secara keseluruhan, dan yang mana yang merupakan rekayasa berlebihan saya?

Seperti yang Anda lihat, pertanyaan seperti itu membutuhkan kolaborasi antara teknologi dan bisnis. Stakeholder bisnis dan pakar domain seringkali dapat memberi tahu para insinyur tes seperti apa yang tampaknya bermanfaat — tetapi hanya jika tes tersebut merupakan tes tingkat tinggi yang berhubungan dengan aspek bisnis penting. BDD menyebut tes seperti bisnis sebagai "contoh," seperti pada "katakan padaku contoh bagaimana fitur ini harus berperilaku dengan benar," dan cadangan kata "tes" untuk tingkat rendah, pemeriksaan teknis seperti validasi data atau pengujian integrasi API. Bagian yang penting adalah bahwa sementara tes hanya dapat dibuat oleh programmer dan penguji, contoh - contoh dapat dikumpulkan dan dianalisis oleh seluruh tim pengiriman — oleh desainer, analis, dan sebagainya.

Dalam sebuah kalimat, salah satu definisi terbaik dari BDD yang saya temukan sejauh ini adalah bahwa BDD adalah tentang "melakukan percakapan dengan para ahli domain dan menggunakan contoh-contoh untuk mendapatkan pemahaman bersama tentang perilaku yang diinginkan dan menemukan yang tidak diketahui." Bagian penemuan sangat penting. Ketika tim pengiriman mengumpulkan lebih banyak contoh, mereka mulai semakin memahami domain bisnis dan dengan demikian mereka mengurangi ketidakpastian mereka tentang beberapa aspek produk yang harus mereka tangani. Ketika ketidakpastian berkurang, kreativitas dan otonomi tim pengiriman meningkat. Misalnya, mereka sekarang dapat mulai menyarankan contoh mereka sendiri bahwa pengguna bisnis tidak berpikir itu mungkin karena kurangnya keahlian teknologi.

Sekarang, berbincang dengan pakar bisnis dan domain terdengar hebat, tetapi kita semua tahu bagaimana itu sering berakhir dalam praktik. Saya memulai perjalanan saya dengan teknologi sebagai programmer. Sebagai pemrogram, kita diajarkan untuk menulis kode — algoritma, pola desain, abstraksi. Atau, jika Anda seorang desainer, Anda diajarkan mendesain—Organisasikan informasi dan buat antarmuka yang indah. Tetapi ketika kita mendapatkan pekerjaan entry-level kita, majikan kita mengharapkan kita untuk "memberikan nilai kepada klien." Dan di antara klien-klien itu bisa, misalnya ... bank. Tetapi saya tidak tahu apa-apa tentang perbankan — kecuali cara mengurangi saldo akun saya secara efisien. Jadi saya harus entah bagaimana menerjemahkan apa yang diharapkan dari saya ke dalam kode ... Saya harus membangun jembatan antara perbankan dan keahlian teknis saya jika saya ingin memberikan nilai apa pun. BDD membantu saya membangun jembatan yang kokoh di atas fondasi komunikasi yang lancar antara tim pengiriman dan pakar domain.

Belajarlah lagi

Jika Anda ingin membaca lebih lanjut tentang BDD, saya menulis buku tentang hal itu. "Menulis Spesifikasi Hebat" mengeksplorasi seni menganalisis persyaratan dan akan membantu Anda belajar bagaimana membangun proses BDD yang hebat dan menggunakan contoh sebagai bagian inti dari proses itu. Buku ini berbicara tentang bahasa di mana-mana, mengumpulkan contoh, dan membuat apa yang disebut spesifikasi yang dapat dieksekusi (tes otomatis) dari contoh-contoh — teknik yang membantu tim BDD memberikan softeware hebat tepat waktu dan sesuai anggaran.

Jika Anda tertarik untuk membeli "Spesifikasi Bagus Menulis," Anda dapat menghemat 39% dengan kode promo 39nicieja2 :)

thion
sumber
6

Saya telah bereksperimen sedikit dengan pendekatan BDD dan kesimpulan prematur saya adalah bahwa BDD sangat cocok untuk menggunakan implementasi kasus, tetapi tidak pada detail yang mendasarinya. TDD masih bergerak di level itu.

BDD juga digunakan sebagai alat komunikasi. Tujuannya adalah untuk menulis spesifikasi yang dapat dieksekusi yang dapat dipahami oleh para ahli domain.

Thomas Eyde
sumber
2

Sepertinya saya bahwa BDD adalah ruang lingkup yang lebih luas. Hampir menyiratkan TDD digunakan, bahwa BDD adalah metodologi yang mencakup mengumpulkan informasi dan persyaratan untuk menggunakan, antara lain, praktik TDD untuk memastikan umpan balik yang cepat.

kuda pucat
sumber
2

Dengan pengetahuan terbaru saya di BDD bila dibandingkan dengan TDD, BDD berfokus pada menentukan apa yang akan terjadi selanjutnya, sedangkan TDD berfokus pada pengaturan serangkaian kondisi dan kemudian melihat hasilnya.

yoozer8
sumber
2

Pengembangan Perilaku Didorong tampaknya lebih fokus pada interaksi dan komunikasi antara Pengembang dan juga antara Pengembang dan penguji.

Artikel Wikipedia memiliki penjelasan:

Pengembangan yang didorong oleh perilaku

Tidak berlatih BDD sendiri.

Michael Stum
sumber
2

Pertimbangkan manfaat utama TDD untuk desain. Itu harus disebut Test Driven Design. BDD adalah bagian dari TDD, sebut saja Behavior Driven Design.

Sekarang pertimbangkan penerapan TDD - Unit Testing yang populer. Unit dalam Pengujian Unit biasanya adalah satu bit logika yang merupakan unit pekerjaan terkecil yang dapat Anda buat.

Ketika Anda menempatkan Unit-unit itu bersama-sama dalam cara fungsional untuk menggambarkan Perilaku yang diinginkan ke mesin, Anda perlu memahami Perilaku yang Anda jelaskan ke mesin. Bevenor Driven Design berfokus pada memverifikasi pemahaman pelaksana tentang Kasus Penggunaan / Persyaratan / Apa pun dan memverifikasi penerapan setiap fitur. BDD dan TDD pada umumnya melayani tujuan penting menginformasikan desain dan tujuan kedua memverifikasi kebenaran implementasi terutama ketika itu berubah. BDD yang dilakukan dengan benar melibatkan biz dan dev (dan qa), sedangkan Unit Testing (mungkin secara keliru dipandang sebagai TDD daripada satu jenis TDD) biasanya dilakukan dalam dev silo.

Saya ingin menambahkan bahwa tes BDD berfungsi sebagai persyaratan hidup.

phil v
sumber
1

Tidak ada perbedaan antara TDD dan BDD. kecuali Anda dapat membaca tes Anda dengan lebih baik, dan Anda dapat menggunakannya sebagai persyaratan. Jika Anda menulis persyaratan Anda dengan kata-kata yang sama seperti Anda menulis tes BDD maka Anda dapat datang dari klien Anda dengan beberapa tes Anda yang ditetapkan siap untuk menulis kode.

Mihai
sumber
1

Perbedaan antara test-driven development (TDD) dan development-driven development (BDD)

  • BDD berfokus pada aspek perilaku sistem daripada
    aspek implementasi sistem yang menjadi fokus TDD.

  • BDD memberikan pemahaman yang lebih jelas tentang apa yang harus dilakukan sistem
    dari perspektif pengembang dan pelanggan. TDD hanya
    memberi pengembang pemahaman tentang apa yang harus dilakukan sistem.

  • BDD memungkinkan pengembang dan pelanggan untuk bekerja sama dalam analisis persyaratan yang terkandung dalam kode sumber sistem.

rahul patil
sumber
1

Singkatnya ada perbedaan besar antara TDD dan BDD. Dalam TDD kami fokus utama pada data uji. Dalam BDD fokus utama kami adalah pada perilaku proyek sehingga setiap orang yang bukan pemrograman dapat memahami baris kode atas nama judul. metode itu

saurabh singh
sumber
1

Inilah snapshot cepat:

  • TDD hanyalah proses pengujian kode sebelum menulisnya!

  • DDD adalah proses mendapatkan informasi tentang Domain sebelum setiap siklus kode menyentuh!

  • BDD adalah implementasi TDD yang membawa beberapa aspek DDD!

Snehal Masne
sumber