Test Driven Development to Avoid Disaster
Saat ini TDD adalah hal yang sudah umum diketahui dan diaplikasikan oleh para Software Engineer di berbagai belahan dunia. Namun apa sebenarnya TDD itu? Apa yang menyebabkan TDD menjadi suatu keharusan dalam mengembangkan sebuah perangkat lunak? Dan seberapa pentingnya TDD dalam pengembangan perangkat lunak?
Jadi apa itu TDD
Test Driven Development, yang disingkat dengan TDD, merupakan sebuah konsep dalam pengembangan perangkat lunak. TDD mengharuskan para pengembang untuk menuliskan failing tests terlebih dahulu sebelum menuliskan implementasi dari suatu fitur yang hendak dikerjakan. Jika test tersebut telah dibuat dan terbukti gagal, maka implementasi dari fitur sudah boleh dikerjakan. Kode yang dibuat untuk fitur tersebut tentunya harus lulus test yang sudah dikerjakan sebelumnya.
Eits tunggu dulu. Setelah membuat implementasi fitur bukan berarti pekerjaan sudah selesai begitu saja. Ada satu tahapan yang perlu dilakukan setelah membuat code untuk fitur yang lolos test, dimana pada tahapan ini seorang pengembang perangkat lunak melihat kembali code dan test yang telah ia kerjakan yang kemudian diperbaiki. Perbaikan tersebut tidak mengubah tingkah laku atau fungsionalitas dari fitur namun membuat code menjadi lebih simple dan lebih mudah dibaca.
Setiap tahapan yang dijelaskan di atas sebenarnya memiliki nama. Sesuai urutannya, tahapan-tahapan tesebut bernama RED-GREEN-REFACTOR. Tahap RED merupakan tahap menulis failing tests, tahap GREEN adalah tahap menulis implementasi yang lulus test, dan tahap REFACTOR adalah tahap “merapikan” kode yang telah ditulis pada dua tahap sebelumnya. Singkatnya, tahap refactor adalah tahap untuk meningkatkan kualitas kode.
Walau hanya ada tiga tahapan secara umum, bukan berarti kita berhenti pada tahap refactor. Seperti ilustrasi 2 di atas, TDD merupakan sebuah siklus. Selama mengembangkan sebuah perangkat lunak, siklus TDD selalu akan dilakukan dalam meraih perangkat lunak yang berkualitas.
Benefit dari TDD
Kenapa harus membuat test terlebih dahulu? Mengapa tidak langsung membuat implementasi kemudian baru membuat testnya?
Bagi pemula, TDD terdengar tidak penting dan hanya akan menghambat pekerjaan saja, atau mungkin akan terdengar menakutkan karena sistematikanya yang terdengar rumit. Anda tidak sendirian, penulis sendiri pernah kebingungan dan kesulitan dengan TDD pada mata kuliah Perancangan dan Pemrograman Web (yang dikenal sebagai Pemrograman Berbasis Platform saat ini) hingga menyebabkan saya harus mengulang mata kuliah ini di semester berikutnya hahaha. Namun jika dipahami dengan seksama, penerapan TDD bukanlah hal yang sulit kok.
Pembuatan test sebelum implementasi bertujuan untuk menghindari bug yang sulit untuk ditrace setelah membuat implementasi. Dan dengan pembuatan test, kita menjadi tau apa yang diperlukan dan dihindari saat implementasi. Berikut adalah keuntungan dari TDD:
- Meminimalisir keberadaan bug
Dengan membuat test terlebih dahulu, maka kita menjadi tau bagaimana membuat implementasi yang baik dan lolos test. Keberadaan test berguna untuk mengetahui secara langsung kekurangan dari implementasi yang menghasilkan output yang tidak sesuai dengan ekspektasi. - Membuat kode lebih modular
Dengan melakukan test pada setiap bagian, kita “dipaksa” untuk membuat kode yang tidak terlalu bergantung dengan bagian lainnya, a.k.a Loose Coupling. Karena kode sudah Loose Coupling, maka kode tersebut menjadi mudah untuk diintegrasikan dengan bagian lain.
Contoh Penerapan TDD
- RED: making failing test
Sesuai nama, test yang dibuat diharapkan untuk gagal sehingga dinamai dengan RED
- GREEN: Implementation
Setelah testcases dibuat, maka dilanjutkan dengan pembuatan kode implementasi yang lolos test, sehingga dinamai dengan GREEN
- REFACTOR: Cleaner code
Setelah membuat implementasi yang lolos test, maka dilanjutkan dengan “membersihkan” kode agar lebih readable dan maintainable sehingga diraih kode yang berkualitas.
Sekian hal yang dapat saya sampaikan pada artikel ini. Semoga bermanfaat~
Referensi
- https://ari-angga.medium.com/tdd-d56b96699438
- https://www.linkedin.com/pulse/test-driven-development-penting-muhamad-lutfi-arif/?trackingId=j6DkYyauT%2BizXtZPxBD9XA%3D%3D
- https://medium.com/koding-kala-weekend/tdd-the-series-part-1-apa-itu-test-driven-development-tdd-ff92c95c945f
- https://medium.com/hackernoon/introduction-to-test-driven-development-tdd-61a13bc92d92
- https://kiddyxyz.medium.com/mengenal-test-driven-development-d8e838236aca