Recraftory

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

AspekTDDBDD
FokusImplementasi kodePerilaku bisnis
BahasaTeknisBahasa alami, dimengerti tim bisnis
AudiensDeveloperDeveloper, QA, Product Owner
FormatUnit test biasaGiven-When-Then
ScopeUnit kodeFitur 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