Test-Driven Development?
Apakah teman-teman mengetahui apa itu Test-driven development? Mungkin pembaca dari jurusan Computer Sciece sudah sering mendengar istilah Test Driven Development (TDD). Saat ini, TDD sudah digunakan oleh banyak orang atau bahkan banyak perusahaan teknologi untuk membantu mereka dalam mengembangkan software. TDD juga menjadi materi yang pasti ada atau pasti diajarkan di kelas perkuliahan Computer Science, termasuk ketika saya mengambil mata kuliah PPL saat ini, saya menerapkan TDD dalam proyek yang saya kembangkan bersama tim. Sebenarnya, apa sih TDD itu? Dan mengapa TDD menjadi hal yang penting dalam pengembangan software? Mari kita bahas bersama.
Sekilas tentang Testing
Sebelum kita masuk ke pembahasan definisi TDD, saya akan membahas tentang pengembangan software secara konvensional yang biasa dilakukan oleh kebanyakan orang. Pada awal prosesnya kita akan diberi software requirements atau daftar yang berisi spesifikasi software yang akan kita buat. Lalu kita mulai mengerjakan alias menulis kode sesuai permintaan. Setelah itu kita tes aplikasi kita apakah berjalan dengan baik dan jika semuanya berjalan dengan baik dan benar, kita berikan aplikasi kita ke client untuk di tes lebih lanjut atau digunakan untuk produksi.
Kelihatannya tidak ada masalah bukan ?
Ya, skenario diatas akan berjalan lancar jika requirements yang diberikan tidak pernah berubah, ya sayangnya, hal itu jarang sekali atau tidak pernah terjadi. Dalam proses pengembangan software yang sesungguhnya, requirements akan selalu berubah mengikuti kebutuhan. Sehingga muncul masalah-masalah seperti :
- Penambahan fitur membuat break kode yang sudah ada atau menambah bugs baru.
- Jika software yang dikembangkan sudah besar atau sudah memiliki ribuan barisan kode membuat proses menemukan bugs secara manual akan memakan waktu lama dan sangat menjemukan.
- Developer menjadi tidak percaya diri dalam menambah, merubah, atau mengembangkan fitur karena takut aplikasi akan break.
- Kode yang break dan bugs seringkali tidak dapat terdeteksi diawal sehingga terbawa sampai ke level production.
Maka dari itu, diperlukan automated test untuk mengecek apakah baris kode yang kita tambahkan tidak merusak kode yang sudah ada atau menambah bugs baru sehingga aplikasi tetap berjalan sesuai dengan yang telah direncanakan. Prosesnya akan lebih cepat dan konsisten karena testing dilakukan oleh komputer dengan menjalankan script test yang ada. Namun tradeoff-nya adalah proses pengembangan akan menjadi lebih lama, karena selain menulis kode, developer juga perlu menulis test untuk kode tersebut. Namun hal ini sering dipandang sebagai investasi waktu karena waktu yang diperlukan untuk menulis test jauh lebih sedikit jika dibandingkan dengan waktu yang dibutuhkan untuk mengecek bugs secara manual karena ketiadaan automated test.
Definisi TDD
Test Driven Development adalah pengembangan yang dipandu oleh test. Mudahnya, kita wajib menuliskan test terlebih dahulu baru production code. Implementasinya adalah sebagai berikut :
- Sebelum menulis ratusan baris kode, tuliskan test-nya terlebih dahulu. Pastikan kita memasukkan semua kemungkinan yang dapat kita pikirkan untuk input dan outputnya. (kelihatannya ini fase tersulit yang saya rasakan wkwk)
- Kemudian jalankan test-nya, dan pasti test-nya akan gagal karena belum ada kode apapun untuk membuat test-nya berhasil.
- Ketik working code, lakukan seminimum mungkin dengan tujuan agar test-nya pass.
- Jalankan test dan cek apakah test-nya berhasil. Jika belum berhasil, maka perbaiki working code kita sampai memenuhi ekspektasi dari test.
- Merasa working code yang kita tulis tadi berantakan? Jangan khawatir, Refactor the code, and do some cleaning. Selama test-nya masih berhasil, berarti tidak ada masalah dengan working code yang di refactor tersebut.
- Ulangi proses di atas untuk fungsi-fungsi lainnya.
TDD dalam PPL
Secara umum, siklus TDD adalah sebagai berikut:
- RED — membuat dan menjalankan test yang gagal karena belum ada kode yang diimplementasikan.
- GREEN — membuat implementasi kode berdasarkan test tersebut sehingga membuat test tadi berhasil.
- REFACTOR — melakukan refactoring terhadap kode jika dirasa masih berantakan tanpa mengubah hasil test.
berikut contoh test yang saya buat pada kodingan saya.
Sekian dan terima kasih.