Refactor Kode Berantakan pakai AI Coding Agent

Refactor Kode Berantakan pakai AI Coding Agent

Verdict Cepat: Kode warisan yang berantakan bukan berarti harus ditulis ulang dari nol. AI coding agent bisa bantu rapikan struktur, pecah fungsi raksasa, dan perbaiki nama variabel, asal kendali tetap di tangan manusia. Kunci utamanya: jalan perubahan kecil, pakai test sebagai jangkar, dan jangan biarkan agent mengubah logika bisnis tanpa review.

Kenapa Refactor Lebih Aman dari Rewrite

Tim developer sering ingin membuang file lama dan mulai bersih. Niatnya wajar, hasilnya sering berantakan. Kode yang sudah jalan di produksi membawa aturan bisnis yang tidak tertulis di dokumentasi. Saat ditulis ulang, aturan itu hilang. Bug lama yang sudah diperbaiki muncul lagi, fitur kecil ikut hilang tanpa terasa.

Refactor artinya ubah struktur kode tanpa ubah perilaku. Fungsi tetap mengembalikan hasil yang sama, cuma cara penulisannya yang lebih rapi. AI coding agent cocok di sini karena ia kerja di level teks: pindah fungsi, ganti nama, pecah blok panjang. Agent tidak perlu paham seluruh produk, cukup paham satu fungsi yang sedang dikerjakan saat itu.

Martin Fowler, perancang konsep refactoring modern, menekankan bahwa perubahan kecil bertahap dengan test otomatis jauh lebih aman dibanding rewrite besar-besaran. Agent AI sekarang bisa menjalankan prinsip itu lebih cepat, asal manusia yang pegang rem. Kecepatan agent tidak menggantikan pertimbangan konteks yang hanya dimiliki engineer yang sudah lama pegang kode tersebut.

Siapkan Jangkar Test Dulu

Sebelum agent menyentuh satu baris pun, pastikan ada test yang memverifikasi perilaku saat ini. Tanpa test, tidak ada cara tahu apakah hasil rapian agent masih benar. Test adalah jangkar yang bilang fungsi ini masih kerja seperti kemarin.

Kalau file tersebut belum punya test, minta agent menulis test dulu berdasarkan cara fungsi itu dipanggil. Misal fungsi hitung diskon dipanggil dengan hitungDiskon(harga, member), minta agent bikin beberapa kasus: harga normal, harga nol, member gold, member biasa. Setelah test hijau, baru mulai refactor. Bila nanti test merah, tahu persis langkah mana yang merusak.

Tool seperti Vitest untuk JavaScript, pytest untuk Python, atau JUnit untuk Java bisa dijalankan agent lewat terminal. Katakan ke agent: jalankan test setelah tiap perubahan, hentikan kalau ada yang merah. Pola ini mencegah agent terus melaju saat sudah salah arah sejak langkah kedua.

Jangan Biarkan Agent Ubah Logika Bisnis

Bahaya terbesar pakai agent buat refactor adalah ia memperbaiki sesuatu yang sebenarnya bukan bug. Mungkin ada perhitungan aneh yang memang disengaja, misal pembulatan pajak dibuat manual karena aturan tertentu. Agent bisa menganggap itu keliru dan merombaknya jadi rumus standar.

Aturan praktis: batasi agent hanya pada perubahan struktural. Minta ia fokus pada format, penamaan, dan pembagian fungsi. Larang ia mengubah kondisi if, rumus, atau urutan eksekusi. Kalau menemukan hal yang mencurigakan, suruh laporkan, bukan langsung benerin.

Contoh prompt yang aman: pecah fungsi prosesPesanan jadi tiga fungsi kecil: validasi, hitung total, simpan. Jangan ubah nilai yang dihasilkan, hanya pindahkan struktur. Tulis test untuk memastikan hasil tetap sama. Prompt seperti ini memberi batas jelas sehingga agent tidak kehilangan arah di tengah kerjaan.

Strategi Pecah Fungsi Raksasa

