Kode Legacy Semakin Buruk Seiring Bertambahnya Usia
Kode legacy tidak menua seperti anggur. Ia justru semakin buruk setiap hari Anda mengabaikannya.
Minggu lalu, saya menghabiskan tiga jam untuk men-debug masalah yang seharusnya hanya memakan waktu 20 menit. Pelakunya adalah sebuah modul validasi dari tahun 2019. Orang-orang membiarkannya karena modul itu berfungsi. Padahal sebenarnya tidak. Saya menemukan komentar "TODO: refactor this" dari tahun 2020.
Banyak orang menganggap kode legacy sebagai utang opsional. Mereka pikir mereka akan melunasinya saat memiliki waktu. Kode legacy bekerja seperti jamur. Ia menyebar. Ia menginfeksi segala sesuatu di sekitarnya. Semakin lama Anda menunggu, semakin mahal biaya untuk membersihkannya.
Siklusnya dapat diprediksi:
- Anda mewarisi fitur yang berantakan tetapi berfungsi.
- Anda menambah satu lagi pernyataan "if" agar fitur tersebut berjalan.
- Enam bulan kemudian, orang lain melakukan hal yang sama.
- Satu tahun kemudian, file tersebut memiliki 800 baris dan nol pengujian.
Biaya tersembunyi ini berdampak pada Anda dalam tiga cara:
- Kecepatan menurun. Anda menghabiskan lebih banyak waktu untuk memahami konteks daripada menulis kode.
- Bug bertambah. Satu perbaikan merusak hal lain karena logikanya saling terkait.
- Onboarding gagal. Pengembang baru kesulitan memahami mengapa logika yang sama ada di tujuh tempat berbeda.
Waspadai tanda-tanda bahaya (red flags) berikut:
- Komentar tidak berguna seperti "HACK: do not touch this."
- Duplikasi logika bisnis di berbagai file yang berbeda.
- Dependensi sirkular di mana layanan saling bergantung satu sama lain.
Jangan menulis ulang semuanya. Penulisan ulang secara total (full rewrite) gagal dalam 80% kasus. Sebaliknya, gunakan refactoring inkremental dengan characterization tests.
Ikuti proses ini:
- Tangkap perilaku saat ini dengan pengujian, bahkan bagian yang aneh sekalipun.
- Lakukan refactor pada kode tanpa mengubah perilaku tersebut.
- Ulangi sampai kodenya mudah dibaca.
- Ubah perilakunya hanya setelah Anda memiliki pengujian yang nyata.
Aturan yang harus diikuti:
- Jangan pernah melakukan refactor tanpa pengujian.
- Hindari peningkatan yang mengubah cara kerja kode. Sebuah bug mungkin merupakan fitur yang diandalkan oleh klien.
- Biarkan kode yang "tenang" apa adanya. Jika sebuah modul tidak berubah selama tiga tahun dan tidak menimbulkan masalah, jangan menyentuhnya.
Fokuskan energi Anda pada kode yang sering Anda sentuh.
Sumber: https://dev.to/taina_costa_f/legacy-code-nao-envelhece-como-vinho-quanto-mais-espera-pior-fica-132h
