TDD dan BDD
Memahami Test-Driven Development dan Behavior-Driven Development
Test-Driven Development (TDD)
- Metode pengembangan perangkat lunak yang menulis test sebelum kode
- Siklus kerja: Red -> Green -> Refactor
- Memastikan setiap fitur memiliki test sejak awal
Siklus TDD
Red
- Tulis test untuk fitur yang belum ada
- Jalankan test, pastikan gagal (red)
- Test gagal membuktikan test tidak palsu positif
Green
- Tulis kode paling sederhana untuk membuat test lolos
- Tidak perlu kode sempurna, yang penting test lolos
- Jalankan test, pastikan berhasil (green)
Refactor
- Perbaiki kode tanpa mengubah perilaku
- Jalankan test lagi untuk memastikan refactoring aman
- Ulangi siklus untuk fitur berikutnya
Keuntungan TDD
- Test selalu ada untuk setiap fitur
- Desain kode lebih modular karena harus bisa di-test
- Lebih sedikit bug masuk ke produksi
- Memberikan kepercayaan saat refactoring
Kapan TDD Sangat Berguna
- Algoritma atau logika bisnis yang kompleks
- Fitur dengan banyak edge case
- Library atau utility yang akan digunakan banyak tempat
- Refactoring kode legacy yang memiliki perilaku jelas
Kapan TDD Kurang Praktis
- Prototyping cepat untuk eksplorasi ide
- UI yang sering berubah desainnya
- Integrasi dengan API eksternal yang belum stabil
Behavior-Driven Development (BDD)
- Ekstensi dari TDD dengan fokus pada perilaku bisnis
- Test ditulis dalam bahasa yang dimengerti semua stakeholder
- Menggunakan format Given-When-Then
Format BDD: Given-When-Then
Given [kondisi awal]
When [aksi dilakukan]
Then [hasil yang diharapkan]Contoh BDD
describe('Proses Checkout', () => {
it('harus mengurangi stok dan membuat pesanan saat checkout berhasil', () => {
// Given
const produk = { id: 1, nama: 'Buku', stok: 10 };
const keranjang = [{ produkId: 1, jumlah: 2 }];
const user = { id: 1, saldo: 100000 };
// When
const hasil = checkout(user, keranjang, [produk]);
// Then
expect(hasil.pesanan.total).toBe(hargaProduk * 2);
expect(produk.stok).toBe(8);
expect(hasil.pesanan.status).toBe('dibayar');
});
});Perbedaan TDD dan BDD
| Aspek | TDD | BDD |
|---|---|---|
| Fokus | Implementasi kode | Perilaku bisnis |
| Bahasa | Teknis | Bahasa alami, dimengerti tim bisnis |
| Audiens | Developer | Developer, QA, Product Owner |
| Format | Unit test biasa | Given-When-Then |
| Scope | Unit kode | Fitur atau user story |
Praktik Terbaik
- Mulai dengan test yang paling sederhana
- Test satu hal pada satu waktu
- Refactor hanya setelah test lolos
- Nama test deskriptif yang menjelaskan perilaku
- Dalam BDD, libatkan stakeholder non-technical dalam menulis skenario