Apa itu refactoring kode?

Pengembang perangkat lunak sedang bekerja di komputer

Penyusun

Rina Diane Caballar

Staff Writer

IBM Think

Cole Stryker

Staff Editor, AI Models

IBM Think

Apa yang dimaksud dengan pemfaktoran ulang kode?

Pemfaktoran ulang kode adalah praktik pengembangan perangkat lunak yang mengubah struktur internal kode perangkat lunak tanpa memodifikasi perilaku eksternal atau memengaruhi fungsinya. Perubahan kecil ini bertujuan untuk membuat kode lebih mudah dibaca dan dipelihara.

Martin Fowler mempopulerkan praktik ini melalui bukunya Refactoring, yang pertama kali diterbitkan pada tahun 1999. Refaktorisasi kode dapat membantu menghilangkan "bau kode", yang didefinisikan oleh Fowler sebagai "indikasi permukaan yang biasanya berhubungan dengan masalah yang lebih dalam di dalam sistem." Dia menambahkan bahwa bau kode "cepat dikenali atau diendus" dan mengutip metode panjang dan kelas yang hanya berisi data dan tidak ada perilaku sebagai contoh bau kode.

Contoh refactoring kode termasuk memperbaiki pemformatan yang salah, mengganti nama variabel yang tidak jelas, menghapus fungsi yang duplikat atau tidak terpakai, dan memecah metode yang besar dan panjang menjadi blok-blok yang lebih kecil dan lebih mudah dikelola. Modifikasi yang sepele dan menjaga perilaku ini cenderung tidak merusak kode atau menimbulkan kesalahan, tetapi efek tambahannya dapat membantu mengoptimalkan kinerja perangkat lunak.

Teknik pemfaktoran ulang kode

Refactoring mungkin tampak seperti upaya yang mudah, tetapi beberapa taktik dapat membantu pengembang perangkat lunak mengambil pendekatan yang lebih strategis:

    ● Abstraksi

    ● Komposisi

    ● Fitur bergerak

    ● Refactor merah-hijau

    ● Penyederhanaan

Abstraksi

Abstraksi adalah konsep dasar dalam pemrograman berorientasi objek. Ini memerlukan generalisasi objek sehingga detail kompleks disembunyikan dan hanya informasi penting yang tersisa.

Dalam refactoring kode, abstraksi biasanya diimplementasikan untuk basis kode besar. Ini terdiri dari 2 mekanisme:

Metode pull-up menarik kode dari subkelas dan pindah ke atas dalam hierarki ke kelas abstrak atau superkelas. Hal ini memungkinkan duplikasi kode yang lebih sedikit dan penggunaan kembali atribut atau fungsi bersama yang lebih baik.

 ● Metode push-down mendorong kode dari kelas abstrak atau superkelas ke subkelas untuk logika yang tidak dapat digunakan kembali atau hanya berlaku untuk subkelas tertentu.

Komposisi

Pendekatan modular ini memecah atau membagi potongan besar kode menjadi lebih kecil agar lebih sederhana dan mudah dikelola. Metode ekstraksi dan metode inline adalah 2 pendekatan komposisi:

● Pendekatan ekstraksi mengambil bagian dari metode yang sudah ada dan memindahkan ke dalam metode baru. Hal ini dapat dilakukan untuk metode besar yang berisi fungsi yang berbeda misalnya, sehingga setiap fungsi dapat memiliki metode yang berdiri sendiri.

● Pendekatan inline menggantikan pemanggilan ke metode dengan badan atau isi metode itu sendiri, dan metode tersebut kemudian dihapus. Ini biasanya berlaku untuk metode yang hanya memiliki beberapa baris kode dan dipanggil oleh hanya satu kelas, misalnya.

Fitur bergerak

Dalam teknik ini, atribut, metode, dan fitur dipindahkan antar kelas untuk mengurangi ketergantungan dan meningkatkan kekompakan dalam fungsi suatu kelas dan antar kelas. Distribusi ulang ini membantu tercapainya desain kode yang ada secara lebih logis dan seimbang, sehingga lebih mudah untuk diperluas dan dirawat.

Refactor merah-hijau

Red-green-refactor meminjam dari pengembangan berbasis pengujian, di mana pengujian ditulis sebelum kode sumber itu sendiri. Ini adalah strategi berulang yang memungkinkan refactoring dan pengujian berkelanjutan.

Proses 3 tahap ini mengikuti langkah-langkah beirkut:

