Test Driven Development

hwulanayu
PPL 2019 C3
Published in
3 min readApr 18, 2019

Pada perkuliahan PPL ini, team developer kami menerapkan metodologi Test Driven Development dalam pengerjaannya. TDD mewajibkan developer untuk membuat test terlebih dahulu, lalu membuat implementasi dari test code tersebut. Tujuannya adalah developer terbiasa untuk memikirkan input dan output apa saja yang akan ada dalam program mereka. Hal ini membuat coding lebih terarah.

Saat melakukan commit code ke git repository, kelompok kami menggunakan prinsip RED, GREEN, REFACTOR

TDD cycle

Pada tahap RED, test harus dibuat sebelum implementasi code-nya. Ini berarti ketika kita sudah commit dan push ke git repository, akan ada tanda X merah yang artinya failed, karena memang kita belum menulis implementasi dari code tersebut. Tahap GREEN adalah tahap mengimplementasikan test yang sudah kita buat. Tahap REFACTOR adalah tahap perubahan implementasi yang dapat membuat program kita berjalan lebih efektif dan/atau efisien. Namun, perubahan dalam tahap REFACTOR ini harus konsisten dengan behaviour program agar status test tetap sukses.

Pada pengerjaan PPL, jika team developer ingin meng-commit sesuatu yang tidak berhubungan dengan fungsionalitas, dapat menggunakan tag CHORES. Pengalaman saya pribadi, dalam beberapa kesempatan, ada commit yang tidak sesuai tag-nya. Misalnya commit REFACTOR tapi saya tag dengan CHORES. Hal ini dapat terjadi karena salah informasi dan kurang banyak membaca referensi.

Penerapan TDD dilakukan dengan membuat unit test. Prinsip-prinsip dalam pembuatan unit test biasa disebut prinsip F.I.R.S.T, yaitu:

  1. Fast: test seharusnya dijalankan dengan cepat. Hal ini tidak selalu bisa saya jalankan dengan baik karena kadang test bisa dijalankan dengan cepat, kadang lama. Saya masih belajar bagaimana membuat test yang efisien.
  2. Isolated: test harus dapat mengidentifikasi sebuah kesalahan yang spesifik dan tidak memiliki dependensi. Sejauh ini unit test yang saya buat masih memikirkan skenario yang sederhana seperti mengetes ada komponen tertentu atau tidak.
  3. Repeatable: test harus dapat dijalankan berkali-kali tanpa bergantung pada sebuah state awal atau meninggalkan state akhir.
  4. Self-validating: test harus memiliki output yang jelas mengenai kesuksesan atau kegagalannya sehingga developer tidak perlu membaca banyak file untuk melihat apakah test tersebut sukses atau tidak. Unit test yang saya buat sejauh ini mudah diidentifikasi kesuksesannya sehingga tidak perlu membaca banyak file.
  5. timely: test harus dibuat pada waktu yang tepat, yaitu sebelum implementasi code. siklus RED, GREEN, REFACTOR yang diterapkan pada perkuliahan PPL membantu saya untuk menyusun test sebelum menulis implementasinya.

Berikut ini adalah contoh unit test yang saya buat untuk mengetes komponen pada halaman dashboard admin menggunakan framework React:

describe('Test Navbar Admin', () => {   it('renders class dashboard', () => {     const wrapper = shallow(<DashboardAdmin />);     expect(wrapper.find('.dashboard')).toHaveLength(1);});   it('renders NavbarAdmin', () => {     const wrapper = shallow(<DashboardAdmin />);     expect(wrapper.find(NavbarAdmin)).toHaveLength(1);   });});

TDD sangat membantu pengerjaan PPL yang dilakukan secara tim. Ketika saya ingin menambahkan implementasi fitur atau suatu komponen yang melibatkan pekerjaan teman saya, saya menemukan kegagalan test yang dibuat teman saya. Dengan adanya deskripsi dari test tersebut, saya mengetahui behaviour apa yang diinginkan oleh teman saya tersebut. Hal ini dapat mengurangi waktu debugging yang harus saya sisihkan.

referensi:

https://scele.cs.ui.ac.id/pluginfile.php/46705/mod_resource/content/1/Panduan%20PPL%20-%20Pemrograman%20Ver%203.0%20.pdf

--

--