Dalam beberapa bulan seorang kolega akan pindah ke proyek baru dan saya akan mewarisi salah satu proyeknya. Untuk mempersiapkan, saya sudah memesan Michael Feathers ' Bekerja Efektif dengan Kode Legacy .
Tapi buku-buku ini serta sebagian besar pertanyaan tentang kode warisan yang saya temukan sejauh ini berkaitan dengan kasus mewarisi kode apa adanya. Tetapi dalam kasus ini saya benar-benar memiliki akses ke pengembang asli dan kami punya waktu untuk penyerahan tertib.
Beberapa latar belakang pada potongan kode yang akan saya warisi:
- Ini berfungsi: Tidak ada bug yang dikenal, tetapi karena persyaratan kinerja terus meningkat, beberapa optimasi akan diperlukan dalam waktu yang tidak lama lagi.
- Tidak berdokumen: Ada hampir nol dokumentasi pada tingkat metode dan kelas. Apa yang seharusnya dilakukan oleh kode pada tingkat yang lebih tinggi, dipahami dengan baik, karena saya telah menulis menentang API-nya (sebagai kotak hitam) selama bertahun-tahun.
- Hanya tes integrasi tingkat yang lebih tinggi: Hanya ada tes integrasi yang menguji interaksi yang tepat dengan komponen lain melalui API (sekali lagi, kotak hitam).
- Tingkat sangat rendah, dioptimalkan untuk kecepatan: Karena kode ini merupakan pusat dari seluruh sistem aplikasi, banyak dari kode tersebut telah dioptimalkan beberapa kali selama bertahun-tahun dan tingkatnya sangat rendah (satu bagian memiliki manajer memori sendiri untuk struktur tertentu / catatan).
- Bersamaan dan bebas-kunci: Sementara saya sangat akrab dengan pemrograman bersamaan dan bebas-kunci dan sebenarnya telah berkontribusi beberapa bagian untuk kode ini, ini menambah lapisan kompleksitas lainnya.
- Basis kode besar: Proyek khusus ini lebih dari sepuluh ribu baris kode, jadi tidak mungkin saya bisa menjelaskan semuanya kepada saya.
- Ditulis dalam Delphi: Saya hanya akan menempatkan ini di luar sana, meskipun saya tidak percaya bahasanya cocok dengan pertanyaan, karena saya percaya jenis masalah ini adalah agnostik bahasa.
Saya bertanya-tanya bagaimana waktu sampai kepergiannya sebaiknya dihabiskan. Berikut adalah beberapa ide:
- Dapatkan semuanya untuk dibangun di mesin saya: Meskipun semuanya harus diperiksa ke dalam kontrol kode sumber, yang tidak pernah lupa untuk memeriksa file sesekali, jadi ini mungkin harus menjadi urutan pertama bisnis.
- Lebih banyak tes: Sementara saya ingin lebih banyak tes unit tingkat kelas sehingga ketika saya akan membuat perubahan, bug apa pun yang saya perkenalkan dapat ditangkap sejak awal, kode seperti sekarang tidak dapat diuji (kelas besar, metode panjang, terlalu banyak saling ketergantungan).
- Apa yang harus didokumentasikan: Saya pikir sebagai permulaan akan lebih baik untuk memfokuskan dokumentasi pada area-area dalam kode yang jika tidak akan sulit untuk dipahami misalnya karena sifat tingkat rendah / sangat dioptimalkan. Saya takut ada beberapa hal di sana yang mungkin terlihat jelek dan membutuhkan refactoring / penulisan ulang, tetapi sebenarnya optimasi yang telah ada di sana untuk alasan yang baik yang mungkin saya lewatkan (lih. Joel Spolsky, Hal yang Seharusnya Anda Lakukan) Never Do, Bagian I )
- Cara mendokumentasikan: Saya pikir beberapa diagram kelas dari arsitektur dan diagram urutan fungsi kritis disertai dengan beberapa prosa akan menjadi yang terbaik.
- Siapa yang harus didokumentasikan: Saya bertanya-tanya apa yang lebih baik, meminta dia menulis dokumentasi atau meminta dia menjelaskannya kepada saya, sehingga saya dapat menulis dokumentasinya. Saya takut, bahwa hal-hal yang jelas baginya tetapi bukan saya kalau tidak tidak akan dibahas dengan baik.
- Refactoring menggunakan pair-programming: Ini mungkin tidak mungkin dilakukan karena keterbatasan waktu, tapi mungkin saya bisa memperbaiki beberapa kode-nya agar lebih mudah dikelola sementara dia masih ada untuk memberikan masukan mengapa hal-hal seperti itu adanya.
Silakan komentari dan tambahkan ini. Karena tidak ada cukup waktu untuk melakukan semua ini, saya sangat tertarik pada bagaimana Anda memprioritaskan.
Pembaruan: Ketika proyek serah selesai, saya telah memperluas daftar ini dengan pengalaman saya sendiri dalam jawaban di bawah ini .