● Selama fase merah, pengembang menulis tes untuk memvalidasi perilaku atau fungsi perangkat lunak tertentu. Tes ini awalnya dimaksudkan untuk gagal karena kode belum dibuat.

● Pada fase hijau, pemrogram menulis kode untuk perilaku atau fungsi yang ditentukan. Ini bisa menjadi kode minimum yang diperlukan untuk lulus tes, karena tujuannya di sini adalah kecepatan melebihi kualitas.

● Terakhir, fase refactor adalah saat penyempurnaan terjadi, membuat perbaikan yang diperlukan untuk kode yang lebih bersih, lebih jelas, lebih efisien sambil tetap mempertahankan perilakunya dan lulus semua tes terkait.

Penyederhanaan

Tujuannya di sini adalah untuk menyederhanakan kode dan logika terkait. Hal ini dapat berupa mengurangi jumlah parameter dalam metode, mengganti nama variabel atau metode yang terlalu panjang, menggabungkan ekspresi kondisional yang mengarah pada hasil yang sama, memisahkan fragmen kondisional yang kompleks atau bahkan menggunakan polimorfisme sebagai pengganti kondisional.

Manfaat pemfaktoran ulang kode

Bayangkan pemfaktoran ulang kode sebagai merapikan ruangan setiap hari untuk membuat pembersihan di akhir minggu menjadi lebih mudah dan lebih cepat. Tujuan dari refactoring kode adalah untuk mengurangi hutang teknis, yang terakumulasi sebagai akibat dari pemrogram mengambil jalan pintas, seperti menduplikasi logika, gagal mengikuti standar pengodean atau menggunakan nama variabel yang tidak jelas.

Berikut adalah beberapa keuntungan yang dapat diperoleh tim pengembangan perangkat lunak dari refactoring kode:

    ● Mengurangi kompleksitas

    ● Peningkatan pemeliharaan

    ● Peningkatan keterbacaan kode

    ● Kecepatan lebih tinggi

Kompleksitas menurun

Refactoring dapat menghasilkan kode yang lebih sederhana. Ini membantu pengembang lebih memahami basis kode besar. Programmer yang baru dipekerjakan juga mendapatkan manfaat karena mereka dapat dengan cepat memahami cara kerja kode yang tidak dikenal.

Peningkatan pemeliharaan

Refactoring kode meletakkan dasar untuk pemeliharaan yang lebih baik. Kode yang jelas membutuhkan lebih sedikit usaha saat men- debug, menerapkan fungsi baru, memperbarui fitur yang ada atau meningkatkan ke teknologi terbaru. Seperti halnya pemeliharaan preventif di bidang manufaktur, refactoring kode memungkinkan perbaikan kecil sekarang untuk mencegah bug besar di masa mendatang.

Peningkatan keterbacaan kode

Ketika kode difaktorkan ulang, itu lebih bersih, membuatnya lebih mudah untuk dipahami dan dikerjakan. Kode yang difaktorkan ulang juga lebih lancar untuk dinavigasi, membantu merampingkan proses pengembangan perangkat lunak.

Kecepatan yang lebih tinggi

Pemfaktoran ulang mungkin tidak memiliki dampak yang signifikan seperti pengoptimalan kode aktual yang ditargetkan untuk kinerja. Namun, kode yang lebih sederhana dan tidak terlalu besar masih dapat berkontribusi pada perangkat lunak yang lebih efisien dan waktu proses yang lebih cepat.

Tantangan refactoring kode

Pemfaktoran ulang dapat menghasilkan kode yang jelas dan bersih, tetapi prosesnya bukannya tanpa kekurangan. Berikut adalah beberapa tantangan yang mungkin dihadapi tim pengembangan saat memfaktorkan ulang kode:

    ● Mengalokasikan pengembang

    ● Memperkenalkan bug

    ● Kode lama

    ● Scope creep

    ● Kendala waktu

Menetapkan pengembang

Tim harus memutuskan siapa yang akan menjadi bagian dari proses refactoring kode dan apa peran dan tanggung jawab mereka nantinya. Hal ini dapat menjauhkan programmer dari pekerjaan pengembangan perangkat lunak yang penting, dan tim yang lebih kecil mungkin tidak dapat melakukan pengorbanan tersebut.

Memperkenalkan bug

Bahkan perubahan kode sekecil apa pun membawa kemungkinan membuat bug baru atau memunculkan kembali bug yang sudah ada. Pemfaktoran ulang kode yang lebih kompleks juga membawa peluang untuk merusak atau mengubah fitur dan fungsi.

