Test-Driven Development
Test-driven development (TDD) adalah salah satu pendekatan gaya penulisan code dengan tiga aktivitas utama yang dilakukan, yaitu coding, testing, dan design/refactor. TDD lebih sering digunakan ketika membuat proyek yang cukup besar. Sering kali ketika mengembangkan proyek bersama dengan orang lain, terdapat keterhubungan antar implementasi dari satu anggota dengan anggota lainnya. Untuk dapat memastikan suatu fungsi dari satu anggota sudah bekerja dengan baik sebelum digunakan oleh anggota tim lainnya, perlu dilakukan testing untuk menjamin nilai kebenaran fungsi tersebut. TDD berguna untuk mempertahankan suatu fungsi, sehingga ketika ada modifikasi source code, hanya dengan menjalankan test dapat diketahui apakah implementasi yang dilakukan mempengaruhi fungsi yang sudah berhasil dites sebelumnya atau tidak.
TDD life cycle
Langkah-langkah meng-coding yang dilakukan ketika melakukan pendekatan test-driven development adalah sebagai berikut.
- Membuat unit test yang menguji satu bagian kecil dari program yang akan dibuat
- Menjalankan tes tersebut dan tes harus fail, karena belum ada implementasinya → [RED]
- Membuat ‘just enough code’ agar tes berhasil/sukses → [GREEN]
- Refaktor code yang telah dibuat sehingga cukup simple, tidak ada duplikasi, dan single responsibility. Setelah refaktor, tes harus tetap berhasil → [REFACTOR]
- Ulangi langkah 1–4
Contoh penerapan test-driven development pada proyek PPL.
Benefits of Doing TDD
- Dapat mendeteksi eror/bug
Untuk proyek yang cukup besar, error akan mudah dideteksi dengan adanya tes untuk setiap fungsi yang diimplementasi. Ketika error/bug diperbaiki, dengan menjalankan tes kembali, dapat dipastikan bahwa error/bug sudah tidak ada lagi.
2. Mempersingkat waktu pengerjaan
Dengan membuat tes lebih dulu, programmer akan lebih mengerti dengan requirement dan tujuan dari code yang akan dibuat. Karena detail spesifik code sudah terpikirkan, pengerjaan pun dapat berjalan lebih cepat.
3. Meningkatkan kualitas code
Karena dapat dilakukan refaktor terus menerus, kualitas code dapat ditingkatkan juga, contohnya dengan membuat code menjadi high cohesion dan low coupling.
Manfaat yang dirasakan ketika melakukan TDD selama pengerjaan proyek PPL
Pertama kali saya membuat tes untuk mengetes suatu React Component, sejujurnya saya merasa disulitkan dengan TDD ini. Karena belum terbiasa dengan library testing seperti jest dan enzyme, saya menghabiskan banyak waktu untuk testing yang padahal menurut saya lebih baik langsung saja membuat React Component-nya.
Disini, saya membuat banyak tes untuk mengecek apakah setiap navigasi yang ditekan pada sidebar mengarah ke halaman yang benar. Hanya untuk membuat fungsi Navbar tersebut, perlu banyak tes agar coverage diatas 90%.
Kemudian saya sadar, TDD itu bukan tentang membuat tes sehingga total coverage menjadi 100%, namun tentang membuat tes yang dapat memeriksa fungsionalitas dari code yang dibuat demi menghindari eror. Kemudian, saya mulai mengubah pembuatan test saya menjadi lebih sederhana namun to-the-point, seperti testing untuk komponen pop-up berikut. Saya men-tes kondisi pop-up sebelum dan sesudah tombol diklik.
Dari situ lah saya merasa bahwa TDD itu tidak menyulitkan, bahkan dapat membuat saya lebih terbayang dengan implementasi nantinya, seperti elemen apa saja yang diperlukan untuk komponen tersebut dan peletakkan komponen sehingga memenuhi high cohesion.
Dengan ini, meskipun agak lama diawal untuk membuat tes, namun waktu mengimplementasi code akan jauh lebih cepat.
Referensi