Catatan Kecil tentang TDD

Evando Wihalim
4 min readApr 3, 2021
TDD Cycle
Sumber: https://marsner.com/blog/why-test-driven-development-tdd/

TDD adalah singkatan dari Test Driven Development. Gambar di atas tulisan ini adalah skema dari TDD sedangkan gambar di bawah tulisan ini adalah contoh implementasi nyata dari TDD yang saya lakukan.

Contoh Implementasi TDD (REFACTOR)
Contoh Implementasi TDD (RED dan GREEN)

Dari gambar di atas kita dapat menemukan adanya tag [RED], [GREEN], dan [REFACTOR]. Maksud dari ketiga tag tersebut adalah:

  1. RED: Penambahan kode test untuk implementasi yang akan kita lakukan. Nama dari tag ini adalah RED sebab tahap ini akan mengagalkan unit test yang kita buat. (Tentu saja, sebab tidak ada implementasinya. Ibarat pelajar mengerjakan ujian dan ujian tersebut berisi materi yang belum pernah diajarkan sama sekali).
  2. GREEN: Implementasi kode yang membuat test menjadi berhasil. (Ibarat pelajar mengerjakan ujian dengan materi yang sudah pernah diajarkan).
  3. REFACTOR: Memperbaiki penulisan kode tanpa mengubah fungsi dari implementasi yang sudah berhasil pada tag GREEN. (Ibarat pelajar mengganti kata yang salah tulis dengan kata yang benar. Contoh: memsaak menjadi memasak).

Menurut saya pribadi, membuat test itu cukup melelahkan. Waktu yang saya gunakan untuk membuat test lebih banyak daripada waktu untuk melakukan implementasi.

Contoh Implementasi TDD

Berikut ini contoh test (positive dan negative test) yang saya buat yang menyebabkan pipeline menjadi failed (RED)

Pembuatan test untuk method Delete

Berikut ini adalah implementasi yang saya lakukan untuk keempat test di atas. Tentu saja ini yang menyebabkan pipeline menjadi berhasil (GREEN).

Implementasi method Delete

Dari perbandingan di atas dapat dilihat bahwa untuk menulis satu implementasi, dibutuhkan lebih dari satu test untuk meminimalisir munculnya bug.

Kemudian ini adalah contoh implementasi REFACTOR dimana saya membuang kode yang tidak terpakai dan menambahkan tanda spasi di sebelah tanda titik dua. Hal ini dilakukan agar sesuai dengan konvensi pada bahasa pemrograman Python. Cara saya mengetahui kesalahan ini dan melakukan refactor adalah dengan memanfaatkan tools seperti linter.

Implementasi refactor. Warna dasar merah berarti kode dihapus sedangkan hijau berarti kode ditambahkan.

Kenapa saya harus merepotkan diri menggunakan prinsip TDD?

Sedikit cerita, tiba-tiba proyek yang saya kerjakan harus diubah sedikit (menambahkan atribut pada model). Perubahan ini dapat dikatakan kecil namun cukup untuk membuat keseluruhan program saya error karena berkaitan dengan model atau jantung dari database itu sendiri. Ketika ada perubahan tersebut, saya menambahkan test-nya terlebih dahulu. Dari situ dapat dilihat test mana saja yang failed. Nah, dari test yang failed itu, saya dapat mengetahui perubahan implementasi apa saja yang harus saya lakukan pada kode saya agar dapat berfungsi kembali.

Jika tidak menggunakan TDD, saya mungkin harus menghabiskan waktu lebih banyak untuk mencari implementasi mana yang harus saya ubah. Selain itu, TDD juga dapat memastikan perubahan yang saya lakukan tidak membuat error di kode lainnya. Tidak hanya itu, TDD juga membuat saya merasa lebih aman sebab saya yakin apabila ada masalah dalam kode saya, test saya akan menjadi failed dan apabila tidak ada test yang failed dapat dijamin bahwa kode saya berfungsi dengan baik. Namun, TDD juga harus didukung dengan code coverage 100% sebab code coverage adalah suatu tanda bahwa kode implementasi yang saya lakukan dilalui semua oleh unit test. Jika kode saya semuanya dilalui oleh unit test dan berhasil (passed untuk semua unit test) maka dapat dipastikan bahwa kode saya berfungsi dengan baik.

Kesimpulan

Dari sini dapat disimpulkan bahwa TDD mampu mempercepat pemahaman pemrogram akan kode, memberitahukan pemrogram tentang adanya kesalahan ketika melakukan perubahan kode, dan tentu saja hal ini mempercepat pengembangan proyek dalam jangka panjang.

Pada saat melakukan TDD tentunya kita tidak akan terlepas dari Unit Test. Unit test ini juga merupakan salah satu cara mewujudkan clean code sebab unit test dapat mengurangi potensi terjadinya bug. Untuk mengetahui lebih lanjut tentang clean code, pembaca dapat membaca catatan kecil saya tentang clean code.

Demikian catatan kecil saya mengenai TDD, semoga catatan kecil ini dapat memberikan pandangan bagi pembaca akan pentingnya TDD.

Referensi:

  1. Clean Code: A Handbook of Agile Software Craftsmanship by Robert C. Martin.
  2. Why TDD?
  3. Catatan Kecil tentang Clean Code

--

--