Software Refactoring

by DEWA


Memproduksi sebuah perangkat lunak merupakan proses yang sangat kompleks dan membutuhkan banyak waktu. Perancangan sistem perangkat lunak yang buruk sangat sulit dipahami dan dipertahankan. Memodifikasi sebuah kode di suatu tempat dapat menyebabkan perubahan kode di tempat lain yang tidak diinginkan karena adanya faktor high-coupling. Menambahkan fitur-fitur baru pada sebuah perangkat lunak dapat menyebabkan penurunan pada kualitas kode jika desain dan arsitektur yang tepat tidak diterapkan. Pembangunan sebuah sistem seperti itu di perusahaan besar akan menyebabkan banyak kekhawatiran kecuali jika sistem secara berkala dirombak atau di-refactor dalam beberapa cara.

Software Refactoring merupakan bagian penting dalam pengembangan perangkat lunak, khususnya dalam fase pemeliharaan (maintanence). Beberapa penelitian menyebutkan bahwa harga (cost) pemeliharaan software lebih besar dari cost pengembangan software. Software Refaction dapat membantu pengembang untuk meningkatkan desain dari code dan membuatnya lebih bersih, tanpa merubah sifat dari code tersebut.

Refactoring merupakan sebiah proses perubahan sistem dari software dengan beberapa cara tanpa merubah sifat – sifat eksternal dari sebuah kode. Salah satu caranya adalah dengan memperbaiki struktur kode internal.

Munculnya Software Refactoring

Ide awal dari Software refactoring berasal dari strukturisasi ulang dari sistem pemrograman berorientasi objek (OOP). Istilah Refatoring diciptakan oleh William Opdyke dan Ralph Johnson pada tahun 1992. Sampai saat ini istilah refatoring digunakan untuk merepresentasikan baik dari segi proses dan segi teknik.

The low-level atau Basic Refactorings

Penelitian proses strukturisasi ulang sistem berorientasi objek pertama difokuskan pada masalah inheritance. Akan tetapi, Opdyke merupakan orang pertama yang mencetus pedoman refactoring, yang tidak hanya fokus pada inheritance dan hirarki, tetapi juga fokus pada penggantian nama entitas, pembagian komponen, penghapusan statement – statement khusus, dan sebagaianya. Opdyke menggambarkan low-level refactorings dan membuatnya suatu bentuk refactoring yang lebih kompleks.

Dalam pedoman Opdyke, Low-level atau basic refactoring adalah sebagai berikut :

  • Membuat sebuah entitas program (class, variable, atau method)
  • Menghapus entitas program
  • Mengganti entitas program
  • Memindah anggota variable

Kombinasi dari faktor – faktor di atas membuat sebuah komposisi Software Refactoring menjadi :

  • Refactoring to generalize : membuat sebuah abstract super class
  • Refactoring to specialize : membuat sub class dan menyederhanakan kondisi
  • Refactoring to capture aggregation and component : Mendapatkan fungsi agregasi dan komponen dari kode program

Definisi Software Refactoring

Jika diulas dari arti kata, kata factormemiliki arti mempengaruhi sesuatu. Re-factor berarti mempengaruhi sesuatu kembali. Hal ini bisa dikaitkan dengan konteks Ilmu Komputer. Untuk dapat melakukan sebuah Software Refactoring yang berhasil, diperlukan merubah (mempengaruhi) program untuk mendesain dan mempertahankan sifat – sifatnya secara simultan.

[Fowler1999] Sebuah perubahan struktur internal yang dibuat dari sebuah software untuk membuat software tersebut lebih mudah dipahami dan lebih murah untuk dimodifikasi tanpa merubah sifat-sifat ekternal.

[Roberts1998] Transformasi program secara source-to-source untuk mempertahankan sifatnya.

[Beck1999] Sebuah perubahan sistem tanpa merubah sifat, namun meningkatkan beberapa kualitas, kesederhanaan, fleksibilitas, dan kemudahan untuk dipahami yang bersifat nonfungsional.

Alasan Software Refactoring

  • Software Refactoring dapat meningkatkan kualitas desain dari sebuah software
  • Software Refactoring membuat source code dapat lebih mudah untuk dipahami
  • Software Refactoring membantu untuk mencari bug
  • Software Refactoring membantu untuk mempercepat proses coding

Prinsip – Prinsip Software Refactoring

Prinsip – pronsip Software Refactoring seperti yang dirumuskan oelh Don Robert dalah sebagai berikut :

  • Refactor ketika fungsi ditambahkan

Terkadang desain yang sudah ada tidak dimungkinkan untuk dengan mudah ditambahkan sebua fitur. Jika dilakukan refactoring ketika menambah sebuah fungsi / method, maka code akan lebih mudah dimengerti.

  • Refactor ketika bug diperbaiki

Jika pada laporan ditemukan sebuah bug, itu merpakan sebuah tanda bahwasanya code memerlukan proses refactoring, karena code tidak cukup bersih untuk diditeksi bug-nya.

  • Refactor ketika source code ditinjau kembali

Peninjauan ulang membantu anggota tim lain lebih mengerti code yang dibuat.

Jenis – Jenis Software Refactoring

  • Floss Refactoring

Floss Refactoring disisipkan dengan pemrograman biasa. Programmer me-refactor secara konstan untuk menjaga kualitas software. Desain dan refactoring secara berkelanjutan merupakan kunci dari agile programming.

  • Root Canal Refactoring

Dalam Root Canal Refactoring, pemrograman dan proses refactoring merupakan aktivitas yang berbeda. Refactor Programmer bertugas untuk memperbaiki sistem yang buruk.

Kegunaan Software Refactoring

Software Refactoring sangat berguna untuk beberapa jenis program dengan ciri – ciri sebagai berikut:

  • Program yang sulit dibaca dan dimodifikasi.
  • Program yang memiliki duplikasi logika dan sulit untuk dimodifikasi.
  • Program yang membutuhkan sifat tambahan yang membutuhkan pengembang untuk mengubah running code dan sulit untuk dimodifikasi.
  • Program dengan logika tambahan yang kompleks dan sulit untuk dimodifikasi.

Software Refactoring berguna untuk mendapatkan :

  • Presepsi terhadap sistem yang lebih baik
  • Fine-grained Encapsulation : Mudah di-debug dan mengguna-ulangkan source code
  • Menggeneralisasikan source code yang sudah ada
  • Mengurangi biaya dan resiko pembangunan (jika dibandingkan dengan biayanya saat dibuat mulai dari awal)

Mekanisme Kerja / Aktifitas Software Refactoring

1.       Mengidentifikasikan bagian mana dari software yang harus di-refactor

2.       Menentukan proses refactoring mana yang harus diterapkan terhadap bagian tersebut

3.       Menjamin bahwa proses refactoring yang diterapkan mampu mempertahankan sifatnya

4.       Menerapkan software refactoring

5.       Menjaga konsistensi antara source code program yang telah di-refactor dan entitas program lainnya dan sebaliknya.

 

Referensi

  • Java Refactorings in Eclipse

http://www.eclipse.org

  • Martin Fowler, „Refactoring Home Page“

http://www.refactoring.com

  • FOWLER, MARTIN: A list of refactoring tools for several languages,

http://www.refactoring.com/tools.html

  • Discussion site on code smells

http://c2.com/cgi/wiki?CodeSmell