Jawaban singkat untuk pertanyaan yang paling sering diajukan pembaca tentang topik ini.
01Mengapa AI agent pandai dalam migrasi kode legacy?
Migrasi itu terbatas, repetitif, dan dapat diverifikasi, yang merupakan kebalikan dari tugas terbuka tempat agen kesulitan. Versi framework atau bahasa target mendefinisikan arti selesai, transformasi yang sama berlaku di banyak berkas, dan sistem yang ada adalah oracle rujukan yang bisa Anda pakai untuk menguji hasilnya. Bentuk itu langsung memainkan kekuatan seorang agen.
02Apa yang harus dilakukan sebelum memigrasikan kode legacy dengan agen?
Bangun jaring pengaman terlebih dahulu. Characterization test menegaskan apa yang dilakukan kode hari ini alih-alih apa yang seharusnya dilakukannya, mengubah sistem lama menjadi spesifikasi yang dapat dieksekusi yang harus dipertahankan agen. Tanpa mereka Anda memercayai pemahaman agen atas kode yang tak seorang pun lain ingat, dan perubahan perilaku yang diam-diam akan lolos tanpa disadari.
03Bagaimana menjalankan migrasi legacy dalam skala besar dengan agen?
Gunakan headless mode untuk menskripkan satu agen per modul, sehingga kegagalan di satu unit tetap terisolasi alih-alih menggagalkan batch. Beri tiap agen satu modul dan satu target test yang harus lolos, catat tiap hasil, dan jalankan ulang hanya unit yang gagal. Kelompokkan perubahan terkait menjadi pull request yang dapat ditinjau alih-alih satu diff raksasa.
04Di mana AI agent kesulitan pada kode legacy?
Mereka kesulitan dengan pengetahuan turun-temurun yang tak pernah masuk ke dalam kode: workaround untuk bug sebuah vendor, urutan yang diam-diam diandalkan sebuah job di hilir. Agen membaca sintaks dengan fasih tetapi dengan percaya diri memodernkan perilaku tak terdokumentasi hingga hilang. Sebuah keanehan yang terlihat seperti bug kadang menyangga beban, dan itulah yang harus ditangkap characterization test.
05Apakah migrasi yang dipimpin agen tetap perlu review manusia?
Ya. Sebuah characterization test yang lolos tetap melewatkan perilaku yang tak terpikir untuk ditangkap, jadi jaga seorang manusia di tombol merge. Karya Simon Willison tentang async code-research agent menyarankan membiarkan agen mencoba migrasi di branch sekali pakai atau paralel, memperlakukan keluarannya sebagai draf, dan membiarkan seseorang memutuskan apa yang benar-benar di-merge.
Upgrade framework dan port bahasa itu repetitif, terspesifikasi baik, dan dapat diverifikasi, persis bentuk yang ditangani AI agent dengan baik. Cara menjalankannya dengan aman berbekal jaring test.
Migrasi legacy, upgrade framework, dan port bahasa itu terbatas, repetitif, dan dapat diverifikasi, yang membuatnya sangat cocok untuk AI agent yang dijalankan dalam batch headless. Satu hal yang tak bisa ditawar adalah jaring pengaman: characterization test yang mematok perilaku saat ini sebelum satu baris pun berubah, agar Anda sadar ketika sebuah agen memodernkan sebuah aturan hingga lenyap.
Migrasi legacy adalah pekerjaan yang tidak diinginkan siapa pun dan yang cepat atau lambat dibutuhkan setiap basis kode: pindah dari framework yang usang, port layanan lama ke bahasa yang didukung, naikkan dependensi yang masih diimpor tiga ratus berkas. Ia membosankan, mekanis, dan berisiko sekaligus, yang justru menjadikannya salah satu pekerjaan terbaik untuk diserahkan ke sebuah AI agent.
Masalahnya, kode legacy menjadi legacy justru karena tidak ada yang ingat mengapa ia melakukan apa yang dilakukannya, dan seorang agen akan dengan riang menulis ulang perilaku yang tidak dipahaminya. Panduan ini membahas mengapa migrasi cocok untuk agen, cara membangun jaring pengaman terlebih dahulu, dan di mana pekerjaan itu tetap bisa salah.
Mengapa migrasi cocok untuk agen
Kebanyakan tugas agen bersifat terbuka, dan yang terbuka itulah tempat agen kesulitan. Migrasi adalah kebalikannya: tujuannya terdefinisi, transformasinya berulang di banyak berkas, dan keberhasilannya dapat dicek terhadap perilaku lama. Bentuk itu memainkan kekuatan seorang agen.
Tiga sifat menjadikan migrasi sebagai kasus penggunaan yang menonjol:
Ia terbatas, karena versi framework atau bahasa target mendefinisikan persis seperti apa selesai itu.
Ia repetitif, sehingga transformasi yang sama berlaku di puluhan atau ratusan berkas, yang melelahkan bagi manusia dan sepele bagi agen.
Ia dapat diverifikasi, karena sistem yang ada adalah oracle rujukan: kode yang dimigrasikan seharusnya berperilaku sama, dan Anda bisa mengujinya.
Bangun jaring pengaman terlebih dahulu
Sebelum Anda memigrasikan apa pun, tangkap apa yang dilakukan kode itu hari ini. Characterization test, yang menegaskan perilaku saat ini alih-alih perilaku yang dimaksud, mengubah sistem lama menjadi spesifikasi yang dapat dieksekusi yang harus dipertahankan agen. Tanpa mereka, Anda memercayai pemahaman agen atas kode yang tak seorang pun lain juga memahaminya.
Begitu jaringnya terpasang, migrasi terparalelisasi dengan rapi. Headless mode memungkinkan Anda menskripkan satu agen per modul, sehingga kegagalan di satu unit tetap terisolasi alih-alih menggagalkan batch:
# One headless agent per module, isolated failures
for mod in $(cat modules.txt); do
claude -p "Port $mod from Enzyme to React Testing Library. \
Keep behavior identical. Run npm test -- $mod until it passes." \
--output-format json >> migration.log
done
Beri tiap agen satu modul dan satu target test yang harus lolos, bukan seluruh repo. Tugas kecil yang terisolasi menjaga kegagalan tetap terbatas, membuat kemajuan mudah dilacak di log, dan membiarkan Anda mengulang satu unit tanpa menjalankan ulang semua yang sudah berhasil.
Alur kerja migrasi
Sebuah migrasi yang berulang mengikuti busur yang sama entah Anda mengupgrade framework atau memport bahasa. Bergeraklah dalam irisan, dan verifikasi tiap irisan sebelum yang berikutnya.
Inventarisasi permukaannya dengan mendaftar berkas, modul, dan API yang disentuh migrasi.
Karakterisasi perilaku dengan test yang mematok keluaran saat ini, terutama untuk kode yang belum punya test hari ini.
Migrasikan dalam irisan kecil, satu modul atau satu pola dalam satu waktu, agar tiap perubahan dapat ditinjau.
Verifikasi tiap irisan terhadap characterization test sebelum melanjutkan, dan hentikan batch pada regresi pertama.
Tinjau diff-nya dengan seorang manusia atau agen baru, karena test yang lolos tetap melewatkan perilaku yang tak terpikir untuk ditangkap.
Di mana agen kesulitan pada legacy
Kegagalan berkumpul di sekitar hal-hal yang disembunyikan kode legacy. Seorang agen membaca sintaks dengan fasih tetapi tidak bisa melihat pengetahuan turun-temurun yang tak pernah masuk ke dalam kode: workaround untuk bug sebuah vendor, urutan yang diam-diam diandalkan sebuah job di hilir.
Karya Simon Willison tentang async code-research agent menyarankan sikap yang berguna: biarkan agen mencoba migrasi di branch sekali pakai atau paralel, perlakukan keluarannya sebagai draf, dan biarkan manusia yang memutuskan apa yang benar-benar di-merge. Agen menjelajah; Anda menyetujui.
Agen dengan percaya diri memodernkan perilaku tak terdokumentasi hingga hilang. Sebuah keanehan yang terlihat seperti bug kadang bersifat menyangga beban, dan seorang agen akan membersihkannya tanpa ragu. Characterization test itulah yang menangkap ini: tanpa mereka, regresi terkirim diam-diam dan muncul di produksi berminggu-minggu kemudian.
Menskalakan dengan headless dan review
Begitu satu migrasi berfungsi dari ujung ke ujung, polanya berskala, selama gerbang review ikut berskala dengannya.
Sebar ke banyak modul dengan run headless, satu agen per unit, mencatat tiap hasil untuk pemeriksaan nanti.
Pertahankan suite karakterisasi sebagai gerbang yang harus dilewati tiap unit yang dimigrasikan sebelum ia dianggap selesai.
Kelompokkan perubahan terkait menjadi pull request yang dapat ditinjau alih-alih satu diff raksasa yang tak bisa dibaca manusia.
Lacak kemajuan dari log, dan jalankan ulang hanya unit yang gagal alih-alih seluruh set.
AI agent benar-benar pandai dalam migrasi legacy, tetapi hanya di dalam harness yang mengasumsikan mereka akan salah pada kasus-kasus halus. Bangun jaring karakterisasi, migrasikan dalam irisan yang dapat diverifikasi, sebar dengan run headless, dan jaga seorang manusia di tombol merge. Lakukan itu dan migrasi yang tidak diinginkan siapa pun menjadi akhir pekan penuh batch terawasi alih-alih satu kuartal penuh kecemasan.