Debugging dan code review adalah dua aktivitas yang menghabiskan waktu, tapi keduanya crucial untuk software quality. Problem-nya, tidak semua developer punya akses ke senior engineer yang bisa review kode mereka secara konsisten.
Di sini Claude jadi tools yang cukup powerful — tapi tergantung cara kamu bertanya. Artikel ini fokus pada teknik spesifik, bukan sekadar "copy-paste kode". Kita bahas prompt pattern yang berhasil, common pitfall, dan 4 skenario nyata dari dunia production.
Recap: Setup Integrasi Claude (Episode 5)
Sebelum lanjut, pastikan kamu udah punya akses ke Claude melalui salah satu cara ini:
- Claude.ai — interface web, paling simple untuk eksperimen.
- Claude API — untuk integrasi ke IDE atau tools custom kamu.
- IDE Extension — beberapa editor udah ada plugin Claude (Cursor, VS Code dengan extension tertentu).
Asumsi di artikel ini: kamu punya akses ke Claude (entah via web atau API), dan kamu familiar dengan copy-paste kode atau menyertakan snippet di conversation.
Teknik Prompt Efektif untuk Debug dan Review
Jangan hanya tanya "debug kode ini". Struktur prompt kamu harus pakai format:
Context: [Apa yang kode ini lakukan]
Constraint: [Batasan/requirement bisnis]
Kode:
[snippet]
Pertanyaan spesifik: [Apa yang ingin tahu?]
Contoh prompt yang baik:
Context: Fungsi ini process user registration. Asumsi user bisa punya multiple email (secondary email).
Constraint: Harus support legacy database schema sampai migration selesai (3 bulan lagi).
Kode:
async function registerUser(userData) {
const user = await User.create({
email: userData.email,
name: userData.name,
phone: userData.phone
});
return user;
}
Pertanyaan: Ada bug apa dalam fungsi ini? Highlight yang bersifat security, logic, dan performance.
Dengan format ini, Claude bisa memberikan feedback yang much lebih relevan dengan situasi kamu — bukan generic review, tapi contextual.
Skenario 1: Debug Logic Bug dengan Penjelasan Terlebih Dahulu
Ketika kamu stuck di bug, jangan langsung minta "fix bug ini". Minta Claude explain bug-nya dulu, baru ask for fix. Ini penting supaya kamu paham root cause, bukan cuma copypaste solution.
Contoh skenario: Kamu punya fungsi untuk hitung discount. User report bahwa discount tiba-tiba berubah saat checkout.
Kode yang problematic:
function calculateDiscount(cartTotal, userTier) {
if (userTier === 'gold') return cartTotal * 0.1;
if (userTier === 'silver') return cartTotal * 0.05;
return 0;
}
let discount = calculateDiscount(150, 'gold');
cart.applyDiscount(discount); // 15
discount = calculateDiscount(cartTotal, 'gold'); // di fungsi lain, cartTotal jadi variable global
return discount; // hasil jadi berbeda
Prompt ke Claude:
Context: Fungsi calculateDiscount() dipanggil di dua tempat berbeda (cart page dan checkout page).
Bug report: Discount user gold berubah antara preview (cart page) dan final (checkout).
Kode:
[paste kode di atas]
Pertanyaan: Apa root cause-nya? Jelaskan apa yang terjadi step-by-step saat flow checkout, lalu baru sarankan fix.
Harapan response Claude: Claude akan explain bahwa global variable cartTotal bisa berubah, atau state management yang tidak consistent. Setelah paham, kamu baru tanya fix-nya.
Skenario 2: Code Review dari Perspektif Senior Engineer
Pakai Claude untuk code review lengkap — bukan hanya syntax, tapi performance, maintainability, security, dan architecture.
Contoh: Kamu punya authentication module yang ingin di-review sebelum merge ke main branch.
Prompt:
Context: Ini adalah authentication middleware untuk REST API. User bisa login pakai email + password atau OAuth (Google, GitHub).
Constraint: API ini critical — harus secure, cepat (latency < 100ms), dan maintainable oleh team lain nanti.
Kode:
[paste authentication.js atau authenticateUser function]
Minimum feedback yang saya butuh:
1. Security issue (besar atau kecil)?
2. Performance bottleneck?
3. Code readability dan maintainability — ada yang kurang clear?
4. Error handling — adequate atau perlu improve?
5. Testing gaps — unit test apa yang perlu ditambah?
Ranking feedback dari critical ke nice-to-have.
Claude akan memberikan review structured, prioritized. Ini jauh lebih berguna daripada review from peer yang mungkin tired atau miss beberapa aspek.
Skenario 3: Performance Issue Investigation
Kamu notice bahwa query tertentu jadi slow. Sebelum resign dan blame database, minta Claude investigate kode kamu dulu.
Contoh:
Context: Function ini fetch user dengan related orders. Dipanggil di dashboard user, bisa di-call jutaan kali per hari.
Constraint: Response time harus di bawah 200ms. Database is PostgreSQL.
Kode:
async function getUserWithOrders(userId) {
const user = await db.query('SELECT * FROM users WHERE id = ?', [userId]);
const orders = await db.query('SELECT * FROM orders WHERE user_id = ?', [userId]);
const orderDetails = orders.map(async (order) => {
return await db.query('SELECT * FROM order_items WHERE order_id = ?', [order.id]);
});
return { user, orders, orderDetails: await Promise.all(orderDetails) };
}
Pertanyaan: Analisis performance kode ini. Ada N+1 query problem? Ada yang bisa dioptimize?
Claude akan spot N+1 query issue (mungkin tidak obvious buat junior), suggest batch query atau JOIN, atau caching strategy. Berharga banget untuk optimization.
Skenario 4: Security Audit Sebelum Production Deploy
Sebelum push ke production, minta Claude di-review dari security angle. Ini bisa save kamu dari major breaches.
Context: API endpoint ini handle file upload dari user. File disimpan di /uploads folder di server, lalu di-serve kembali via HTTP.
Constraint: Support multiple file type (image, pdf, doc). File size up to 50MB.
Kode:
app.post('/upload', (req, res) => {
const file = req.files.upload;
const fileName = file.name; // directly pakai filename dari client
file.mv('./uploads/' + fileName);
res.json({ url: '/uploads/' + fileName });
});
Pertanyaan: Ada security vulnerability dalam kode ini? Highlight dari perspective attacker yang mau abuse.
Claude akan identify: path traversal risk (bisa upload ke parent folder), no file type validation, no virus scan, exposed directory listing, dll. Critical untuk fix sebelum production.
Best Practice: Iterative Debugging dengan Claude
Jangan expect Claude solve bug dalam satu prompt. Treat it seperti conversation dengan senior engineer — tanya, clarify, tanya lagi.
- Round 1: Explain bug, minta Claude identify root cause.
- Round 2: "Oke, jadi masalahnya X. Gimana caranya fix ini tanpa break Y feature?" Claude bisa suggest multiple approach.
- Round 3: "Approach no. 2 terdengar bagus, tapi gimana dengan edge case Z?" Refine bersama.
- Round 4: Minta Claude generate final code + unit test untuk verify fix-nya.
Dengan iterate, kamu bukan cuma dapet answer, tapi juga learning — dan solution-nya lebih tailored ke kondisi spesifik project kamu.
Common Mistake Saat Pakai Claude untuk Debug
Jangan:
- Oversimplify konteks. "Debug fungsi ini" tanpa explain apa yang seharusnya terjadi. Claude jadi harus guess intent.
- Expect 100% akurat. Claude bisa salah, terutama kalau kode kamu punya library-specific behavior yang niche. Always verify suggestion.
- Copypaste code tanpa understand. Pahami fix-nya sebelum merge. Jangan jadi "AI-assisted cargo cult programming".
- Abaikan warning atau caveats dari Claude. Kalau Claude bilang "ini mungkin break X", respect itu dan investigate.
Kesimpulan
Claude adalah powerful debugging dan code review tool — tapi hasilnya tergantung gimana kamu frame pertanyaan. Format "Context + Constraint + Kode + Specific Question" akan unlock value maksimal. Gunakan untuk identify bugs, security issue, performance bottleneck, dan maintainability problem sebelum code kamu go to production.
Di episode berikutnya, kita bahas automation — cara pakai Claude untuk generate boilerplate, scaffold project, dan automate repetitive coding task. Stay tuned!