Apa yang harus dilakukan jika Anda mewarisi codebase C++ yang sudah ada?
- Setelah memulai pekerjaan baru, pindah tim, atau ketika rekan senior yang berpengalaman pergi, Anda bisa saja harus menangani codebase C++ besar dengan struktur yang rumit dan unik.
- Anda perlu memperbaiki bug dan menambahkan fitur baru, tetapi tidak bisa mengabaikan atau menyingkirkan codebase tersebut. Ini penting bagi pihak yang membayar gaji Anda, jadi ini juga penting bagi Anda.
Langkah pertama: membuat kode berjalan di lingkungan lokal
- Buat kode dan sistem build berjalan di lingkungan lokal dengan perubahan seminimal mungkin. Jangan lakukan refactor besar-besaran dulu.
Menghapus hal-hal yang tidak perlu
- Hapus semua hal yang sama sekali tidak diperlukan untuk menyediakan fitur yang diiklankan dan dijual oleh perusahaan atau proyek open source.
Membawa proyek ke abad ke-21
- Tambahkan CI (continuous integration), linter, fuzzing, formatting otomatis, dan sebagainya.
Perbaikan kode secara bertahap
- Lakukan perubahan kecil dan bertahap pada kode. Ulangi terus hingga proyek mencapai kondisi yang bisa diterima dari sisi keamanan aplikasi, pengalaman developer, akurasi, dan performa.
Mempertimbangkan penulisan ulang sebagian dengan bahasa yang aman terhadap memori
- Jika memungkinkan, pertimbangkan untuk menulis ulang sebagian kode dengan bahasa yang memory-safe.
Menentukan platform yang didukung
- Nyatakan secara jelas di README pasangan <arsitektur>-<sistem operasi> yang didukung secara resmi. Misalnya x86_64-linux atau aarch64-darwin.
Membuat build berjalan di mesin
- Pastikan build bisa dilakukan secara andal dan konsisten di semua platform yang didukung.
Membuat semua test lulus di mesin
- Jika belum ada test, tulislah test sebelum mengubah kode, lalu buat semuanya lulus, kemudian kembali ke pekerjaan utama.
Menjelaskan cara build dan test aplikasi di README
- Sederhanakan perintah untuk build dan test agar orang nonspesialis pun dapat mengikutinya dengan mudah.
Mencari low-hanging fruit untuk mempercepat build dan test
- Cari cara sederhana untuk meningkatkan kecepatan build dan test tanpa mengubah sistem build.
Menghapus kode yang tidak perlu
- Gunakan peringatan compiler dan linter untuk menemukan lalu menghapus kode yang tidak digunakan.
Linter
- Jangan terlalu terobsesi dengan aturan linter; cukup tambahkan beberapa aturan dasar dan integrasikan ke dalam siklus pengembangan.
Formatting kode
- Pada waktu yang tepat, terapkan gaya kode ke seluruh codebase sekaligus dan commit konfigurasinya.
Sanitizer
- Gunakan sanitizer untuk mendeteksi dan memperbaiki bug nyata serta kebocoran memori.
Menambahkan pipeline CI
- Otomatiskan semua hal baik yang sudah disiapkan (linter, formatting kode, test, dan lain-lain), lalu hasilkan binary untuk lingkungan produksi pada setiap perubahan.
Perbaikan kode secara bertahap
- Fokus pada tujuan yang konkret seperti keamanan, akurasi, dan performa, dan jauhi standar subjektif seperti 'clean code'.
Menulis ulang dengan bahasa yang aman terhadap memori?
- Ini adalah pekerjaan yang sedang berlangsung dan memiliki banyak catatan penting. Lakukan hanya jika ada alasan yang jelas.
Kesimpulan
- Menyediakan rencana konkret dan bertahap untuk keluar dari codebase C++ legacy yang rumit.
Lampiran: manajemen dependensi
- Di C++, pada dasarnya tidak ada manajemen dependensi, dan kebanyakan orang memakai package manager sistem. Namun ini bukan ide yang baik.
- Pendapat penulis tentang manajemen dependensi adalah menggunakan git submodule dan mengompilasi dari source.
Pendapat GN⁺
- Artikel ini memberikan panduan langkah demi langkah yang berguna bagi software engineer junior yang mewarisi codebase C++.
- Menangani kode legacy adalah tantangan umum bagi banyak developer, dan artikel ini menawarkan saran praktis untuk situasi tersebut.
- Penekanan pada pentingnya test selama proses memperbaiki codebase mencerminkan praktik pengembangan perangkat lunak yang baik.
- Pendapat penulis tentang manajemen dependensi bisa diperdebatkan, dan dalam proyek nyata banyak juga yang berhasil menggunakan package manager modern seperti Conan atau vcpkg.
- Saat mengadopsi teknologi, karakteristik proyek dan tingkat keahlian tim perlu dipertimbangkan, dan artikel ini dapat menjadi titik awal yang baik untuk membantu mengambil keputusan tersebut.
1 komentar
Opini Hacker News
Beberapa komentar di Hacker News memberikan saran saat mewarisi proyek C++:
-Wall: perbaiki peringatan untuk memperbaiki masalah pada kode, dan dalam kasus yang jarang, peringatan juga bisa diabaikan setelah benar-benar dipahami.Komentar lain berpendapat bahwa penting untuk lebih dulu memperkenalkan CI, linting, auto-formatting, dan sebagainya:
Seorang pengguna menyarankan untuk pindah ke tim atau perusahaan baru.
Ada juga komentar yang menyinggung pentingnya alat dan teknik untuk memahami kode:
Sebuah komentar memberi saran tentang menambahkan CI, linter, fuzzing, auto-formatting, dan lain-lain untuk memodernisasi proyek:
Komentar lain mengkritik saran untuk menulis ulang sebagian kode dengan bahasa yang aman terhadap memori:
Ada juga komentar yang mengklaim bahwa penggunaan git submodule dan cara mengompilasi dari source lebih unggul daripada package manager:
Komentar-komentar ini menawarkan beragam pendekatan dan saran saat mewarisi proyek C++, serta menunjukkan berbagai pandangan tentang manajemen proyek, pemahaman kode, refactoring, dan strategi modernisasi.