Piramida Testing & Strategi — Testing

Pernah deploy ke production hari Jumat sore, terus jam 6 user complain "tombol checkout error"? Atau refactor code yang katanya cuma "tambahin null check", mala

Pernah deploy ke production hari Jumat sore, terus jam 6 user complain "tombol checkout error"? Atau refactor code yang katanya cuma "tambahin null check", malah break 5 fitur lain? Itu hidup tanpa testing — **harapan** sebagai strategi. Testing balikan harapan jadi confidence: "saya tau ini jalan karena udah ditest". 1 jam nulis test = save 10 jam debug production crisis.

💡 "Test bukan beban, test adalah kebebasan." Tanpa test, takut refactor (mungkin break sesuatu). Dengan test, refactor leluasa — kalau break, test fail, langsung tau. Test = safety net yang bikin developer berani ambil risiko teknis untuk improve code.

Apa itu Testing?

Testing (pengujian) adalah proses memverifikasi bahwa kode yang kita tulis bekerja sesuai harapan. Tanpa testing, kita hanya bisa berharap kode kita benar — dan harapan bukanlah strategi yang baik dalam software engineering.

Mengapa Testing Penting?

Jenis-jenis Testing

1. Unit Test

Menguji satu fungsi atau komponen secara terisolasi. Tidak bergantung pada database, API, atau sistem eksternal lain.

// Contoh unit test
function tambah(a, b) {
  return a + b;
}

test("tambah 2 + 3 = 5", () => {
  expect(tambah(2, 3)).toBe(5);
});

2. Integration Test

Menguji bagaimana beberapa unit bekerja bersama. Misalnya, apakah controller bisa mengambil data dari database dengan benar.

// Contoh integration test
test("GET /api/users mengembalikan daftar user", async () => {
  const response = await request(app).get("/api/users");
  expect(response.status).toBe(200);
  expect(response.body).toHaveLength(3);
});

3. End-to-End (E2E) Test

Menguji alur lengkap dari sudut pandang user. Membuka browser, klik tombol, isi form, dan verifikasi hasilnya.

Piramida Testing

Piramida testing adalah panduan proporsi ideal untuk setiap jenis test:

E2E ~10% Integration ~20% Unit ~70% lambat cepat realistis terisolasi
Proporsi ideal: banyak unit test di dasar, sedikit E2E di puncak.

Tradeoff setiap level

Strategi Praktis

Mulai dari unit test untuk logika bisnis utama. Tambahkan integration test untuk endpoint API. Gunakan E2E test hanya untuk alur kritis seperti login, checkout, atau pendaftaran.

🎭 Analogi sehari-hari

Test = cek motor sebelum touring jauh. Cek oli, ban, rem, bensin — bukan paranoid, tapi smart. Mecanic profesional cek tiap part lebih sering dari pemula. Testing sama: profesional nulis test sebanyak code-nya, bukan karena gak percaya diri — tapi karena tau mesin ber-banyak parts harus konsisten kerja sama.

⚠️ Jebakan yang sering ditemui

TL;DR: Testing = verifikasi kode bekerja sesuai harapan. 3 level: Unit (terisolasi, cepat, banyak), Integration (komponen kerja sama), E2E (full user flow, lambat, sedikit). Piramida testing: 70% unit, 20% integration, 10% E2E. Manfaat: prevent bug, dokumentasi hidup, refactor aman. Habit utama developer profesional, bukan optional.

Yang akan kamu pelajari