Saya adalah bagian dari tim pengembang yang bekerja dengan banyak tim lain untuk memelihara dan meningkatkan aplikasi yang telah digunakan selama minimal 15 tahun. Ketika pertama kali dibangun dan dirancang, TDD tidak pernah terdengar.
Aplikasi ini cukup stabil, dan kami jarang menemukan bug penghentian acara, tetapi kami melakukan rata-rata satu atau dua bug dalam seminggu yang secara serius mengurangi kualitas layanan. Bug ini membutuhkan waktu lama untuk menemukan dan memperbaiki, sebagian besar karena penunjuk jari, dan satu-satunya pengujian yang kami miliki adalah pengujian antarmuka. Karena ada banyak waktu yang terbuang untuk mencari tahu di mana bug itu dapat diperbaiki, saya dan pengembang lain berencana untuk mengusulkan Pengembangan yang Didorong Uji. Ada perombakan baru yang akan segera hadir, dan kami ingin melihat hampir seluruh pengujian unit dilakukan pada modul baru, kami juga berencana untuk menyarankan membangun unit uji untuk setiap kode yang harus kami ubah yang sudah lama (yaitu, perbaikan bug atau implementasi fitur) ), tetapi tidak menghabiskan waktu mengembangkan kasus uji untuk kode yang tidak menyebabkan masalah.
Bagi saya, ini masuk akal. Bulan ini kami memiliki bug yang membutuhkan waktu dua minggu untuk memperbaikinya, tetapi bisa diidentifikasi sebelum dikerahkan jika pengujian unit telah dilakukan. Tetapi bagi para manajer kami, sepertinya mereka akan menghabiskan lebih banyak uang.
Bagaimana cara meyakinkan klien kami bahwa mereka ingin menghabiskan uang untuk pengujian unit dan pengembangan yang didorong oleh tes? Apakah ada studi yang menunjukkan ROI unit testing?
sumber
Jawaban:
Penggabungan langsung TDD full-blown ke dalam kode lawas, proyek pemeliharaan adalah penjualan yang sangat sulit. Suatu pendekatan yang saya lihat bekerja dengan sangat baik adalah ini. Untuk setiap bug yang masuk, buat tes non-unit otomatis yang menunjukkan bug. Dengan "non-unit", maksud saya sesuatu yang dapat menyentuh banyak bagian dari sistem, tekan database dan sistem file, dll - tetapi dengan "otomatis" yang saya maksud berjalan tanpa interaksi manusia. Ini adalah jenis tes yang Anda inginkan dalam paket regresi Anda dalam acara apa pun. Menulisnya menyelesaikan banyak hal: itu membuat Anda membuat kode dapat diuji, bahkan jika pada tingkat yang sangat kasar, dan itu memaparkan Anda pada konstelasi kode yang mungkin ada hubungannya dengan bug, sehingga mendidik dan memberi tahu Anda tentang materi yang sangat spesifik relevan.
Tapi itu bukan akhirnya. Setelah tes ini berjalan, dan berjalan merah (menunjukkan kesalahan dalam kode), luangkan waktu untuk mencari tahu apa yang salah (Anda harus melakukan ini, dalam hal apa pun). Tapi jangan perbaiki dulu. Setelah Anda mengisolasi apa yang menurut Anda masalahnya - tulis unitTes yang menunjukkan masalah itu. Sekarang Anda memiliki sesuatu yang dapat Anda kerjakan (dan, tidak secara kebetulan, Anda mungkin harus memperbaiki sedikit lebih banyak ke arah testabilitas yang masih lebih besar). Perbaiki bug. Perhatikan tes lulus unit. Mungkin menyempurnakannya dengan beberapa case tepi; dapatkan satu unit - unit yang hanya menghabiskan waktu dua minggu - solid dan bersih dan teruji dengan baik. Sekarang jalankan tes regresi dan perhatikan itu lulus (tentu saja, jika tidak, Anda harus melakukan beberapa penelitian dan unit-level kerja - iterate sampai lulus, juga berlalu). Periksa semuanya. Apa yang Anda punya? Tes regresi untuk kode yang sebelumnya gagal. Tes unit untuk kode yang sebelumnya gagal. Kode kerja yang gagal. Kode yang dirancang lebih baik, karena sekarang lebih dapat diuji daripada sebelumnya. Kepercayaan yang lebih baik pada basis kode Anda,
Itu bukan TDD "murni". Tapi itu menunjukkan hasil, dengan cepat, dan meningkatkan kualitas kode Anda dari waktu ke waktu. Hasilnya akan membantu Anda mendapatkan dukungan manajemen.
sumber
Di perusahaan saya, saya hanya menggunakan metode "only grunt" dari JoelOnSoftware dan mulai menulis unit test setiap kali saya biasanya hanya meretas bersama-sama semacam aplikasi konsol yang dibuang. Saya mulai menyelesaikan banyak hal lebih cepat dengan rilis yang lebih stabil, dan mendapat perhatian karenanya. Ketika ditanya apa yang saya lakukan, saya menjelaskan bahwa saya mulai menggunakan TDD dan menulis unit test setiap kali saya mengubah kode lama atau menulis kode baru. Rekan pengembang saya mulai merasa penasaran dan mulai menggunakan tes unit terintegrasi sendiri. Saya tidak berpikir ada argumen yang baik di luar sana untuk menulis tes untuk bekerja kode warisan, tetapi jika Anda dapat membuat kasus bahwa menulis tes otomatis lebih cepat dan lebih mudah daripada menulis spagetti hack hack, maka pengembang pintar akan mengikuti.Manfaat lain yang menghasilkan perangkat lunak berkualitas lebih tinggi juga akan ada di sana, tetapi kunci untuk mengaktifkan pengembang menunjukkan bahwa itu membuat hidup mereka lebih mudah. Sejauh bisnis masuk, fakta bahwa itu akan menghasilkan perangkat lunak yang lebih baik dan mungkin membutuhkan waktu lebih sedikit untuk dikirim daripada sebelumnya harus lebih dari cukup untuk meyakinkan mereka.
sumber
Pertama, sikap dan rasa ketulusan Anda untuk nilai kualitas menambah uang pelanggan harus dihargai. Dan inilah pemikiran saya tentang bagaimana Anda dapat meyakinkan manajer dan klien Anda:
Ada cara lain, dan mencoba bergabung dengan manajer Anda dalam menghadiri Agile Conference yang terjadi. Tentunya itu patut dikunjungi.
Jika Anda merasa tidak ada yang berhasil, maka lanjutkan ... bergabunglah dengan tempat yang cocok untuk Anda. Dengan tenang, inilah yang saya lakukan. Ketika semuanya gagal, saya pindah;)
Dan tahu apa tes Unit setelah menulis kode tidak benar-benar TDD, tapi kemudian itu selalu bisa menjadi langkah pertama. Cocok sekali di sini setidaknya.
Semoga beruntung dan sukses!
sumber