Pada artikel sebelumnya, kita telah membahas tentang pengenalan Code Smell dan Refactoring. Kita juga telah membahas apa saja manfaat refactoring pada program, yaitu secara garis besar bisa mempersingkat waktu development dan membuat program memiliki umur yang panjang. Setelah mengetahui manfaat tersebut, tentu kita termotivasi untuk memperbaiki struktur program kita mulai dari sekarang. Pertanyaannya, pada keadaan apa saja kita harus melakukan refactoring? Kita akan membahasnya di artikel ini. 


 

Refactoring dilakukan dalam 4 keadaan, yaitu :

1.   Rule of Three

Ketika melakukan sesuatu yang sama sebanyak tiga kali, maka perlu dilakukan refactoring. Contohnya dalam salah satu game kami, Galaxy Evo.

 

Game Galaxy Evo

 

Dalam game Galaxy Evo, terdapat 3 tipe unit yang memiliki behaviour yang serupa namun tak persis sama, yaitu : (1) Unit Player, (2) Unit Enemy, (3) Unit Boss. Unit Player dapat digerakkan dengan mouse dan keyboard, Unit Enemy digerakkan oleh AI, dan Unit Boss sama seperti Unit Enemy namun dapat menggunakan Special / Bomb. Namun demikian, ketiga jenis unit tersebut memiliki kesamaan behaviour antara lain shoot() dan face(), maka di bagian inilah refactoring perlu dilakukan.

Berikut contoh bentuk implementasi sebelum dilakukan refactoring :

 

Diagram class UnitPlayer, class UnitEnemy, dan class UnitBoss sebelum refactoring

 

Pada Class Diagram di atas dapat kita lihat bahwa ketiga Class tersebut memiliki 2 fungsi yang sama, yaitu face() dan shoot(). Bisa kita bayangkan, bila suatu hari algoritma dari fungsi face() dan shoot() diubah, maka kita harus melakukan modifikasi pada masing-masing Class tersebut satu demi satu. Bagian inilah yang disebut dengan Rule of Three, yakni ketika melakukan sesuatu yang sama sebanyak (minimal) tiga kali. Maka dengan pendekatan Refactoring, hal tersebut dapat disimplifikasi menjadi berikut  :

 

Diagram class UnitPlayer, class UnitEnemy, dan class UnitBoss setelah refactoring

 

Dengan pendekatan di atas, maka setiap ada perubahan pada fungsi shoot() dan face(), kita hanya perlu melakukan perubahan sebanyak 1 kali dan otomatis semua Class yang menuruni Class Unit akan ikut berubah. Hal-hal semacam itulah yang disebut dengan  Refactoring.


2. Ketika menambahkan fitur baru

Struktur code yang membingungkan terkadang menyulitkan programmer untuk menambahkan fitur baru. Dengan melakukan Refactoring, code akan menjadi lebih mudah dimengerti dan meringankan pekerjaan programmer di masa depan yang tentunya akan banyak penambahan fitur. 

Seperti contoh sebelumnya, misalkan Unit Player, Unit Enemy, dan Unit Boss sama-sama memiliki fitur deadJika menggunakan struktur  code yang lama, maka programmer harus menambahkan fitur dead() tersebut pada ketiga Class tersebut. Namun, jika menggunakan struktur yang baru, programmer hanya perlu melakukan 1 kali penambahan fitur pada superclass dari ketiga class tersebut yaitu class Unit. 

 

Penambahan fitur baru yaitu dead() pada superclass Unit

 

 

3.  Ketika memperbaiki bug

Terkadang sebuah bug sebenarnya sudah ada dalam program sejak fase-fase awal development. Namun, bug ini luput dari perhatian programmer dikarenakan bug tersembunyi diantara struktur code yang berantakan, sehingga bug ini tidak disadari kehadirannya. Hal ini dapat menghambat proses development karena programmer harus membenahi bug-bug tersebut sebelum beralih ke milestone selanjutnya.

Oleh karena itu, refactoring perlu dilakukan untuk merapikan struktur code dan membantu menemukan bug dalam program. Semakin awal melakukan refactoring, semakin baik - karena programmer tidak perlu berlama-lama menumpuk bug dalam programnya dan untuk menghindari bug yang tidak terduga. 

 

Bug dalam program (sumber : http://www.dreamstime.com/royalty-free-stock-image-virus-bug-program-code-image21387926)

 

4.  Ketika melakukan code review

Code review merupakan sebuah forum sharing pengetahuan antar anggota tim development, khususnya programmer. Forum ini menjadi sarana tukar pikiran, saling memberi masukan, dan mencari solusi bersama atas permasalahan yang dihadapi dalam proyek yang sedang dikerjakan. Dalam forum ini juga dibahas kesepakatan dan standar coding yang digunakan dalam sebuah tim, baik itu pattern, framework, dan lain-lain. Standar coding dalam tim sangat penting untuk dipatuhi agar semua anggota memiliki visi yang sama dan mudah untuk melakukan delegasi program.

Dalam Maulidan Games pun demikian. Kami memiliki beberapa standar coding yang diterapkan dalam tim kami dan secara rutin melakukan code review setidaknya seminggu sekali untuk melakukan peningkatan skill programmer dan kualitas produk kami. 

 

Secara praktikal, proses refactoring paling baik secara bertahap pada tiap bagian kecil dari program. Perubahan yang dilakukan pada tiap refactoring harus menghasilkan struktur code yang lebih baik dari sebelumnya. 

Ada 3 kunci dalam melakukan refactoring yang benar, antara lain :

1. Tidak ada fungsionalitas baru yang ditambahkan ketika refactoringkarena tujuan refactoring adalah memperbaiki struktur program tanpa mengubah ataupun menambah behaviour program.

2. Semua testing harus berhasil dilewati, untuk membuktikan bahwa proses refactoring yang dilakukan berhasil dan program tetap bisa dijalankan dengan baik. 

3. Code menjadi lebih simpel setelah refactoring. Simpel bukan berarti lebih singkat, namun disini yang dimaksud adalah code menjadi lebih sederhana untuk dipahami. 

   

Step-by-step refactoring (sumber : https://refactoring.guru/)

 

 

Baca sebelumnya : Refactoring dan Code Smell

Baca selanjutnya : Macam-Macam Code Smell dan Refactoring (WIP)


Referensi teori :

1. https://refactoring.guru/

2. Buku "Refactoring : Improving the Design of Existing Code" karya Martin Fowler

 

 

Similar Article