Pengalaman saya dengan melakukan transisi
Selama bertahun-tahun saya berada di bawah kesalahpahaman bahwa saya tidak punya cukup waktu untuk menulis unit test untuk kode saya. Ketika saya menulis tes, itu adalah hal yang menggembung, hal-hal berat yang hanya mendorong saya untuk berpikir bahwa saya seharusnya hanya menulis unit test ketika saya tahu mereka diperlukan.
Baru-baru ini saya didorong untuk menggunakan Test Driven Development dan saya menemukan itu sebagai wahyu yang lengkap. Saya sekarang sangat yakin bahwa saya tidak punya waktu untuk tidak menulis tes unit .
Dalam pengalaman saya, dengan mengembangkan dengan pengujian dalam pikiran Anda berakhir dengan antarmuka yang lebih bersih, kelas & modul yang lebih fokus dan umumnya lebih SOLID , kode diuji.
Setiap kali saya bekerja dengan kode lama yang tidak memiliki tes unit dan harus menguji sesuatu secara manual, saya terus berpikir "ini akan jauh lebih cepat jika kode ini sudah memiliki unit test". Setiap kali saya harus mencoba dan menambahkan fungsionalitas unit test ke kode dengan kopling tinggi, saya terus berpikir "ini akan jauh lebih mudah jika telah ditulis dengan cara de-coupled".
Membandingkan dan membedakan dua stasiun percobaan yang saya dukung. Satu telah ada untuk sementara waktu dan memiliki banyak kode warisan, sedangkan yang lainnya relatif baru.
Saat menambahkan fungsionalitas ke lab lama, sering kali turun ke lab dan menghabiskan waktu berjam-jam bekerja melalui implikasi fungsionalitas yang mereka butuhkan dan bagaimana saya dapat menambahkan fungsionalitas itu tanpa mempengaruhi fungsi lainnya. Kode sama sekali tidak diatur untuk memungkinkan pengujian off-line, jadi hampir semuanya harus dikembangkan on-line. Jika saya mencoba mengembangkan secara off-line maka saya akan berakhir dengan lebih banyak objek tiruan daripada yang masuk akal.
Di lab yang lebih baru, saya biasanya dapat menambahkan fungsionalitas dengan mengembangkannya secara off-line di meja saya, mengejek hanya hal-hal yang segera diperlukan, dan kemudian hanya menghabiskan waktu singkat di lab, menambal masalah yang tersisa tidak diambil. -baris.
Saranku
Sepertinya Anda telah memulai dengan baik, setiap kali Anda akan membuat perubahan besar pada alur kerja pengembangan Anda, Anda harus memastikan bahwa semua orang terlibat dalam membuat keputusan itu, dan idealnya sebagian besar orang telah setuju. Dari pertanyaan Anda, sepertinya Anda sudah benar. Jika orang tidak memiliki antusiasme terhadap ide itu, itu pasti gagal atau menghasilkan niat buruk.
Kecuali Anda dapat menyajikan kasus bisnis yang menarik, saya tidak akan merekomendasikan implementasi pengujian unit dan spesifikasi untuk seluruh sistem Anda. Seperti yang saya sebutkan di atas, jika suatu sistem tidak dirancang dengan pengujian dalam pikiran, bisa sangat sulit untuk menulis tes otomatis untuk itu.
Alih-alih, saya akan merekomendasikan mulai dari yang kecil dan menggunakan Aturan Pramuka :
Selalu tinggalkan perkemahan lebih bersih daripada yang Anda temukan.
Jika saat Anda menerapkan sesuatu pada basis kode ini, Anda dapat mengidentifikasi tes khusus yang diperlukan untuk menguji perilaku yang ada dan transisi dari perilaku lama ke yang baru, maka Anda telah mendokumentasikan perubahan dalam spesifikasi dan memulai penerapan unit pengujian untuk sistem anda.
Modul yang tidak Anda sentuh tidak mendapatkan tes unit, tetapi jika Anda tidak menyentuhnya maka itu mungkin karena mereka telah diuji secara menyeluruh dalam penggunaan dan tidak memerlukan perubahan, atau mereka tidak pernah digunakan.
Yang ingin Anda hindari adalah menyia-nyiakan seluruh tes menulis upaya pengembang yang tidak akan pernah diperlukan ( YAGNI bekerja dengan baik untuk kode uji seperti untuk kode produksi * 8 '), tidak akan pernah digunakan lagi dan menurunkan moral orang menjadi berpikir bahwa tes tidak berguna sama sekali.
Ringkasan
Mulailah dari yang kecil, bangun kepercayaan pada tes secara bertahap dan dapatkan nilai bisnis dari mengembangkan tes kapan dan di mana mereka paling menguntungkan tim Anda.