Kenapa menggunakan TDD?

Kustiawanto Halim
Auto Personalia
Published in
3 min readMar 22, 2017

--

Test Driven Development atau TDD (Beck 2003; Astels 2003) adalah sebauh pendekatan pengembangan yang mengkombinasikan pembuatan test-first development dan refactoring. Test-first development adalah disaat kita membuat test terlebih dahulu sebelum membuat kode yang bisa memenuhi test tersebut. Lantas apa yang menjadi tujuan utama dari TDD? Yang menjadi tujuan utama dari TDD adalah spesifikasi dan bukan validasi (Martin, Newkirk, and Kess 2003). Dalam kata lain, kita harus memikirkan dengan baik mengenai requirement dan design yang ada sebelum masuk kedalam tahap functional. TDD sebenarnya tidak hanya berbicara masalah test tetapi juga berbicara masalah bagaimana menulis code dengan baik, mengikuti kaidah clean code (Tulisan ini sudah dibuat oleh

).

Apa itu TDD?

Seperti yang sudah dijelaskan di atas, TDD memiliki rumus yang sederhana, yaitu merupakan kombinasi dari test-first development dan refactoring.

TDD = TFD + Refactoring

TFD sendiri adalah kegiatan dimana kita menambahkan sebuah test sederhana, sehingga code yang ada akan gagal jika menjalankan test. Setelah itu kita membuat functional code yang sesuai untuk melewati test yang telah kita buat tadi. Setelah itu, kembali lakukan testing dan pastikan functional code yang ada berhasil melewati test yang ada. Jika seluruh test yang ada berhasil dilewati, maka kembali buat test yang sesuai untuk memenuhi requirement yang ada.

Secara umum, berikut adalah langkah yang dilakukan dalam TFD:

  1. Tambahkan test sesuai requirement dan design
  2. Tambahkan functional code yang sesuai untuk melewati test yang ada
  3. Kembali lakukan langkah 1 sampai proses development selesai

TDD akan merubah pandangan kita mengenai proses development. Ketika biasanya kita akan langsung memikirkan bagaimana implementasi yang sesuai untuk requirement, tetapi sekarang kita akan memikirkan design terbaik untuk diimplementasikan pada functional code yang ada, mengacu pada test yang sudah dibuat. Selain itu ditambah dengan refactoring code yang sudah dibuat, guna meningkatkan kualitas code yang dibuat menyesuaikan dengan functional code lainnya yang sudah dibuat sebelumnya. Kombinasi dari TFD dan Refactoring akan meningkatkan kualitas code yang dibuat sehingga akan memudahkan pengembangan baik berupa penambahan code ataupun berupa integrasi dengan code lainnya.

Jika menggunakan TDD, programmer tidak akan menulis functional code terlebih dahulu, melainkan akan menulis test, sedikit demi sedikit baru diselesaikan dengan functional code yang sesuai. Melalui hal ini, kita juga bisa menerapkan prinsip lainnya dalam pengembangan yaitu berupa Pair Programming, dimana teman kita dapat mengingatkan untuk selalu on track dalam melaksanakan TDD, berupa TFD lalu Refactoring.

Kelebihan TDD

Penerapan TDD memiliki beberapa kelebihan dan kekurangan dan akan dibahas setelah ini. Proses testing akan membantu programmer untuk berfikir mengenai code design. Didorong dengan keharusan untuk membuat test terlebih dahulu, programmer akan berusaha untuk berfikir mengenai code design yang sesuai sehingga dapat digunakan dan di-improve secara terus menerus selama proses development.

TDD akan memastikan bahwa penambahan ataupun perubahan terhadap code tidak berpengaruh terhadap functionality. Kenapa hal ini bisa terjadi? Hal ini bisa terjadi karena proses dari TDD sendiri berlangsung berupa pembuatan code test, lalu selesaikan test yang ada, lalu ulangi kembali. Untuk dapat menambahkan test yang baru, perlu dipastikan bahwa functional code yang ada tetap berhasil melewati test yang ada.

TDD akan memastikan bahwa aplikasi yang dibuat sudah di-test dengan baik dan bebas dari bug. Dengan metode ini juga meningkatkan awareness tentang testing, sembari menulis code. Hal ini akan membangun kebiasaan yang baik bagi programmer dalam melakukan pengembangan yang ada. Memastikan functionality yang ada dapat berjalan dengan baik, sehingga mempercepat proses pengembangan.

Cost yang dibutuhkan berbanding dengan time

--

--

Kustiawanto Halim
Auto Personalia

Mobile Apps Developer (Android, iOS, Flutter) | IoT enthusiast