Test-Driven Development
Halo saya Bagas Irwansyah, mahasiswa Fakultas Ilmu Komputer Universitas Indonesia. Saya ingin sedikit berbagi mengenai teknik Test-Driven Development.
Test-Driven Development
Test-Driven Development adalah sebuah pendekatan yang cukup unik dalam dunia rekayasa perangkat lunak. Unik, karena kita diwajibkan untuk membuat sebuah code yang gagal untuk bekerja terlebih dahulu. Iya, TDD mewajibkan kita untuk membuat test untuk code yang masih belum ada. Hal tersebut diwajibkan karena kita tidak ingin terjadi error yang tidak diinginkan ketika software sudah masuk ke tahap production.
TDD umumnya dianggap buang-buang waktu karena terkesan buang-buang waktu. Tetapi, itu sangat keliru karena sebenarnya TDD sangatlah sederhana untuk dilakukan. Ada beberapa rules dari TDD:
- You are not allowed to write any production code unless it is to make a failing unit test pass.
- You are not allowed to write any more of a unit test than is sufficient to fail; and compilation failures are failures.
- You are not allowed to write any more production code than is sufficient to pass the one failing unit test.
— Robert C. Martin
Atau terdapat versi pendeknya, yaitu:
- Write only enough of a unit test to fail.
- Write only enough production code to make the failing unit test pass.
Dari rules di atas, dapat dilihat bahwa kesalahan umum yang sering melanda pikiran kita adalah dua hal berikut (setidaknya ini yang saya rasakan):
- Saya harus membuat sebuah test code yang nantinya akan mampu memeriksa semua baris dari code yang akan saya implementasikan.
- Saya harus membuat sebuah test code yang nantinya akan memenuhi code coverage mencapai 100%.
Sebenarnya jika dua hal di atas mampir ke dalam pikiran kita, maka kita menjadi malas untuk melaksanakan TDD karena terkesan rumit dan repot. Namun sebenarnya TDD mengharuskan kita bekerja sedikit demi sedikit, kita bisa membuat sebuah test sederhana untuk satu fungsi, lalu mengimplementasi fungsi tersebut, lalu membuat test lagi untuk fungsi lainnya, lalu mengimplementasi fungsi lain, dsb. Di bawah akan dijelaskan mengenai siklus kerja dari TDD.
Red Green Refactor Cycle
Red Phase
Dalam Red phase, TDD menginginkan kita untuk membuat sebuah test code, tetapi jangan terlalu banyak, buatlah satu fungsi sekali buat. Berhentilah memikirkan bahwa code coverage kita harus 100% dan kita wajib membuat sebuah code dengan kaidah clean code. Setelah buat test code, buatlah sebuah fungsi stub dan TO DO agar nanti mudah untuk mengimplementasi.
Green Phase
Dalam Green phase, mulailah untuk mengimplementasi fungsi yang ingin kita jalankan, fungsi yang dibuat harus mengimplementasi apa yang kita ingin lakukan, bukan bergantung pada test apa yang ingin kita buat, jika mindset kita masih berputar di test apa yang ingin kita buat, maka kita harus kembali ke red phase dan memperbaiki test code. Lagi, jangan dulu memikirkan code coverage dan clean code.
Refactor Phase
Disini, barulah kita merefactor code kita agar memenuhi kaidah clean code dan juga mungkin membuat test baru untuk memenuhi code coverage. Aturan utama dari fase ini adalah bahwa code yang sudah green dan terimplementasi harus kembali atau tetap green saat selesai melakukan refactor.
Contoh TDD dalam pengerjaan kelompok kami
Berikut akan saya berikan contoh pengerjaan web Demo yang saya kerjakan. Silahkan amati dengan seksama agar dapat lebih memahami apa yang telah saya tulis di atas.
Pikirkan apa yang saya ingin kerjakan
Saya ingin mengerjakan beberapa hal berikut ini:
- Saya ingin membuat web demo dengan URL yang benar
- Saya ingin alamat yang saya buat memuat main.html
Dari apa yang kita ingin kerjakan, buat test
Diatas dapat dilihat bahwa saya ingin memastikan url dapat diakses dan url akan memuat main.html, sesungguhnya saya juga ingin membuat main.html berdasarkan apa yang sudah ada di pikiran saya, tapi jika itu tidak sama dengan apa yang ada dipikiran saya, maka akan terlihat tidak bagus, tetapi saya tidak membuat test karena saya yakin web saya akan tetap jalan.
Akan tetapi, apabila saya tidak bisa memastikan bahwa url dapat diakses atau url yang saya akses tidak memuat main.html, maka saya tidak bisa meyakinkan diri bahwa web saya akan berjalan dengan baik, bahkan mungkin akan memuat error.
Pada tahap ini, kita sebut sebagai RED PHASE
Setelah membuat test, buat fungsi yang menerapkan apa yang ingin kita kerjakan
Setelah buat fungsi, jalankan testnya dan pastikan berhasil. Jika sudah berhasil maka kita sudah memasuki GREEN PHASE.
Sekarang saya ingin mengerjakan main.html
Setelah memasuki Green Phase tadi, maka web saya akan berjalan, namun tampilan tentunya akan kosong. Disini saya akan mengisi tampilan main.html tersebut, nah tahap ini lah yang disebut REFACTOR PHASE.
Sekian tulisan Test-Driven Development dari saya, adios.