TDD For A Good Code and Life

Kris Tianto
Basic People
Published in
4 min readMar 18, 2019
Comic strip mengenai TDD

I write the test before I code

Test-Driven Development, atau yang lebih dikenal dengan singkatan TDD, merupakan sebuah metodologi pengembangan software masa kini yang mengutamakan pembuatan test sebelum mulai membuat code.

Siklus Pengerjaan TDD
Siklus pengerjaan TDD yang diterapkan dalam PPL kali ini adalah “Red-Green-Refactor”. Apa maksud dari “Red-Green-Refactor” tersebut?
Red, merupakan sebuah fase dimana developer membuat test yang akan digunakan untuk menguji code yang akan dibuat.
Green, merupakan sebuah fase dimana developer berhasil mengimplementasikan code dan fungsionalitas code sudah sesuai dengan test yang dibuat sebelumnya (sudah lulus test).
Refactor, merupakan sebuah fase dimana developer memodifikasi code yang sudah lulus test tersebut, seperti mengubah nama variabel, meringkas implementasi algoritma, dan lain sebagainya.

F.I.R.S.T.
Selain siklus pengerjaan, ada hal lainnya yang perlu diperhatikan dalam membuat test, yaitu F.I.R.S.T., sebuah akronim yang diperkenalkan oleh Robert C. Martin dalam bukunya yang berjudul “Clean Code”. Apa kepanjangan dari F.I.R.S.T. dan apa maksudnya?
Fast, sebuah test harus berjalan secara cepat dan efektif. Jangan membuat test yang terlalu berbelit dan menyebabkan jalannya test menjadi lambat. Dengan test yang cepat, developer dapat mendeteksi masalah lebih dini.
Independent, sebuah test tidak boleh bergantung terhadap test lainnya atau menentukan kondisi untuk test berikutnya. Dengan begitu, developer dapat menghindari permasalahan downstream dan permasalahan sulit lainnya.
Repeatable, sebuah test harus dapat dijalankan di segala environment dengan segala kondisi yang dapat terjadi. Test yang repeatable dapat menghindari terjadinya kasus sebuah test berhasil di suatu environment, namun gagal di environment yang lainnya.
Self-Validating, sebuah test harus mampu mengevaluasi apakah output yang diharapkan sudah sesuai atau belum dengan mengembalikan output dalam bentuk boolean. Test yang self-validating dapat menghindari perlunya melakukan evaluasi secara manual oleh developer.
Timely, sebuah test harus dibuat tepat sebelum developer membuat code, karena apabila developer membuat test setelah membuat code, maka akan ada kecenderungan developer mengalami kesulitan untuk mengetes code tersebut.

Implementasi TDD pada Front-End
Dalam beberapa sprint terakhir, saya mendapatkan tugas untuk membuat komponen-komponen front-end, seperti komponen sidebar, header, report box, dan lain sebagainya. Meskipun hanya front-end, saya tetap perlu menerapkan TDD untuk memastikan komponen yang saya buat sudah sesuai dengan yang diinginkan. Untuk membuat test tersebut, saya melakukan dua buah test, yaitu render dan snapshot. Test render digunakan untuk memastikan bahwa komponen yang akan saya buat dapat di render dan ditampilkan dengan baik. Test snapshot digunakan untuk memastikan bahwa struktur komponen yang akan saya buat sudah sesuai dengan rancangan yang dibuat sebelumnya.

Keuntungan dan Kerugian yang Dirasakan dari TDD
Dalam menerapkan TDD, saya dapat merasakan beberapa keuntungan yang dihadirkan oleh TDD, seperti memberikan pemahaman yang lebih dalam terhadap code, membuat code menjadi lebih mudah dan terarah, serta mendeteksi error secara cepat dan dapat dilakukan secara berkala.

  • Memberikan pemahaman yang lebih dalam terhadap code yang akan dibuat
    Seperti yang sudah disebutkan sebelumnya, dalam menerapkan TDD saya perlu membuat test terlebih dahulu. Sebelum itu, tentunya saya perlu mengetahui dan mempelajari fungsionalitas apa yang akan dihadirkan oleh code yang akan saya buat. Contoh sederhana, saya akan membuat sebuah code yang digunakan untuk menampilkan suatu laporan. Saya mempelajari bahwa code tersebut nantinya akan menampilkan nama pelapor, isi laporan, dan tanggal laporan dibuat. Ketika saya sudah mengetahui fungsionalitas code, saya lalu membuat test yang akan mengecek apakah nama pelapor, isi laporan, dan tanggal laporan dibuat berhasil ditampilkan ketika code dijalankan.
  • Membuat code menjadi lebih mudah dan terarah
    Dengan adanya pemahaman yang lebih dalam terhadap code yang akan dibuat, saya akan merasa lebih mudah dan terarah dalam membuat code. Saya merasa lebih mudah karena seluruh kemungkinan fungsionalitas yang dihadirkan oleh code sudah dipetakan sebelumnya, sehingga untuk saat ini saya tidak perlu memikirkan hal lainnya di luar test yang sudah dibuat sebelumnya. Selanjutnya, saya juga merasa lebih terarah karena test yang dibuat sebelumnya dapat saya jadikan sebuah panduan dalam membuat code, agar dapat bekerja sesuai dengan yang diinginkan.
  • Mendeteksi error dengan cepat dan dapat dilakukan secara berkala
    Dengan pemanfaatan TDD, saya hanya perlu melihat test mana saja yang gagal, lalu kemudian menelusuri bagian mana yang menyebabkan gagalnya test tersebut. Dengan TDD jugalah, saya dapat melakukan test secara berkala dan menjamin bahwa implementasi code yang sudah saya buat sudah sesuai.

Selain keuntungan yang dihadirkan oleh TDD, tentunya masih ada kekurangan yang menghiasinya. Kekurangan yang saya rasakan selama menerapkan TDD adalah terlalu banyak memikirkan kemungkinan test yang dapat terjadi, sehingga kemudian menghambat saya dalam membuat code. Untuk mengatasi hal tersebut, saya harus memetakan bagian mana dari code yang tidak terlalu mendesak untuk di test, sehingga kemungkinan test yang perlu dibuat tidak terlalu luas.

Demikian sharing saya kali ini mengenai TDD, semoga bermanfaat!

--

--