Kode lama

Kode lama mengacu pada basis kode lama yang masih melayani tujuannya tetapi dikembangkan menggunakan teknologi yang sekarang sudah ketinggalan zaman dan tidak lagi didukung atau dipelihara secara aktif. Ini mungkin menimbulkan masalah ketergantungan dan masalah kompatibilitas selama refactoring. Ini membutuhkan analisis kode yang lebih mendalam dan rencana terperinci untuk mengatasi setiap perubahan yang mempengaruhi kode lama.

Scope creep

Mungkin Anda tergoda untuk memperbaiki lebih dari apa yang diperlukan, terutama ketika tidak ada rencana atau ketika tidak ada tujuan yang jelas yang ditetapkan. Ketika menangani restrukturisasi logis secara khusus, cakupannya dapat meluas ketika programmer tidak meluangkan waktu untuk memeriksa kode dan menentukan bagian mana yang dapat disempurnakan.

Batasan waktu

Pemfaktoran ulang kode dapat memerlukan banyak waktu, yang tidak dimiliki oleh sebagian besar tim pengembangan. Mereka perlu menyeimbangkan kebutuhan refactoring dengan memenuhi tenggat waktu proyek dan mempertimbangkan kapan dan berapa banyak yang harus direfaktor.

Desain 3D bola yang menggelinding di lintasan

Berita + Insight AI terbaru 


Temukan insight dan berita yang dikurasi oleh para pakar tentang AI, cloud, dan lainnya di Buletin Think mingguan. 

Kiat-kiat untuk refactoring kode yang lebih efisien

Sebelum memulai perjalanan pemfaktoran ulang kode, pertimbangkan tips ini untuk membantu mengatasi tantangan proses:

    ● Waktu itu penting

    ● Perencanaan adalah kunci

    ● Menganalisis dan menstandarkan

    ● Menguji dan mendokumentasikan

Waktu itu penting

Kapan melakukan refaktor kode sama pentingnya dengan mengapa atau bagaimana. Ini dapat menjadi bagian dari aktivitas pemeliharaan berkala tim pengembangan perangkat lunak, atau dapat diintegrasikan ke dalam peninjauan kode.

Refactoring juga merupakan suatu keharusan sebelum menambahkan fitur baru, menerapkan pembaruan substansial, beralih ke tumpukan teknologi yang lebih baru atau meningkatkan antarmuka pemrograman aplikasi (API) atau pustaka. Ini menciptakan kerangka kerja yang lebih dapat diskalakan dan mudah beradaptasi untuk dibangun di masa depan.

Perencanaan adalah kunci

Refaktorisasi kode dapat memakan waktu, sehingga perencanaan sangat penting. Tim pengembangan harus mempertimbangkan tujuan dan ruang lingkup mereka. Mereka dapat mengambil langkah-langkah kecil, dengan beberapa hari difokuskan pada perubahan kecil seperti menghapus kode mati, memperbaiki format atau menghapus duplikat. Jika ini adalah pembersihan yang lebih terlibat, maka refactoring menjadi proyek dengan garis waktu dan kerangka waktu yang lebih lama.

Menganalisis dan menstandarkan

Tugas refactoring sederhana mungkin tidak memerlukan banyak analisis. Namun, untuk teknik yang menyentuh logika, memahami semua kode terkait sangat penting. Menentukan alasan di balik struktur kode dapat membantu programmer membuat keputusan yang lebih tepat dan modifikasi yang bertujuan.

Selain itu, mengikuti standar pengodean dan prinsip desain tim dapat mempertahankan integritas dan memelihara arsitektur basis kode.

Menguji dan mendokumentasikan

Refactoring bukan hanya tentang meningkatkan kode; ini juga tentang memastikan perbaikan tersebut berfungsi. Itu sebabnya pengujian penting untuk memastikan bahwa perangkat lunak itu sendiri dan perilakunya tetap utuh.

Sementara pengembang dapat menjalankan integrasi dan pengujian unit mereka sendiri, melibatkan tim QA sangatlah penting. Mereka dapat menjalankan uji fungsional untuk memverifikasi fitur dan uji regresi untuk memeriksa bahwa kode yang direfaktor tidak menimbulkan bug atau merusak fungsi apa pun.

Mendokumentasikan perubahan juga harus menjadi bagian dari proses. Ini membuatnya lebih mudah untuk melacak modifikasi dan memfasilitasi pemfaktoran ulang kode yang lebih lancar di masa mendatang.

Alat dan sumber daya untuk pemfaktoran ulang kode