Fungsi yang panjang sering jadi sarang bug. Satu fungsi 300 baris biasanya menangani validasi, pengolahan data, panggil API, dan simpan ke database sekaligus. Agent bisa bantu memisahkan tiap tanggung jawab ke fungsi sendiri supaya tiap bagian punya satu tugas jelas.

Mulai dari pinggir. Cari bagian yang bisa berdiri sendiri, seperti format tanggal atau cek email valid. Minta agent ekstrak itu ke utilitas terpisah. Setelah pinggir rapi, baru masuk ke tengah. Tiap pemisahan harus diikuti test yang memastikan hasil identik dengan sebelumnya.

Hindari menyuruh agent memecah semua sekaligus. Lebih baik sepuluh perubahan kecil yang masing-masing lolos test, ketimbang satu perubahan raksasa yang menyebabkan lima fitur mati. Agent memang cepat, tapi kecepatan tidak menggantikan kehati-hatian dalam menjaga sistem produksi tetap stabil.

Perbaiki Nama tanpa Takut

Nama variabel data1, temp, atau x membuat kode sulit dibaca. Agent sangat bagus di tugas ini karena ia lihat konteks pemakaian di banyak file sekaligus. Minta agent ganti nama berdasarkan arti sebenarnya: data1 jadi daftarPelanggan, temp jadi totalHargaSementara.

Gunakan fitur rename symbol dari editor seperti VS Code atau JetBrains yang terhubung ke agent. Fitur ini mengganti nama di semua file yang memakai variabel tersebut, tidak cuma di satu tempat. Risiko typo atau nama terlewat jadi kecil. Setelah rename, jalankan kembali test dan build project untuk memastikan tidak ada referensi yang tertinggal di modul lain.

Penamaan yang konsisten mengurangi beban kognitif saat developer lain membaca kode. Ini investasi kecil dengan dampak besar pada kecepatan tim dalam menambah fitur baru di kemudian hari.

Manfaatkan Git sebagai Jaring Pengaman

Setiap perubahan agent sebaiknya masuk commit terpisah. Kalau hasilnya rusak, tinggal kembali ke commit sebelumnya, bukan menebak baris mana yang salah. Buat branch khusus untuk refactor agar kode utama tetap aman dari eksperimen.

Minta agent buat commit setelah setiap langkah beres. Jangan biarkan ia menumpuk lima perubahan lalu commit sekaligus. Commit kecil membuat riwayat git terbaca seperti cerita: ekstrak validasi, pisah hitung total, rename variabel. Saat ada masalah, diff antar commit langsung tunjukkan penyebabnya tanpa perlu debug panjang.

Platform seperti GitHub memungkinkan dibuka pull request dari branch refactor, lalu review per commit. Rekan tim bisa cek satu per satu tanpa kewalahan membaca perubahan ribuan baris yang menumpuk dalam satu kali pengiriman.

Pilih Agent yang Tepat untuk Tugas

Tidak semua agent cocok untuk refactor. Cursor dan VS Code Copilot bekerja baik saat perubahan berada dalam satu file atau beberapa file berdekatan, karena mereka melihat konteks editor langsung. Aider dan Claude Code lebih kuat untuk perubahan lintas file karena mereka bisa menjalankan terminal, membaca banyak modul, dan menjalankan test sendiri.

Untuk refactor kode warisan, agent yang bisa menjalankan command shell memberi nilai lebih. Ia bisa memanggil pytest atau npm test sendiri, melihat hasil merah, lalu mencoba perbaiki sebelum melaporkan. Itu mengurangi bolak-balik manual. Namun tetap pasang batas: jangan beri akses agent untuk menjalankan migrasi database atau deploy produksi selama refactor.

Perhatikan juga model di balik agent. Model yang lebih besar biasanya lebih baik memahami struktur kode rumit, tapi butuh waktu dan biaya lebih. Untuk refactor fungsi sederhana, model kecil sudah cukup dan lebih hemat. Sesuaikan dengan kompleksitas tugas, bukan pakai yang paling mahal untuk semua hal.

Contoh Alur Kerja Nyata

