Saya akan mengambil tugas mengimplementasikan kembali antarmuka yang sudah didefinisikan (satu set file header C ++) dalam basis kode yang relatif besar dan lama. Sebelum melakukan ini, saya ingin memiliki cakupan tes selengkap mungkin, sehingga saya dapat mendeteksi kesalahan implementasi ulang sedini dan semudah mungkin. Masalahnya adalah bahwa basis kode yang sudah ada tidak dirancang agar mudah diuji, dengan (sangat) kelas besar dan fungsi, tingkat tinggi kopling, fungsi dengan (banyak) efek samping, dll.
Akan menyenangkan untuk mendengar pengalaman sebelumnya dengan tugas yang serupa, dan beberapa tips yang baik dan konkret tentang bagaimana Anda melakukan retrofit tes otomatis (unit, integrasi, regresi, dll.) Ke kode lawas Anda.
Jawaban:
Pertama-tama, dapatkan dan baca Bekerja Efektif dengan Kode Legacy oleh Michael Feathers - ini adalah bantuan yang sangat diperlukan untuk tugas-tugas tersebut.
Kemudian, beberapa catatan:
sumber
Metode terbaik adalah tahu adalah Metode Mikado. http://mikadomethod.wordpress.com/2010/08/04/the-mikado-method-book/ Ini hanyalah generalisasi dari teknik sederhana, tetapi itu satu-satunya cara saya tahu untuk mulai meningkatkan kualitas kode dalam basis kode besar tanpa mengambil risiko yang tidak perlu.
WEWLC juga buku yang sangat bagus tentang itu tetapi ditulis dalam C ++ tidak selalu berguna dengan kode Java atau Ruby.
sumber
Tes pas retro ke basis kode lama bisa sangat sulit jika desainnya monolitik.
Jika memungkinkan (apakah Anda punya waktu / uang), salah satu cara untuk maju adalah refactoring kode menjadi unit yang lebih dapat diuji.
sumber
Saya ingin menambahkan satu tautan . Ada beberapa contoh implementasi yang tidak begitu mudah diuji yang difaktorkan ulang menjadi kode yang lebih ramah xUnit. Sedangkan untuk pendekatan umum pergi coba tautan yang telah disebutkan (Joel post, Working With Legacy code
sumber