TDD The Series : Vol 2

Misael Jonathan
PPL A-4 YUK RECYCLE
5 min readApr 16, 2019

Selama mengikuti perkuliahan di Fasilkom UI, salah satu hal yang sering diucapkan orang adalah Test Driven Development (TDD). Tapi, apakah kamu sudah tahu apa itu TDD?

Better Understanding of TDD

Test Driven Development (TDD) merupakan salah satu pendekatan yang digunakan dalam pengembangan perangkat lunak. Dengan TDD, kamu diharuskan untuk berpikir ke depan untuk dibuatkan testnya terlebih dahulu. Hal ini bertujuan agar pengembangan software dapat disesuaikan dengan kebutuhan dan keinginan.

TDD merupakan salah satu pendekatan yang menerapkan konsep pada metodologi Agile, yaitu “Red, Green, Refactor”. Pendekatan ini dilakukan dengan :

  • Red : Proses membuat test agar program tersebut gagal
  • Green : Mengimplementasikan program sehingga dapat memenuhi kriteria test
  • Refactor : Mengubah code untuk meningkatkan kualitas software

How Does it Work?

  1. Sebelum memulai coding, kita define terlebih dahulu acceptance kriteria dari fitur yang akan kita buat. Kemudian berdasarkan kriteria yang sudah ada, kita tuliskan terlebih dahulu testnya. Hal ini dilakukan untuk memastikan bahwa fitur yang akan kita bawa nanti sesuai dengan kriteria awal.
  2. [RED PHASE] Test tersebut pasti gagal di awal, karena memang belum ada implementasi code agar test tersebut pass.
  3. [GREEN PHASE] Setelah itu kita buat implementasi dari fitur yang akan kita buat, sesuai dengan test yang telah kita buat sebelumnya. Pastikan bahwa code yang kita buat sudah pass test, jika belum kita perbaiki lagi code tersebut.
  4. [REFACTOR PHASE] untuk meningkatkan kualitas dari kode kita, kita dapat melakukan refactor pada code tersebut. Selama proses refactor pastikan juga bahwa code tersebut pass terhadap test yang telah dibuat sebelumnya

Implementasi TDD dalam Proyek Yuk-Recycle

Setelah kita mendapatkan pemahaman mengenai konsep TDD diatas, disini saya akan membagikan implementasi TDD yang telah saya lakukan pada proyek Yuk-Recycle.

Implementasi TDD yang akan saya bagikan adalah code backend dengan menggunakan golang, dan fitur yang akan dibangun adalah Privacy Policy Mitra. Privacy Policy mitra pada folder backend hanya menggunakan Controller dan Services saja (tidak menggunakan Repository), sehingga implementasi yang dilakukan hanya pada kedua folder itu saja.

Ilustasi (Privacy Policy bisa di expand)

https://gitlab.cs.ui.ac.id/ppl-fasilkom-ui/2019/PPLA4/commits/US-6-manage-account-mitra-backend

Pertama-tama yang saya lakukan adalah :

1. Membuat Test untuk Privacy Policy
https://gitlab.cs.ui.ac.id/ppl-fasilkom-ui/2019/PPLA4/commit/dbeeb189eafded66e7498816b00c651fb4d749fb

2. Membuat commit [RED], yang kemudian commit tersebut akan fail karena implementasi codenya belum ada.

3. Melakukan implementasi code untuk fitur tersebut yang sesuai dengan kriteria test. Kriteria test yang saya gunakan adalah, Privacy Policy yang dikembalikan adalah sesuai dengan yang seharusnya

4. Run test tersebut
Kemudian check hasilnya apakah test tersebut berhasil dan sudah mengcover code kita secara menyeluruh. OK pada gambar dibawah menandakan test tersebut berhasil.

5. jika sudah berhasil lakukan commit [GREEN], yang kemudian commit tersebut akan berhasil karena implementasi code sudah ada dan sesuai dengan kriteria awal

Sekian penjelasan mengenai Test, TDD, dan implementasinya mengenai proyek yang kami buat. Terima kasih!

UPDATE 2.0

Dalam pengembangan proyek Yuk-Recycle, saya pribadi tidak selalu mengimplementasikan TDD. Hal ini dapat dikarenakan beberapa hal seperti :
1. Environment baru, dalam kasus saya adalah Flutter Framework dan Dart dalam pengembangan aplikasi mobile. Kalau saya secara pribadi, berusaha mengenal dan meraba-raba implementasi code terlebih dahulu, karena bisa code aja belum tentu, gimana mau implementasi TDD.
2. Tuntutan implementasi fitur yang lebih diprioritaskan dibanding TDD.
3. Terdapat kekhawatiran kalau test yang dibuat belum sempurna sehingga harus dilakukan perubahan juga nantinya.

Untuk itu saya ingin sharing dan membandingkan pengalaman code yang dibuat dengan implementasi TDD dan tanpa TDD.

Tanpa TDD

Pada Flow Make Order Customer, terdapat banyak HTTP request, seperti :
- Google API untuk mendapatkan alamat lengkap
- Google API untuk mendapatkan koordinat
- Yuk Recycle API untuk membuat order

Sebagai bentuk pemenuhan code diatas, saya telah membuat 3 function HTTP Request terpisah, yang dibuat tanpa TDD. Hal ini dilakukan karena awalnya saya belum mengetahui test seperti apa yang harus saya buat, dan saya belum tahu response apa yang akan saya dapatkan waktu itu. Sehingga implementasi dilakukan dengan approach coba-coba sampai dapat response, dan diparse sesuai response baru didapat.

Setelah implementasi selesai, baru dilakukan refactor dan test. Ketika code tanpa TDD, terdapat kecenderungan bahwa test yang kita bangun akan sangat mengacu ke hasil yang telah kita dapatkan dari implementasi (result oriented), berbeda dengan pembuatan test TDD yang akan lebih mengacu pada kriteria (Acceptance Criteria Oriented), yang dapat dibuat lebih objective dan sesuai kriteria awal.

Dengan TDD

Saya melakukan implementasi TDD pada Privacy Policy Mitra, karena saya sudah tahu test apa yang dapat saya buat dan implementasi test pada kasus privacy policy lebih mudah, yang hanya perlu melakukan pencocokan Text.

Dengan implementasi TDD pun, flow kerja kita lebih terarah dengan memiliki target yang telah ditetapkan di awal, walaupun cukup memakan waktu di awal karena harus berpikir kedepan.

to TDD vs not to TDD

not to TDD :
- Kemampuan deliver code yang lebih cepat, karena fokus utama adalah implementasi
- Fleksibel, karena tidak terdapat target yang menjadi acuan

to TDD :
- Code Quality (Implementasi teratur dan sesuai dengan kriteria)
- Test Quality

Conclusion

Menurut saya pribadi, kita masih harus mengaplikasikan metode tanpa TDD dan dengan TDD sekaligus. Kita dapat melakukan TDD ketika kita sudah memiliki pemahaman tentang apa yang akan kita buat, dan kita tidak melakukan TDD ketika kita belum memiliki pemahaman dan masih melakukan eksplorasi terhadap apa yang sedang kita kerjakan.

Sekian Update Blog saya hari ini, semoga bisa menjadi informasi yang dapat membantu teman-teman sekalian.

--

--