Bayangkan modul pembayaran 800 baris dalam satu file pembayaran.py. Langkah pertama: minta agent tulis test untuk fungsi utama prosesPembayaran dengan kasus sukses, gagal, dan timeout. Setelah test hijau, suruh agent ekstrak logika validasi kartu ke validasi_kartu.py. Jalankan test, pastikan masih hijau.

Langkah berikutnya: pisah pemanggilan gateway pembayaran ke gateway.py pakai interface yang jelas. Test lagi. Terakhir, rapikan penamaan di dalam prosesPembayaran yang kini sudah tipis. Di akhir, file 800 baris pecah jadi empat modul kecil, masing-masing fokus satu tugas, dengan test yang menjaga perilaku tetap sama.

Alur ini berjalan aman karena setiap langkah punya verifikasi. Bila agent salah memindahkan sebuah baris, test merah langsung memberi tahu sebelum kerusakan menumpuk. Itulah bedanya refactor bertahap dengan rewrite dadakan.

Biaya dan Kecepatan perlu Diukur

Agent memang cepat, tapi token dan waktu tetap biaya. Refactor file raksasa dalam satu duduk bisa menghabiskan banyak token karena agent membaca seluruh konteks berulang kali. Lebih murah memecah kerjaan jadi sesi kecil: satu fungsi per sesi, satu commit per sesi.

Kecepatan juga bergantung pada seberapa baik prompt diberikan. Prompt yang menceritakan konteks bisnis dan batasan akan menghasilkan langkah tepat di percobaan pertama. Prompt ambigu membuat agent mencoba-coba, membuang token dan waktu. Investasi lima menit menyusun prompt lebih jelas menghemat puluhan menit debug.

Common Mistakes Saat Refactor pakai Agent

Kesalahan pertama: langsung minta agent rapikan seluruh file. Tanpa batasan, agent bisa mengubah terlalu banyak dan jejak perubahan hilang. Selalu beri ruang lingkup sempit supaya setiap langkah terukur dan bisa dibatalkan.

Kesalahan kedua: tidak punya test. Tanpa jangkar, hanya bisa berharap hasilnya benar. Harapan bukan strategi. Test otomatis adalah satu-satunya bukti objektif bahwa fungsi belum rusak.

Kesalahan ketiga: percaya agent seratus persen. Agent tidak tahu konteks bisnis di luar kode. Ia bisa membuat kode yang secara teknis rapi tapi secara fungsi salah karena salah paham tujuan produk. Review manusia tetap wajib di setiap perubahan logika.

Kesalahan keempat: mengabaikan build dan lint. Kadang test lolos tapi ada error di tempat lain karena import berubah. Jalankan linter dan build penuh sebelum anggap selesai supaya error terselubung tidak lolos ke produksi.

Pertanyaan Umum

Apakah agent bisa refactor bahasa apa pun? Ya, selama model di belakangnya paham bahasa tersebut. Python, JavaScript, TypeScript, Go, Java umumnya didukung baik oleh agent populer seperti Claude Code, Cursor, atau Aider yang banyak dipakai komunitas developer.

Berapa lama prosesnya? Tergantung ukuran kode. Fungsi 50 baris bisa beres dalam menit. Modul 2000 baris butuh beberapa putaran dengan review di antaranya. Jangan buru-buru karena tiap putaran butuh verifikasi test.

Apakah perlu hapus komentar lama? Agent bisa bantu, tapi periksa dulu. Kadang komentar berisi alasan bisnis penting yang tidak ada di kode. Pindahkan ke docstring alih-alih dihapus supaya konteks tidak hilang.

Kesimpulan

Refactor kode berantakan dengan AI coding agent bukan soal menyerahkan kendali, tapi soal membagi kerja. Agent tangani bagian membosankan: pindah fungsi, ganti nama, pecah blok. Manusia pegang keputusan penting: apa yang boleh berubah dan kapan harus berhenti. Dengan test sebagai jangkar, Git sebagai jaring, dan review manusia sebagai pengawas, kode warisan bisa jadi rapi tanpa risiko fitur hancur. Mulai dari satu fungsi kecil hari ini, bukan seluruh project besok.

Leave a Reply

You might