Bagaimana meyakinkan teman satu tim untuk menggunakan TDD [ditutup]

15

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.

wizztjh
sumber
11
"kode seseorang akan merusak tes saya" apakah Anda mempertimbangkan kemungkinan bahwa ini menunjukkan desain dan / atau tes Anda terlalu rapuh?
nyamuk
1
Terkait erat: programmers.stackexchange.com/questions/44145/…
Péter Török
2
Mungkin mulai membuat tes integrasi. Itu lebih sulit untuk dipecahkan, karena input / output harus (hampir) selalu sama. Setelah semua orang terbiasa dengan hal ini, tambahkan tes unit karena tes integrasi agak lambat ketika menjalankan semuanya. Sebagai catatan: Jika saya adalah seorang PM dari suatu proyek kecil (kurang lebih 2 bulan atau lebih), saya tidak akan suka jika para devs juga menghabiskan waktu menulis tes. Proyek ini perlu diselesaikan dan tes menulis baik, tetapi membutuhkan waktu dan proyek-proyek kecil seperti itu, kemungkinan kecil Anda melakukan banyak perawatan dalam waktu proyek.
Jan_V
1
Pengembang harus terus menulis kode yang kuat dan stabil dan tes dapat membantu dengan ini. Kami bahkan tidak memberi tahu PM bahwa kami sedang menulis tes, karena itu bukan urusan mereka. Kami menulisnya untuk memastikan kode kami masih berfungsi sama dengan 5 bulan yang lalu. Selain itu, Anda seharusnya tidak melihatnya sebagai 'tes' nyata karena lebih merupakan asuransi, atau penolong, atau pemeriksa. Ketika seseorang mengatakan 'kami sedang menulis tes', seseorang bisa menjadi bingung dan berpikir ini adalah tugas yang harus dilakukan oleh seorang tester.
Jan_V
2
Juga sangat mirip dengan: programmers.stackexchange.com/q/141468/39178 ... dan saya masih mencari beberapa argumen yang bagus. Masalahnya adalah Anda benar-benar tidak dapat mengubah pikiran orang jika mereka tidak terbuka untuk berubah atau jika mereka merasa bahwa apa yang sudah mereka lakukan sudah cukup baik bagi mereka.
S.Robins

Jawaban:

5

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...

... ketika saya menarik, kode seseorang akan merusak tes saya dan saya yang harus memperbaikinya.

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.

agas
sumber
2
Jawaban yang bagus, tetapi saya akan menyebutkan bahwa jika tidak ada orang lain yang melakukan TDD atau bahkan menjalankan test suite, maka skenario umum untuk memecahkan tes adalah jika seseorang membuat perubahan pada kode produksi tanpa mengubah tes untuk mengharapkan perubahan dalam perilaku. Bisa sesederhana mengubah kata-kata dalam pesan pengecualian. Mereka check-in, OP check-out, tes pecah, hilaritas terjadi. Anda mungkin mempertimbangkan sebuah tes yang menegaskan pesan kesalahan yang sebenarnya terlalu rapuh, tapi kontrak untuk pekerjaan terakhir saya didefinisikan cacat sebagai salah penyimpangan dari AAT menyatakan, dan pesan kesalahan yang cacat umum.
KeithS
12

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!

Mark Booth
sumber
1
+1 untuk referensi cyber-dojo. Tidak sadar. Terlihat sangat menarik.
radarbob
8

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.

BЈовић
sumber
6

Sangat sulit meyakinkan orang untuk mengubah kebiasaan mereka, tetapi di sini ada beberapa hal yang bisa Anda coba:

  • Bicaralah dengan pengembang lain dan jelaskan kepada mereka mengapa menurut Anda TDD adalah ide yang bagus.
  • Meyakinkan mereka (atau setidaknya beberapa dari mereka) untuk mencobanya untuk waktu yang terbatas
  • Cobalah untuk menetapkan beberapa persyaratan minimum untuk bekerja dengan baik sebagai sebuah tim. Mereka tidak perlu harus melakukan TDD, tetapi mereka tentu tidak harus memeriksa kode yang gagal dalam tes unit. Ini adalah masalah terpisah daripada meyakinkan mereka untuk menggunakan TDD, dan jauh lebih penting untuk diatasi.
  • Cobalah meyakinkan manajemen untuk memberlakukan masa percobaan untuk TDD. Anda harus siap memberikan beberapa bukti mengapa ini adalah praktik yang baik dan bagaimana hal itu akan menghemat waktu dan uang perusahaan di masa depan.

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.

Oleksi
sumber
1
Singapura adalah negara kecil, tidak banyak pilihan.
wizztjh
6
"Jika tidak ada yang bekerja sama sekali, Anda mungkin ingin mempertimbangkan untuk bekerja di tempat lain." Atau, hanya sebagai catatan, Anda dapat mempertimbangkan berhenti menggunakan TDD :).
Lukas Stejskal
1
+1 untuk titik peluru ketiga. Itulah masalah sebenarnya.
riwalk
6

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.

Chris Card
sumber
Ini adalah poin yang bagus, mereka adalah 2 masalah yang terpisah. Pertama, selesaikan masalah "mereka melanggar tes saya". Kemudian usahakan agar mereka melakukan TDD.
ozz
+1 untuk "sejak saat menulis kode, ide saya selalu berubah," dan pengamatan yang menarik. Mungkin saya juga sama, dan itulah sebabnya saya kesulitan menulis tes terlebih dahulu? Terutama pada awal proyek eksperimental.
Buttons840
4

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.

Klaim
sumber
2

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.

Dante
sumber
ini proyek baru, saya baru memulainya minggu ini.
wizztjh
Proyek terakhir kami menjadi terlalu besar dan bermasalah. Jadi, saya pikir itu ide yang baik untuk menggunakan TDD untuk proyek ini.
wizztjh
2

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.

radarbob
sumber
1

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. "

Lukas Stejskal
sumber
0

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.

Tuan Tydus
sumber