Legacy Code Semakin Buruk Seiring Usia

Kode legacy tidak menjadi lebih baik seiring berjalannya waktu. Ia justru menjadi lebih buruk.

Minggu lalu, saya menghabiskan tiga jam untuk memperbaiki sebuah bug. Seharusnya hanya butuh 20 menit. Masalahnya adalah sebuah modul validasi dari tahun 2019. Semua orang mengabaikannya karena "berjalan dengan baik." Padahal tidak. Saya menemukan komentar TODO dari tahun 2020 di dalam file tersebut.

Banyak orang memperlakukan kode legacy seperti utang opsional. Mereka berpikir mereka bisa melunasinya saat memiliki waktu. Kode legacy lebih mirip jamur. Ia menyebar. Ia mengontaminasi bagian lain dari sistem Anda. Semakin lama Anda mengabaikannya, semakin mahal biaya untuk membersihkannya.

Ini menciptakan siklus yang buruk:

  • Anda mewarisi proyek yang berantakan.
  • Anda menambahkan satu lagi pernyataan if agar fitur Anda berjalan.
  • Enam bulan kemudian, orang lain melakukan hal yang sama.
  • Satu tahun kemudian, file tersebut memiliki 800 baris dan nol pengujian.

Kode yang "berjalan" ini memiliki biaya tersembunyi:

  • Kecepatan pengembangan menurun. Anda menghabiskan lebih banyak waktu untuk membaca konteks daripada menulis kode.
  • Bug meningkat. Memperbaiki satu hal merusak hal lainnya.
  • Onboarding menjadi sulit. Pengembang baru kesulitan memahami mengapa logika diduplikasi di mana-mana.

Waspadai tanda-tanda bahaya (red flags) berikut:

  • Komentar yang tidak berguna atau menyesatkan.
  • Logika bisnis yang diduplikasi di file yang berbeda.
  • Dependensi sirkular dan coupling yang tinggi.

Jangan mencoba menulis ulang semuanya. Penulisan ulang secara total (full rewrites) gagal dalam 80% kasus. Anda menghabiskan waktu berbulan-bulan membangun kembali apa yang sudah ada sementara bisnis menunggu fitur-fitur baru.

Gunakan refaktorisasi bertahap dengan characterization tests:

  • Tangkap perilaku saat ini dengan pengujian, meskipun perilakunya aneh.
  • Lakukan refaktorisasi tanpa mengubah perilaku tersebut.
  • Ulangi sampai kodenya mudah dibaca.
  • Baru setelah itu ubah perilakunya dengan pengujian yang sebenarnya.

Ikuti aturan ini untuk menghindari jebakan:

  • Jangan pernah melakukan refaktorisasi tanpa pengujian.
  • Jangan mengubah perilaku selama refaktorisasi. Sebuah bug mungkin merupakan fitur tidak terdokumentasi yang diandalkan oleh klien.
  • Biarkan kode yang "tenang" apa adanya. Jika sebuah modul tidak berubah selama tiga tahun dan tidak menimbulkan masalah, biarkan saja.

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