TDD: Berpikir Sebelum Menulis
Dalam mengembangkan perangkat lunak, bukan tidak mungkin bagi kita untuk melakukan hal yang keliru. Kekeliruan yang awalnya dianggap sepele ini, bisa saja menghadapkan kita pada bug ataupun kendala lain di masa depan. Salah satu cara mencegahnya adalah dengan menerapkan TDD.
Apa itu TDD?
Test-driven development (TDD) merupakan suatu metode pengembangan perangkat lunak dengan terlebih dahulu mempersiapkan kode test sebelum mengimplementasikan kode program yang ingin dibuat. Kode test yang ditulis ini, akan merepresentasikan bagaimana ekspektasi kita terhadap cara kerja dan hasil yang diberikan oleh suatu komponen atau fungsi.
Tahapan TDD
Secara garis besar, proses test-driven development terdiri tiga tahapan yang dilakukan secara terus-menerus (iteratif), yakni:
- RED
Pada tahap pertama, akan dibuat kode test untuk suatu fungsi atau komponen, yang mana test ini ditulis sesuai dengan ekspektasi kita terhadap fungsionalitas atau hasil yang kita inginkan. Sesuai dengan namanya yakni red, kode test pasti akan fail, karena memang belum ada kode yang dibuat untuk menyukseskan test tersebut. - GREEN
Setelah kode test di tahap pertama menghasilkan fail, barulah kita membuat implementasi kode sesuai dengan apa yang diekspektasikan pada test. Pada tahap ini, implementasi dibuat seminimal mungkin asalkan bisa memenuhi ekspektasi pada test, karena test berhasil dilewati (pass) maka tahap ini dinamakan green. - REFACTOR
Tahap yang terakhir adalah refactor, karena pada tahap sebelumnya kode dibuat seminimal mungkin, besar kemungkinan terdapat duplikasi/redundancy pada kode yang kita buat. Karenanya pada tahap ini kita dapat mengeliminasi duplikasi yang ada, sehingga menghasilkan program yang jauh lebih efisien.
Clean Test
Seperti halnya menuliskan kode program, kode untuk test pun harus dituliskan dengan menerapkan clean code. Berikut beberapa kriteria penulisan kode test yang baik:
Menerapkan F.I.R.S.T
Kode test harus dibuat dengan menerapkan prinsip F.I.R.S.T yakni Fast, Independent, Repeatable, Self-validating, dan Timely.
Fast berarti test dapat dieksekusi dengan cepat.
Independent berarti setiap test dapat berjalan tanpa bergantung pada test yang lain.
Repeatable berarti test dapat berjalan berulang kali di berbagai environment.
Self-validating berarti test harus mengembalikan hasil berupa boolean (true atau false).
Timely berarti test harus dituliskan secara tepat waktu, yakni sebelum kode program diimplementasikan jika menerapkan TDD.
Membuat Pola yang Terstruktur
Buatlah kode test dengan menggunakan pattern build-operate-check (atau arrange-act-assert). Pertama-tama, lakukan set up komponen dan objek-objek lain yang diperlukan. Kemudian lakukan suatu operasi atau action terhadap objek yang ingin di test. Terakhir, lakukan pengecekan terhadap hasil yang diperoleh tersebut.
Single Concept Per Test
Setiap kode test harus menguji atau mengevaluasi hanya satu buah konsep secara spesifik, jangan menguji banyak konsep sekaligus di dalam satu kode test karena hal tersebut malah akan mengurangi validitas suatu kode test.
One Assert Per Test
Berhubungan dengan kriteria sebelumnya yakni single concept per test, setiap kode test juga sebaiknya hanya mengandung satu buah assert statement.
Kelebihan dan Kekurangan
Setiap metode yang digunakan dalam pengembangan perangkat lunak, pasti memiliki kelebihan dan kekurangannya masing-masing. Berikut adalah kelebihan dan kekurangan yang ada pada penerapan TDD.
Kelebihan
- Meningkatkan maintainability, kode ditulis berdasarkan test yang telah dibuat sebelumnya, menjadikan kode lebih jelas dan mudah untuk di-maintain.
- Meningkatkan reliability, dengan kecilnya kemungkinan terjadi bug, akan menghasilkan produk yang lebih reliable.
- Mempermudah kolaborasi, error dapat teridentifikasi dengan mudah, sehingga dapat mengurangi kekhawatiran bahwa perubahan yang kita lakukan akan berdampak buruk bagi rekan yang lain.
Kekurangan
- Memperlambat waktu pengembangan, keharusan untuk menulis test sebelum mengimplementasi kode, tentunya akan memakan waktu yang lebih lama (pada masa awal penerapan).
- Test sulit untuk ditulis, menuliskan test bukanlah hal yang mudah, terlebih jika fitur yang diinginkan memiliki fungsionalitas yang kompleks.
- Tidak mudah untuk dipelajari, untuk bisa menguasai penerapan metode ini, diperlukan dedikasi dan kemauan yang tinggi untuk terus berlatih.
Kesimpulan
Penerapan test-driven development mengharuskan kita untuk selalu berpikir sebelum menuliskan kode. Hal ini memang membutuhkan tenaga ekstra dan memakan waktu pengembangan yang lebih lama dari biasanya. Namun di sisi lain, penerapan metode ini dapat secara ampuh meminimalisir adanya bug, sehingga program yang dihasilkan jauh lebih reliable dan tentunya akan menghemat banyak waktu di masa depan.