People Innovation Excellence

Test-Driven Development (TDD): Menulis Tes Sebelum Kode, Masih Relevan? 

Dalam praktik pengembangan perangkat lunak modern, Test-Driven Development (TDD) sering disebut sebagai pendekatan “membalik cara berpikir tradisional”. Alih-alih menulis kode fungsional terlebih dahulu, lalu mengujinya kemudian, TDD justru menekankan menulis tes terlebih dahulu sebelum implementasi kode. Ide utama dari konsep ini adalah agar fitur yang dibangun sesuai dengan requirement yang telah didefinisikan. Namun di tengah tuntutan industri yang serba cepat, muncul pertanyaan: apakah TDD masih relevan dan efisien di era sekarang? 

Apa Itu TDD? 

TDD adalah pendekatan pengembangan perangkat lunak atau software engineering di mana developer menulis unit test terlebih dahulu sebelum menulis kode implementasi fungsinya. Proses ini secara umum dikenal dengan nama Red-Green-Refactor: 

  1. Red: Menulis tes yang gagal (karena fitur belum ada). 
  1. Green: Menulis kode secukupnya agar tes berhasil. 
  1. Refactor: Memperbaiki struktur kode tanpa mengubah perilakunya agar lebih bersih dan maintainable. 

 

Sumber: https://martinfowler.com/bliki/TestDrivenDevelopment.html 

Dengan pendekatan ini, developer dipaksa untuk memikirkan bagaimana kode akan digunakan (dari sisi API atau output) sebelum menulis implementasinya. Ini akan menghasilkan desain yang lebih modular dan teruji sejak awal. 

Manfaat TDD 

TDD memiliki beberapa keuntungan dan manfaat jika dilakukan dengan benar. Berikut beberapa manfaat dari implementasi TDD: 

  • Meningkatkan Kepercayaan Diri: Developer bisa melakukan perubahan tanpa takut merusak fungsionalitas yang sudah ada karena semua sudah diuji. 
  • Menghasilkan Desain yang Baik: Karena kode ditulis untuk lulus tes, struktur yang modular dan loosely coupled lebih cenderung tercipta. 
  • Mencegah Overengineering: Karena kode hanya ditulis untuk lulus tes yang spesifik, kita terhindar dari menulis fitur yang tidak atau belum diperlukan. 
  • Membuat Dokumentasi Hidup: Tes yang baik dapat sekaligus menjadi dokumentasi tentang bagaimana fungsi/kelas digunakan. 

Berikut adalah contoh implementasi TDD menggunakan Python (Pytest): 

Code Test (Red) 

# test_calculator.py 
def test_addition(): 
    from calculator import add 
    assert add(2, 3) == 5

Setelah code tersebut dieksekusi, maka hasil yang keluar adalah error. Hal tersebut wajar dan expected karena code implementasinya belum ditulis. Fase ini adalah fase Red. Kemudian kita akan menulis kode implementasinya. 

Code Implementasi (Green) 

# calculator.py 
def add(a, b): 

    c = a + b 
    return c 
  

Setelah code ini dijalankan, maka seharusnya output nya adalah test berhasil / lolos. Fase ini merupakan fase Green. Ingat, kita hanya menulis kode seperlunya agar dapat lolos dari test. Jika masih belum lolos semua test, artinya kode yang ditulis belum sesuai sepenuhnya dengan requirement. Ini sekaligus memberikan instant feedback bagi developer. 

Refactor 

# calculator.py 
def add(a, b): 
    return a + b 

Pada tahap ini, kode dilakukan refactor agar menjadi lebih clean dan efisien tanpa mengubah fungsionalitas dari kode. 

Tantangan dalam TDD 

Meski memiliki beberapa keunggulan, TDD juga tidak lepas dari tantangan: 

  • Kebutuhan Disiplin Tinggi: Menulis tes sebelum kode bukan kebiasaan yang natural bagi sebagian besar developer. Butuh konsistensi dan komitmen untuk tetap menggunakan metode ini. 
  • Membutuhkan Waktu di Awal: Dibandingkan pendekatan konvensional, TDD bisa terasa lebih lambat di awal pengembangan. 
  • Sulit Diterapkan pada UI atau Proyek Eksisting: Untuk aplikasi yang banyak bergantung pada interaksi antarmuka atau kode warisan, menerapkan TDD bisa sangat menantang. 

Apakah Masih Relevan? 

Jawabannya: ya, tapi sangat kontekstual. TDD tetap sangat relevan untuk proyek-proyek dengan logika kompleks dan kebutuhan reliabilitas tinggi. Namun, untuk prototipe cepat atau proof of concept, pendekatan ini bisa saja terlalu berat di awal. Beberapa tim memilih Test-After Development namun dengan prinsip desain yang terinspirasi TDD. 

Penulis

Muhammad Alfhi Saputra, FDP Scholar

Penutup 

TDD merupakan salah satu metode pengembangan software yang unik. Bila digunakan dengan bijak, ia bisa meningkatkan kualitas, kecepatan, dan kepercayaan diri tim dalam mengembangkan perangkat lunak. Seperti semua praktik dalam software engineering, keputusan untuk menerapkan TDD sebaiknya mempertimbangkan konteks proyek, skill tim, dan tujuan jangka panjang. 

Referensi: 

Martin Fowler, “Is TDD Dead?” : https://martinfowler.com/articles/is-tdd-dead/ 

Martin Fowler, “Test Driven Development” :https://martinfowler.com/bliki/TestDrivenDevelopment.html 

Last updated :

SHARE THIS