Saya satu-satunya orang di tim saya yang menggunakan TDD. Bagaimana saya membuat mereka menggunakannya?
Saya kesal ketika saya menarik, kode seseorang akan merusak tes saya dan saya yang harus memperbaikinya.
Akankah menggunakan permintaan github, fork dan pull menyelesaikan masalah ini, sehingga mereka harus lulus tes sebelum tarikan diterima?
Saya bukan manajer proyek dan sepertinya saya tidak bisa meyakinkannya untuk menggunakannya.
tdd
ruby-on-rails
communication
wizztjh
sumber
sumber
Jawaban:
Cara saya melihatnya, satu-satunya cara untuk meyakinkan apa pun tentang tes adalah untuk menunjukkan bahwa mereka berguna - yaitu bahwa kegagalan tes membantu untuk menemukan dan memperbaiki bug .
Cara Anda menggambarkan masalahnya, sepertinya ini tidak terjadi di sini. Lihat...
Jika saya mengerti dengan benar, Anda berarti Anda harus memodifikasi tes. Ya, itu tidak terdengar seperti kegagalan pengujian membantu menemukan dan memperbaiki bug , bukan? Jika tes tidak membantu dalam menemukan bug, itu posisi yang cukup lemah untuk mulai meyakinkan kolega Anda - apa yang bisa mereka dapatkan? perbaikan yang membosankan dalam kode uji rapuh?
Ini mungkin terdengar seperti jalan buntu, tetapi sebenarnya tidak. Tujuan akhir Anda (meyakinkan untuk TDD) masih masuk akal, jangan jatuhkan. Pusatkan kembali upaya Anda untuk menghilangkan hambatan yang Anda temukan.
Kegagalan pengujian yang mengganggu Anda sekarang pada dasarnya adalah "peringatan salah" - artinya ini adalah bug dalam pengujian yang tidak ada dalam kode. Gunakan ini sebagai kesempatan untuk meningkatkan tes, untuk belajar bagaimana membuat desain tes yang andal. Kerjakan tes untuk membuat "peringatan palsu" lebih jarang dan untuk membuatnya lebih mudah menemukan bug nyata dalam kode yang diuji.
Saat Anda menemukan bug nyata, beri tahu kolega Anda dan bantu mereka memperbaiki - dan jangan lupa untuk menunjukkan bahwa bug ini ditemukan oleh tes Anda. Itu akan menjadi dasar yang sangat kuat untuk meyakinkan kolega Anda.
Perlu disebutkan bahwa keterampilan desain tes yang Anda kembangkan pada tahap "pendahuluan" kemungkinan besar akan diperlukan lagi, jika (ketika :) Anda akhirnya meyakinkan teman satu tim Anda untuk menggunakan TDD. Pikirkan itu ...
... Apa yang akan terjadi ketika pengembangan berbasis tes diperkenalkan kepada kolega Anda yang tidak berpengalaman?
Hal pertama yang diharapkan adalah bahwa pria akan mulai menulis tes jelek dan (horor!) Bahkan melanggar yang bagus saat belajar. Untuk membantu mereka menemukan cara untuk melakukannya dengan benar, Anda perlu pemahaman yang kuat tentang desain tes yang baik.
Semua kesalahan yang Anda temukan dan perbaiki dalam tes Anda sekarang, akan diulangi lagi dan lagi oleh semua rekan tim Anda ketika mereka mulai belajar. Jika (kapan!) Itu terjadi, Anda sebaiknya siap dengan cepat dan jelas menjelaskan cara meningkatkan jika Anda ingin mereka tetap positif tentang TDD.
sumber
Ketika saya ingin mendorong penggunaan Test Driven Development, saya menjalankan Cyber-Dojo . Dengan latihan semacam ini, penekanannya bukan pada kode itu sendiri, tetapi pada proses penulisan kode .
Kami menghabiskan satu sore, berpasangan, mengulangi kata yang sama, tetapi dalam kondisi yang berbeda. Kami mulai dengan semua kelompok melakukan satu latihan pada saat yang sama. Ini memberikan garis dasar.
Kami kemudian membahas beberapa prinsip dasar TDD, meminta setiap orang berganti mitra dan mengulangi kata yang sama. Kami mengulangi kata yang sama untuk mengurangi penekanan pada pembuatan kode dan sebagai gantinya memusatkan orang pada proses penamaan kasus uji dan siklus Merah / Hijau.
Kemudian kami mengulangi kata itu lagi, tetapi kira-kira setiap 10 menit satu orang di setiap kelompok akan pindah ke kelompok lain, mensimulasikan lingkungan tim yang agak cair yang sering kita temukan di masa sekarang.
Dalam iterasi terakhir, kami meminta kedua mitra berganti setiap 10 menit atau lebih menjadi grup yang berbeda. Ini membantu untuk menunjukkan bahwa dengan TDD, bahkan penyerahan dari satu tim ke tim yang sama sekali berbeda tidak perlu terlalu menyakitkan, karena proyek seharusnya hanya setiap satu siklus Merah / Hijau dari bekerja.
Yang menarik adalah, ada beberapa orang yang telah melakukan TDD sebelum sesi, tapi apa pengetahuan TDD di sana dengan cepat menyebar sampai dengan iterasi akhir melalui kata, kebanyakan orang berpikir dengan cara TDD atau setidaknya bisa menghargai mengapa mungkin bermanfaat.
Orang-orang pada umumnya mengatakan bahwa sore itu menyenangkan dan informatif dan kami sekarang mencari cara lain untuk menggunakan Cyber-Dojo di tempat kerja saya.
Cyber-Dojo , yang ditulis oleh Jon Jagger , bekerja sangat baik untuk latihan semacam ini. Ini adalah lingkungan berbasis web yang terintegrasi untuk melakukan praktek yang disengaja dari TDD dan belajar tentang dinamika tim. Ini memiliki banyak kata yang dipilih secara khusus untuk membantu orang berkonsentrasi pada proses TDD dan bukan masalah. Ini juga mendukung berbagai bahasa, dari Python dan Ruby ke Java dan C ++.
Yang terbaik adalah, setelah melakukan kata, Anda dapat kembali dan melihat perkembangan merah / hijau (atau mungkin tidak * 8 ') dari masing-masing kelompok yang berpartisipasi. Itu lampu lalu lintas adalah cara yang bagus untuk memvisualisasikan bagaimana proses TDD bekerja.
Jika Anda ingin server CyberDojo Anda sendiri, seluruh proyek dapat ditemukan di github dan bahkan ada mesin virtual alat Turnkey Linux yang ditautkan dari sana, yang berarti bahwa dengan asumsi Anda sudah menginstal VMware player atau VirtualBox , Anda dapat menjalankan dan menjalankannya di dalam beberapa menit mengunduh alat!
sumber
Jika mereka menolak TDD, tidak apa-apa. Banyak orang (termasuk saya) mengalami masalah dengan penulisan unit test terlebih dahulu.
Namun, Anda harus mengajukan pertanyaan tentang tidak memiliki unit test sama sekali, dan masalah unit test pecah. Tes unit adalah jaring pengaman yang mencegah banyak kemungkinan bug, dan memungkinkan refactoring kode. Jelaskan tentang kualitas kode yang lebih tinggi, dan kode pembersih.
Saya pikir yang terbaik adalah menemukan video yang menjelaskan keuntungan menggunakan TDD, dan menunjukkannya pada rapat.
Jika dia menolak untuk mendengarkan, maka Anda dapat mencoba untuk pergi ke seseorang di atasnya, tetapi itu mungkin tidak terlalu pintar jika bos Anda begitu keras kepala.
sumber
Sangat sulit meyakinkan orang untuk mengubah kebiasaan mereka, tetapi di sini ada beberapa hal yang bisa Anda coba:
Jika tidak ada yang berfungsi sama sekali, Anda mungkin ingin mempertimbangkan untuk bekerja di tempat lain. Ada banyak perusahaan lain di mana kehidupan Anda akan jauh lebih mudah.
sumber
Ada 2 masalah yang sedikit berbeda di sini: membuat orang untuk melakukan TDD dan orang yang melanggar tes Anda.
Saya tidak yakin tentang masalah pertama, secara pribadi saya merasa ini cara kerja buatan dan tidak cocok untuk semua jenis pembangunan. Saya semua memiliki serangkaian unit test yang baik, tetapi saya biasanya merasa lebih efisien untuk menulis kode terlebih dahulu dan kemudian tes, karena ketika menulis kode ide saya selalu berubah, dan itu buang-buang waktu untuk menulis tes juga awal (IMO).
Pada masalah kedua, siapkan proyek sehingga unit test dijalankan saat check-in, sehingga pengembang lain tidak punya pilihan selain mengetahui bahwa mereka telah melanggar tes.
sumber
Seperti yang dikatakan di banyak "bagaimana saya harus meyakinkan X untuk menggunakan metode / teknologi Y", jawaban saya selalu sama: dengan contoh.
Gunakan dan dapatkan hasil yang lebih baik. Kemudian pastikan yang lain memperhatikan.
sumber
Pada proyek yang ada, Anda tidak. Itu sama seperti jika Anda akan melakukan perubahan cara kurung keriting ditempatkan dalam kode lama karena Anda tidak menyukai gaya lekukan.
sumber
Banyak saran bagus. Dan sekarang, sedikit lagi ...
Anda harus memenangkan hati dan pikiran (WHAM) satu Luddite sekaligus. Lupakan tentang memaksanya turun ke tenggorokan mereka. Banyak pelajaran objek selama periode waktu yang tidak terbatas (maaf tentang itu). Akhirnya Anda akan mencapai massa kritis, meyakinkan orang yang "tepat".
Antusiasme & gairah Anda yang konstan dan konsisten untuk TDD sangat penting dalam kampanye WHAM.
Anda harus mengubah ujian dan mengubah kode menjadi momen yang bisa diajar, pelajaran yang penting bagi co-coders Anda. Jadikan pribadi. IE Apakah mereka peduli dengan reputasi untuk memberikan kode bersih di atas rata-rata? Apakah mereka peduli tentang manajemen yang mengoceh tentang kode yang sekarang terlambat karena penguji integrasi memberi mereka pemeriksaan realitas? Apakah Jack memiliki keinginan untuk memodifikasi beberapa kode yang sulit tetapi takut efek samping?
Kumpulkan contoh-contoh bagus dari pemecahan tes sebagai menjebak bug yang disebabkan koder. Coders akan melihat perubahan tes sebagai pekerjaan yang tidak perlu untuk kode yang tidak relevan; mereka harus mengerti bahwa tes hanya menutupi pantat mereka.
Temukan beberapa kode dengan implikasi global (beberapa metode utilitas sederhana), buat beberapa tes, kemudian tunjukkan bahwa tes mengizinkan perubahan tanpa takut akan gempa bumi di seluruh aplikasi. Dan saya bermaksud menekankan masalah emosional juga!
Kumpulkan beberapa contoh kode waktu-ke-bersih sederhana (yaitu disahkan ke produksi) dan tunjukkan hal itu terlepas dari upaya ekstra untuk pengujian kode , kami menyelesaikannya dengan lebih cepat & dengan kualitas yang lebih tinggi.
Peringatan: TDD bukan obat untuk dan tidak bisa mengatasi desain dan pengkodean OO yang buruk (tapi pasti bisa mengeksposnya). Jangan biarkan Luddites menyalahkan upaya kode pengujian untuk ketidakmampuan mereka.
sumber
Saya akan coba lagi meyakinkan manajer. Dari apa yang Anda tulis, saya tidak berpikir Anda bisa meyakinkan rekan setim Anda untuk melakukan TDD di belakangnya.
Anda harus berbicara bahasanya. Manajer cenderung tidak terkesan dengan teknologi, tetapi mereka mengerti bahasa bisnis:
tes akan menghemat waktu selama pengembangan, karena alih-alih pengujian manual (mencoba mereproduksi bug secara lokal, bermain dengan konsol rel ...) Anda akan menjalankan tes secara otomatis
tes akan menghemat banyak waktu selama pemeliharaan aplikasi, ketika Anda dapat dengan mudah mendeteksi bug setiap kali Anda mengubah sesuatu. Jelaskan bahwa tes membutuhkan investasi awal yang lebih tinggi, tetapi mereka akan membayar sendiri dalam jangka panjang (pemeliharaan tes yang baik biasanya cepat dan mudah)
dan apa yang akan Anda lakukan dengan waktu tambahan? buat moar stuff dan hasilkan moar :)
Sedangkan untuk programmer, coba argumen ini (itu bekerja untuk saya, jalan kembali): "Anda tetap menguji kode, dengan atau tanpa TDD. Hanya Anda yang melakukannya secara manual dan bukan mengotomatiskannya. Pengembang cerdas mengotomatiskan sebanyak mungkin hal. "
sumber
Pada proyek nyata dengan tenggat waktu orang ingin fokus menyelesaikan pekerjaan dengan apa yang mereka ketahui. Itu hanya sifat manusia. Dan jika Anda tidak pernah belajar TDD, Anda akan sama dengan dia dalam situasi ini. Saya guarnatee itu.
Mengapa pemulung tidak menyukai, belajar, dan hidup di RAII? Bagaimana Anda bisa memperjuangkan manajemen memori otomatis tetapi berpegang pada manajemen kuno untuk sumber daya umum seperti file, koneksi, dll? Karena RAII adalah teknologi yang mereka tidak tahu, mengerti, dan tidak punya waktu untuk digunakan ketika mereka memiliki tenggat waktu yang membutuhkan pekerjaan.
Saya yakin Anda tidak menggunakan RAII dan tidak mau belajar dan memahaminya untuk proyek Anda saat ini. Sama seperti rekan kerja Anda yang tidak mau belajar dan memahami TDD.
sumber