SavefileArchive
USD/IDR ...
|
BTC ...
|
ETH ...
|
GOLD/gram ...
Terbaru
SavefileArchive — Tutorial coding, tips programming, dan dunia musik untuk developer & pecinta musik Indonesia
AI Code Review: Cara Review PR Sendiri Sebelum Submit ke Tim

AI Code Review: Cara Review PR Sendiri Sebelum Submit ke Tim

AI Code Review: Cara Review PR Sendiri Sebelum Submit ke Tim

Ilustrasi AI Code Review

Pernah submit PR dan reviewer langsung menemukan bug obvious yang harusnya kamu tangkap sendiri? Atau dapat komentar "ini bisa lebih efisien" padahal kamu sudah merasa kodenya bagus? Situasi ini bisa diminimalkan dengan satu kebiasaan sederhana: review kode kamu sendiri dengan AI sebelum minta review ke manusia.

Ini bukan tentang menggantikan code review manusia — melainkan tentang datang ke review dengan kode yang sudah lebih bersih, sehingga reviewer bisa fokus pada hal yang lebih penting dari sekadar typo dan missing null check.


1. Mengapa Self-Review dengan AI Penting?

Ada beberapa alasan kenapa developer sering melewatkan bug di kode sendiri:

  • Curse of knowledge — kamu tahu apa yang "seharusnya" dilakukan kode, jadi otak mengisi celah yang sebenarnya tidak ada di kode
  • Context switching — setelah berjam-jam coding, mata sudah tidak tajam melihat masalah
  • Blind spot — setiap developer punya pola kesalahan yang berulang dan tidak disadari

AI tidak punya masalah ini. AI membaca kode apa adanya, tanpa asumsi tentang "maksud" penulisnya.


2. Workflow AI Code Review yang Efektif

Langkah 1: Ambil Diff dari Git

# Ambil semua perubahan yang belum di-commit
git diff

# Atau perubahan yang sudah di-stage
git diff --staged

# Atau perbandingan dengan branch main
git diff main...HEAD

# Simpan ke file untuk mudah di-paste ke AI
git diff main...HEAD > review.diff

Langkah 2: Gunakan Prompt Review yang Terstruktur

Kamu adalah senior engineer. Review diff/kode berikut sebelum masuk ke PR.

Konteks:
- Stack: [Node.js/Python/Go/dll] + [framework]
- Fitur yang diimplementasi: [deskripsi singkat]
- Ticket/issue: [nomor atau deskripsi]

Berikan review dalam format:

🔴 CRITICAL (blokir merge):
🟡 WARNING (sebaiknya diperbaiki):
🟢 SUGGESTION (improvement opsional):
✅ GOOD (yang sudah bagus):

Fokus pada:
1. Bug dan logic error
2. Security vulnerabilities
3. Performance issues (N+1, unnecessary computation)
4. Missing error handling
5. Edge case yang tidak di-handle
6. Konsistensi dengan konvensi yang terlihat di kode

[paste diff atau kode]

Langkah 3: Iterasi Berdasarkan Feedback

# Setelah dapat feedback, perbaiki dan review lagi
# Fokus pada CRITICAL dan WARNING dulu

# Setelah perbaikan, tanyakan:
"Aku sudah perbaiki poin-poin berikut: [list perbaikan].
Apakah ada masalah baru yang muncul dari perubahan ini?
[paste kode yang sudah diperbaiki]"

3. Jenis Review Spesifik

Security Review

"Lakukan security review khusus untuk kode ini.
Cek untuk:
- SQL/NoSQL injection
- XSS vulnerabilities
- IDOR (Insecure Direct Object Reference)
- Missing authentication/authorization
- Sensitive data exposure (password, token di log)
- Insecure deserialization
- Path traversal

Untuk setiap temuan, berikan:
- Severity (Critical/High/Medium/Low)
- Contoh exploit scenario
- Cara fix yang benar

[paste kode]"

Performance Review

