Testing & Debugging: Layar Verifikasi
[!NOTE]
Percaya itu baik. Verifikasi itu lebih baik. Verifikasi otomatis adalah yang terbaik. Di era AI, verifikasi adalah satu-satunya benteng integritas Anda.
Di era AI, membuat kode itu murah. Artinya bug juga murah. Bottleneck telah bergeser dari “Bagaimana cara nulis fungsi ini?” menjadi “Apakah fungsi ini benar-benar jalan?”.
📖 Daftar Isi
1. Paradoks Kecepatan AI
- Dunia Lama: Anda habiskan 1 jam nulis kode, 10 menit testing. Anda paham setiap baris karena Anda yang ketik.
- Dunia Baru: AI Generate 100 baris dalam 3 detik. Anda merasa Anda paham.
- Risikonya: Illusion of Competence (Ilusi Kompetensi). Kode terlihat benar (Sintaks sempurna), tapi logikanya mungkin keliru (Hallucination).
2. TDD 2.0: Test Driven Generation
- Konsep: Karena AI adalah “Junior Developer”, Anda menjadi “QA Lead”. Di sini kita membagi tanggung jawab antara verifikasi otonom oleh AI dan audit strategis oleh manusia.
graph TD
subgraph Autonomous["Lapisan Otonom (AI)"]
A1[Perubahan Kode] --> A2[Generasi Unit Test]
A2 --> A3[Fuzz Testing / Edge Cases]
A3 --> A4[Analisis RCA pada Kegagalan]
end
subgraph Manual["Lapisan Strategis (Arsitek)"]
M1[Definisi Arsitektur] --> A1
A4 --> M2[Review Logika Kritis]
M2 --> M3[Audit Integrasi Sistem]
M3 --> M4[Persetujuan Akhir/Ship]
end
style Autonomous fill:#f5f5f5,stroke:#9e9e9e,stroke-dasharray: 5 5
style Manual fill:#e3f2fd,stroke:#1565c0,stroke-width:2px
-
Alur Kerja TDD:
flowchart TD
A["Manusia: Definisi Kebutuhan"] --> B["Manusia: Tulis Failing Test"]
B --> C["AI: Tulis Kode agar Tes Lulus"]
C --> D{"Tes Lulus?"}
D -->|Tidak| C
D -->|Ya| E["Manusia: Refactor dengan Bantuan AI"]
E --> F["Modul Terverifikasi"]
- Anda Tulis Tes: Definisi Input dan Output yang diharapkan. (misal:
expect(hitungPajak(100)).toBe(10)).
- AI Tulis Kode: “Generate fungsi yang lolos tes ini.”
- Jalankan & Verifikasi: Jika Green, Merge. Jika Red, suruh AI perbaiki.
-
Mengapa: Ini menjamin AI memenuhi Specification Anda, bukan imajinasinya sendiri.
- Pergeseran Skill: Di 2020, developer jago itu yang ngetik cepat. Di 2025, developer jago itu yang baca cepat.
- Mental Model: Perlakukan kode AI seperti library yang Anda download dari internet. Jangan asumsikan sempurna.
Rubber Ducking 2.0: Jelaskan balik kode buatan AI tersebut kepada AI itu sendiri. “Jelaskan logika di baris 15 kepada saya seolah-olah saya adalah mahasiswa tahun pertama.” Jika penjelasannya masuk akal dan sesuai dengan kode, barulah Anda bisa melangkah ke tahap selanjutnya.
Protokol RCA (Root Cause Analysis) Agentik
Jangan berikan error mentah kepada AI. Gunakan pola ini:
- Status Quo: Apa yang sedang terjadi saat ini? (Sertakan Stack Trace).
- Context: Berikan file yang berkaitan langsung dengan error tersebut.
- The Prompt: “Analisis pola dari logs ini. Identifikasi apakah masalahnya ada di State Management, API Gateway, atau Database Constraint. Jangan buat perbaikan dulu, jelaskan mengapa ini terjadi.”
4. Verifikasi Idempotensi
Sesuai dengan Konstitusi Arsitek, kode yang baik harus bersifat idempotent.
- Cara Testing: Jalankan script deploy atau migrasi Anda 2x berturut-turut.
- Result: Jika running kedua menghasilkan error (misal: “Table already exists” atau “Variable already defined”), maka kode Anda gagal dalam tes idempotensi.
- AI Prompt: “Tinjau skrip ini. Pastikan ia tidak mengeksekusi logika yang sama jika state tujuan sudah tercapai (Upsert pattern).”
5. Observabilitas: “Di laptop saya jalan kok”
- Kebohongan: “Jalan di sini.”
- Kebenaran: User tidak pakai laptop Anda.
\[Visibilitas = Log + Metrik + Jejak\]
- Alat:
- Logs:
console.log oke buat Dev, tapi buruk buat Production. Pakai Structured Logging (JSON).
- Traces: “Di mana Request-nya mati?” (Frontend -> API -> DB).
- Metrics: “Apakah API lambat?” (Latency).
6. Diagrams as Code: Verifikasi Visual
Dalam filosofi “Dokumentasi adalah Kode”, diagram bukan lagi gambar mati yang diunggah ke cloud. Ia adalah teks berbasis Mermaid yang tinggal di dalam repositori.
Simbiosis ESLint & Mermaid
Integrasi ini memungkinkan kita melakukan linting dan validasi pada diagram, memastikan kualitas visual dan sinkronisasi dengan kode aplikasi.
- Linting Kode Mermaid: Mermaid menggunakan sintaks berbasis teks yang mirip dengan Markdown. Kode ini dapat dan harus di-lint.
- Alat Utama:
- mermaid-cli: Mengubah diagram menjadi aset visual dalam proses build.
- mermaid-lint: Linter mandiri untuk menangkap kesalahan sintaks atau elemen yang hilang.
- ESLint Plugins: Menjalankan pengecekan otomatis pada blok kode Mermaid di dalam file Markdown atau JavaScript Anda.
Protokol Verifikasi Visual
- Definisikan di Kode: Diagram ditulis dengan sintaks
graph TD; A-->B;.
- Validasi Otomatis: Linter mengecek apakah ada node yang tidak terdefinisi atau kesalahan gaya.
- Output Terjamin: Menghindari visual yang rusak di dokumentasi publik (GitHub/GitLab).
[!TIP]
Dengan memperlakukan diagram sebagai kode kelas satu (First-class Code), Anda menjamin dokumentasi Anda tidak akan usang atau hancur saat proyek berkembang.
7. Checklist Verifikasi
Piramida Testing Modern
block-beta
columns 1
E2E["End-to-End (Browser Full) - 10%"]
Integration["Integration (API/DB) - 30%"]
Unit["Unit Tests (Fungsi Murni) - 60%"]
style E2E fill:#ef9a9a,color:black
style Integration fill:#fff59d,color:black
style Unit fill:#a5d6a7,color:black
Testing Otonom (Autonomous Testing)
Manfaatkan AI untuk mencari “Unknown Unknowns”:
- Fuzz Testing: “Generate 20 jenis input aneh—termasuk emoji, null, dan string 1GB—untuk mengetes ketahanan fungsi ini.”
- Edge-Case Hunter: “Setelah melihat fungsi ini, tulis 5 unit test yang paling mungkin membuat logic ini gagal.”
graph TD
Code["Code Update"] --> Triage["AI RCA / Analysis"]
Triage --> TestGen["Autonomous Test Generation"]
TestGen --> Run["Run Test Suite"]
Run -->|Fail| Triage
Run -->|Pass| Verify["Idempotency Check"]
Verify --> Final["Merge/Commit"]
🏠 Home | 🗺️ Roadmap | 📜 Konstitusi Arsitek