Meskipun saya belum pernah dalam proyek TDD atau BDD, atau saya pernah berada di beberapa yang mengatakan mereka melakukan TDD tetapi cukup jauh dari itu, ini adalah hal-hal yang saya pikirkan dan benar-benar mencoba membaca sebanyak yang saya bisa tentang.
Kembali ke pertanyaan. Ketika Anda melakukan BDD, Anda harus menulis "tes" terlebih dahulu dan membuatnya gagal, bukan? Dan kemudian mengimplementasikan fitur itu atau apa yang Anda sebut itu. Tetapi jika Anda menganggap ini ekstrem, bukankah ini semacam pengembangan top-down? Anda sedang melihat UI Anda dan berkata, "Saya ingin memiliki fitur / perilaku ini di sini". Kemudian Anda memperbaiki UI Anda untuk mengimplementasikan fitur itu dan kode yang mendukung UI. Pada titik ini Anda belum menerapkan logika bisnis atau logika akses data apa pun, Anda baru saja menerapkan perilaku Anda. Yang saya maksudkan alih-alih menulis tes terlebih dahulu Anda menulis kode UI Anda terlebih dahulu. Dalam beberapa kasus harus menghasilkan kode yang sama untuk akses data dan lapisan bisnis, karena Anda menggunakan kode UI untuk menentukan apa yang perlu didukung bisnis Anda.
Tentu saja Anda harus melengkapi ini dengan tes yang digunakan untuk memastikan bahwa fitur berfungsi sebagaimana mestinya dalam fitur.
Adakah pikiran?
sumber
main
. Dalam komentar top-down Anda, Anda berbicara tentang tes fungsional, yang menjalankan seluruh program melalui satumain
.Jawaban:
Anda berbicara tentang BDD dari perspektif tingkat tinggi dalam menguji UI Anda. Pengujian sedikit lebih lembut pada level ini daripada lebih rendah ke bawah dalam kode sisi Javascript / server Anda.
Beberapa buku yang saya baca di TDD mengatakan Anda harus menulis kode seolah-olah sistem yang mendasarinya ada, dan cukup menulis agar tes Anda lulus. Anda dapat menulis bertopik pada server untuk mendapatkan lulus tes perilaku UI Anda. Kemudian Anda mulai pada jahitan rintisan ini dan menulis beberapa tes unit untuk kode sisi server Anda dan turun ke implementasi penuh.
Saya sering memberi kode seolah-olah lapisan yang mendasarinya ada untuk mendapatkan tes tingkat tinggi untuk lulus, rasanya seperti turun ke lubang kelinci dan mengekstraksi banyak kelas lain untuk memenuhi tes tingkat tinggi, dan kemudian menulis tes untuk tingkat yang lebih rendah ini. Seperti yang sudah Anda kenali, ada baiknya Anda tetap fokus mulai dengan tes tingkat yang lebih tinggi.
Seperti yang diketahui oleh programmer berpengalaman, ada banyak lapisan untuk pengembangan perangkat lunak. Saya cenderung bekerja lebih rendah dari UI dan berpikir tentang data atau perilaku UI saya perlu dari server dan mulai di sana (mungkin karena saya tidak melakukan banyak pekerjaan UI hari ini).
Jika saya benar-benar jujur, mengekstraksi kelas dari lapisan yang mendasarinya berarti saya tidak melakukan tes terlebih dahulu tetapi ... dalam beberapa menit atau kadang-kadang jam saya akan memiliki tes untuk kode itu. Ini masih terasa bermanfaat bagi saya karena saya membantu melihat di mana Anda mungkin perlu menyediakan dependensi ke kelas dan menghormati prinsip tanggung jawab tunggal - jika sulit untuk menguji, Anda melakukan terlalu banyak di satu tempat dll.
sumber
Iya! Jika tidak, yang Anda dapatkan adalah pengujian yang digerakkan oleh pengembangan .
Secara realistis, ada beberapa masalah yang sulit untuk didekati dengan menggunakan TDD "murni". Anda bisa menjadi lebih produktif menulis dengan menulis beberapa kode produksi yang tidak terbuka di muka dan menutupinya dengan tes nanti (dan belajar bagaimana mendekati masalah yang sama dengan TDD di masa depan). Lihatlah teknik ini , yang penulisnya sebut bilas-dan-ulangi TDD karena ingin istilah yang lebih baik.
sumber
Jika Anda tidak menulis tes terlebih dahulu, Anda tidak mendorong pengembangan melalui tes Anda. Ergo, Anda tidak melakukan pengembangan berbasis tes!
sumber
Jika Anda ingin bekerja dengan cara ini, lakukan saja. Tapi ini bukan pengembangan yang digerakkan oleh tes.
sumber
Apa yang Anda gambarkan terdengar sangat mirip dengan pendekatan Desain Depan-Depan . Sayangnya, Front-Ahead Design adalah tusukan satiris Alex Papadimoulis pada metode gesit.
sumber
Secara pribadi, saya percaya bahwa sangat penting untuk berpikir tentang pengujian selama tahap desain. Benar-benar hebat memiliki implementasi kerja, tetapi satu-satunya cara Anda dapat memastikan bahwa Anda memiliki produk yang berfungsi adalah jika Anda telah mengujinya sepotong demi sepotong. Cara untuk mengatasinya adalah dengan kombinasi tes Unit dan tim QA terampil yang bekerja dalam kemitraan.
Sekarang bagaimana Anda menginstal disiplin ini ke dalam tim Anda terserah Anda. TDD adalah salah satu strategi semacam itu - dan salah satu yang memiliki tempatnya, dan ada banyak variasi lainnya. Namun, TDD tidak terlalu cocok untuk mengembangkan tata letak UI.
sumber