"Review kode ini dari sisi performance.
Identifikasi:
- N+1 query problem
- Unnecessary database calls dalam loop
- Missing index yang mungkin dibutuhkan
- Memory leak potential
- Blocking operation yang bisa di-async
- Computation yang bisa di-cache

Berikan estimasi dampak performa untuk setiap temuan.

[paste kode]"

Test Coverage Review

"Review test coverage untuk implementasi ini.
Identifikasi:
- Happy path yang belum di-test
- Error path yang belum di-test
- Edge case yang belum di-cover
- Integration point yang perlu di-mock

Kemudian tulis test yang missing menggunakan [Jest/Pytest/dll].

Implementasi:
[paste kode implementasi]

Test yang sudah ada:
[paste test yang sudah ada]"

4. Integrasi ke Git Workflow

Buat kebiasaan ini menjadi bagian dari workflow dengan git hook:

#!/bin/bash
# .git/hooks/pre-push
# Ingatkan developer untuk AI review sebelum push

echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "  Checklist sebelum push:"
echo "  □ Sudah AI review? (git diff main...HEAD)"
echo "  □ Semua test pass? (npm test)"
echo "  □ Tidak ada console.log/debug code?"
echo "  □ PR description sudah ditulis?"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
read -p "Lanjut push? (y/n): " confirm
[ "$confirm" = "y" ] || exit 1

5. Contoh Nyata: Sebelum dan Sesudah AI Review

// === SEBELUM AI REVIEW ===
async function deleteUser(req, res) {
  const { id } = req.params;
  await User.delete(id);
  res.json({ message: 'User deleted' });
}

// === FEEDBACK AI ===
// 🔴 CRITICAL: Tidak ada authentication check — siapapun bisa hapus user manapun
// 🔴 CRITICAL: Tidak ada authorization — user biasa bisa hapus admin
// 🔴 CRITICAL: Tidak ada validasi apakah user dengan id tersebut exist
// 🟡 WARNING: Tidak ada soft delete — data hilang permanen
// 🟡 WARNING: Tidak ada error handling jika database gagal
// 🟢 SUGGESTION: Tambahkan audit log siapa yang menghapus kapan

// === SESUDAH AI REVIEW ===
async function deleteUser(req, res) {
  // Authentication: pastikan user sudah login
  if (!req.user) {
    return res.status(401).json({ error: 'Unauthorized' });
  }

  // Authorization: hanya admin yang bisa hapus user
  if (req.user.role !== 'admin') {
    return res.status(403).json({ error: 'Forbidden' });
  }

  const { id } = req.params;

  // Validasi user exist
  const user = await User.findById(id);
  if (!user) {
    return res.status(404).json({ error: 'User not found' });
  }

  // Jangan izinkan hapus diri sendiri
  if (req.user.id === id) {
    return res.status(400).json({ error: 'Cannot delete your own account' });
  }

  try {
    // Soft delete — data tetap ada tapi tidak aktif
    await User.update(id, { deletedAt: new Date(), deletedBy: req.user.id });
    
    // Audit log
    await AuditLog.create({
      action: 'USER_DELETED',
      targetId: id,
      performedBy: req.user.id,
    });

    res.json({ message: 'User deleted successfully' });
  } catch (err) {
    console.error('Delete user error:', err);
    res.status(500).json({ error: 'Failed to delete user' });
  }
}

Perbedaannya drastis. Dan semua masalah itu terdeteksi dalam hitungan detik oleh AI.


Kesimpulan

AI code review bukan pengganti review dari rekan tim — melainkan filter pertama yang memastikan kamu tidak membuang waktu reviewer untuk hal-hal yang seharusnya sudah kamu tangkap sendiri. Jadikan ini kebiasaan: sebelum push, selalu jalankan AI review. Dalam beberapa minggu, kamu akan mulai menginternalisasi pola-pola yang AI temukan dan secara otomatis menghindarinya saat menulis kode.