- Saya sedang berbicara tentang unit test dalam arti TDD. (Bukan "integrasi" otomatis, atau apa yang Anda sebut pengujian.)
- Kode lawas seperti pada kode: (C ++) tanpa tes. (lihat: Michael Feathers Bekerja Secara Efektif dengan Legacy Code )
- Tetapi juga kode warisan seperti dalam: Kode yang tim kami telah kerjakan selama 10-5 tahun terakhir, jadi kami sangat sering memiliki ide yang bagus tentang di mana harus meletakkan sesuatu untuk mengubah sesuatu.
- Kami memang memiliki tes unit di tempat (melalui Boost.Test) untuk beberapa modul yang datang kemudian atau telah menjadi "alami" cocok untuk tes unit (wadah aplikasi khusus, string-stuff, pembantu jaringan, dll.)
- Kami belum memiliki tes penerimaan otomatis yang tepat.
Sekarang, baru-baru ini saya memiliki "kesenangan" untuk mengimplementasikan 3 fitur baru yang menghadap pengguna.
Masing-masing membutuhkan sekitar 1-2 jam untuk mempercepat dengan bagian-bagian kode yang perlu saya ubah, 1-2 jam untuk menerapkan kode (kecil) yang perlu saya ubah dan 1-2 jam lagi untuk memastikan aplikasi berlari dengan benar setelah itu dan lakukan apa yang seharusnya dilakukan.
Sekarang, saya benar-benar menambahkan kode kecil. (Saya pikir satu metode dan beberapa saluran panggilan untuk setiap fitur.)
Memfaktorkan kode ini (melalui salah satu metode yang disarankan dalam WEwLC ), sehingga tes unit akan masuk akal (dan bukan tautologi lengkap) akan dengan mudah dilakukan 2-4 jam lagi, jika tidak lebih. Ini akan menambah waktu 50% -100% untuk setiap fitur, tanpa manfaat langsung, seperti
- Saya tidak memerlukan unit test untuk memahami apa pun tentang kode
- Pengujian manual adalah jumlah pekerjaan yang sama, karena saya masih perlu menguji apakah kode diintegrasikan dengan benar ke seluruh aplikasi.
Memang, jika , di kemudian hari, "seseorang" datang dan menyentuh kode itu, secara teoritis dia bisa mendapat manfaat dari unit test itu. (Hanya secara teoritis, pulau kode yang diuji akan hidup di lautan kode yang tidak diuji.)
Jadi, "kali ini" saya memilih untuk tidak melakukan kerja keras menambahkan unit test: Perubahan kode untuk mendapatkan hal-hal yang sedang diuji akan jauh lebih kompleks daripada perubahan kode untuk mendapatkan fitur dengan benar (dan bersih) diimplementasikan.
Apakah ini sesuatu yang khas untuk kode lawas yang digabungkan? Apakah saya malas / apakah kita menetapkan prioritas yang salah sebagai sebuah tim? Atau apakah saya bijaksana, hanya menguji hal-hal di mana overhead tidak terlalu tinggi?