Beberapa alat dapat membantu mempercepat dan mengotomatiskan refactoring kode. Berikut adalah beberapa yang populer:

    ● Lingkungan pengembangan terintegrasi (IDEs)

    ● Penganalisis kode statis

    ● Sumber daya lainnya

Lingkungan pengembangan terintegrasi (IDEs)

Banyak IDE saat ini sudah memiliki dukungan bawaan untuk pemfaktoran ulang otomatis tanpa merusak kode apa pun atau menimbulkan bug. Beberapa bahkan memberikan rekomendasi refactoring berbasis AI.

IDE yang dapat digunakan untuk refactoring kode termasuk IntelliJ IDEA untuk bahasa pemrograman berdasarkan Java Virtual Machine (JVM), PyCharm untuk Python dan ekstensi ReSharper Visual Studio untuk C#, C++ dan .NET.

Penganalisis kode statis

Penganalisis statis menilai kode tanpa menjalankannya. Alat analisis ini mendeteksi kelemahan pemrograman umum dan masalah kualitas kode, membantu pengembang memperbaikinya di awal proses pengembangan perangkat lunak.

Contoh penganalisis kode statis termasuk Codacy dan PMD sumber terbuka yang keduanya mendukung beberapa bahasa pemrograman, JArchitect untuk Java, NDepend untuk .NET dan linter dan formatter RuboCop untuk Ruby.

Sumber daya lainnya

Refactoring.com adalah situs web Martin Fowler yang berisi katalog daring metode refactoring dari bukunya. Refactoring.Guru adalah situs web lain yang membahas teknik refactoring dan pola desain.

AI untuk pemfaktoran ulang kode

Kecerdasan buatan (AI) dapat membantu proses refactoring kode. Aplikasi AI generatif didukung oleh model bahasa besar (LLM) yang dapat menganalisis basis kode yang kompleks atau besar dan memahami semantik dan konteks di baliknya. Berdasarkan itu, mereka segera memberikan rekomendasi refactoring waktu nyata.

IBM watsonx Code Assistant, misalnya, memanfaatkan model IBM Granite untuk mengidentifikasi bug dan area yang perlu ditingkatkan. Kemudian menyarankan perbaikan yang ditargetkan yang selaras dengan konvensi pengodean yang telah ditetapkan oleh tim, membantu menyederhanakan dan mempercepat refactoring kode. Alat pemfaktoran ulang AI serupa lainnya termasuk Amazon CodeGuru Reviewer, GitHub Copilot, dan ChatGPT OpenAI.

Bagi mereka yang berurusan dengan kode lama, IBM watsonx Code Assistant for Z memadukan AI generatif dan otomatisasi untuk membantu pengembang memodernisasi aplikasi mereka. Watsonx Code Assistant for Z Refactoring Assistant memungkinkan programmer untuk melakukan refaktor aplikasi mereka menjadi layanan yang lebih modular dan dapat digunakan kembali. Ia menggunakan algoritma analisis kode untuk memodernisasi aplikasi COBOL.

Seperti halnya sistem AI lainnya, pengembang masih harus meninjau output alat refactoring kode berbasis AI untuk akurasi. Pengujian juga diperlukan untuk memastikan setiap perubahan yang disarankan berfungsi seperti yang diharapkan.

AI Academy

Memanfaatkan AI untuk modernisasi aplikasi

Pelajari cara AI generatif dapat mengubah perjalanan modernisasi aplikasi Anda dengan meningkatkan produktivitas, mengurangi risiko kepatuhan, dan menyederhanakan pembaruan.

Solusi terkait
Migrasi Cloud - IBM Instana Observability 

Instana menyederhanakan perjalanan migrasi cloud Anda dengan menawarkan pemantauan yang komprehensif dan insight yang dapat ditindaklanjuti.

Jelajahi Instana
Solusi Modernisasi Aplikasi Mainframe

Manfaatkan AI generatif untuk mempercepat dan menyederhanakan modernisasi aplikasi mainframe.

Jelajahi modernisasi mainframe
Layanan Konsultasi Modernisasi Aplikasi

Optimalkan aplikasi lama dengan hybrid cloud dan layanan dan strategi modernisasi yang didorong oleh AI.

Layanan modernisasi aplikasi
Ambil langkah selanjutnya

Optimalkan aplikasi lama dengan hybrid cloud dan layanan dan strategi modernisasi yang didorong oleh AI.

Jelajahi layanan modernisasi aplikasi Unduh panduan