Lewati ke isi

06 — Checklist Review Kode Hasil AI

← Security | Index | Lanjut: Glosarium →


Gunakan checklist ini sebelum merge/deploy kode apa pun yang dihasilkan AI. Simpan halaman ini — inilah dokumen yang paling sering dipakai sehari-hari.

Cara Memakai Checklist Ini

  1. Tidak semua item berlaku untuk semua perubahan. Perubahan CSS tidak butuh cek transaction. Gunakan bagian yang relevan.
  2. Skala kedalaman review dengan risiko:
Tingkat Risiko Contoh Kedalaman Review
🟢 Rendah Perubahan tampilan, copy text, styling Baca sekilas + tes visual
🟡 Sedang Fitur CRUD baru, endpoint baru Checklist penuh bagian terkait
🔴 Tinggi Auth, pembayaran, data pribadi, hak akses, migration destruktif Checklist penuh + AI review + human review kedua
  1. Urutan yang efisien: Umum → Security → bagian teknis terkait.

✅ Umum (selalu)

  • [ ] Saya paham apa yang dilakukan kode ini. Kalau tidak → minta AI menjelaskan baris per baris dulu. Tidak paham = tidak merge.
  • [ ] Kode sudah dites dengan edge case, bukan hanya happy path: input kosong, nilai 0/negatif, string sangat panjang, karakter aneh/emoji, data duplikat, request ganda.
  • [ ] Perubahan tidak merusak fitur lain (jalankan test suite bila ada).
  • [ ] Kode mengikuti konvensi/struktur project yang sudah ada (penamaan, folder, pola).
  • [ ] Tidak ada kode mati/komentar sampah/console.log & dd() sisa debugging.
  • [ ] Package baru yang disarankan AI benar-benar ada di registry resmi dan reputable (cek umur, unduhan, repo) — anti-slopsquatting.

✅ Security (hampir selalu)

  • [ ] Tidak ada secret (API key, password, token) hardcoded di kode, config, atau contoh.
  • [ ] Tidak ada secret asli yang pernah saya tempel ke prompt AI.
  • [ ] Endpoint sensitif punya cek autentikasi DAN otorisasi — kepemilikan data / role dicek di backend (anti-IDOR).
  • [ ] Query pakai parameterized/prepared statement — tidak ada input user yang di-concat ke SQL/perintah shell.
  • [ ] Output data user di-escape; setiap innerHTML / dangerouslySetInnerHTML / {!! !!} / v-html dipertanyakan.
  • [ ] Password di-hash dengan bcrypt/argon2 (bukan MD5/SHA1/plain text).
  • [ ] Validasi input ada di sisi server (bukan hanya frontend).
  • [ ] Error response ke user generik — tidak membocorkan stack trace, query, atau path server.
  • [ ] Ada rate limiting di endpoint login/publik.
  • [ ] Upload file (bila ada): whitelist tipe, verifikasi konten, batas ukuran, rename acak, simpan di lokasi non-eksekusi.

✅ API

  • [ ] Method HTTP sesuai fungsinya — GET tidak mengubah data.
  • [ ] Status code benar per kondisi: 201 create, 422 validasi, 404 tidak ditemukan, 403 tak berhak — bukan 200 untuk semuanya.
  • [ ] Tidak ada data sensitif di query string/URL.
  • [ ] Format response konsisten dengan endpoint lain (penamaan field, struktur error, format tanggal ISO 8601 UTC).
  • [ ] Endpoint list punya pagination (tidak mengembalikan seluruh tabel).
  • [ ] Operasi non-idempotent yang kritis (pembayaran!) punya perlindungan duplikasi (idempotency key / pengecekan ganda).

✅ Database

  • [ ] Tidak ada UPDATE/DELETE tanpa WHERE. (Cek dua kali. Serius.)
  • [ ] Operasi multi-tabel yang saling bergantung dibungkus transaction.
  • [ ] Operasi stok/saldo/kuota aman dari race condition (atomic update / locking).
  • [ ] Tidak ada N+1 query — relasi di-load dengan eager loading.
  • [ ] Perubahan skema lewat migration baru (bukan edit migration lama, bukan manual di GUI), dan punya rollback.
  • [ ] Tipe data tepat: uang bukan float; tanggal UTC; kolom penting punya constraint (NOT NULL, UNIQUE, FK).
  • [ ] Kolom yang sering di-query sudah dipertimbangkan untuk index.
  • [ ] Data historis transaksi disalin, bukan direferensikan (mis. price_at_time).

✅ Docker / Infrastruktur

  • [ ] Tidak ada secret di Dockerfile / docker-compose.yml — semua lewat env variable.
  • [ ] .env ada di .gitignore dan .dockerignore; .env.example tidak berisi nilai asli.
  • [ ] Data penting (database, upload) ada di volume, bukan di dalam container.
  • [ ] Versi image spesifik (postgres:16), bukan :latest.
  • [ ] Ada healthcheck untuk database & depends_on menunggu kondisi sehat.
  • [ ] Urutan layer Dockerfile benar (dependency di-install sebelum copy semua kode).
  • [ ] Container tidak berjalan sebagai root bila memungkinkan.

Workflow Review yang Disarankan

1. BACA sendiri  →  2. AI SELF-REVIEW  →  3. TES edge case  →  4. (risiko 🔴) HUMAN kedua  →  5. Merge

Jangan balik urutannya — AI review duluan membuat Anda malas membaca sendiri, padahal langkah 1 adalah tempat Anda belajar dan tempat intuisi terbentuk.

Template Prompt Review

Review umum:

"Review kode berikut sebagai senior engineer yang skeptis. Cek terhadap daftar ini: [tempel bagian checklist yang relevan]. Format temuan: [severity: critical/high/medium/low] — [file:baris] — [masalah] — [cara perbaikan]. Kalau tidak ada temuan di suatu kategori, nyatakan eksplisit 'tidak ada temuan' — jangan mengarang temuan."

Review keamanan khusus:

"Review kode ini sebagai security engineer. Fokus: injection, XSS, IDOR/authorization, CSRF, secret hardcoded, validasi input, race condition pada operasi uang/stok. Berikan bukti (potongan kode) untuk setiap temuan."

Penjelasan (saat tidak paham):

"Jelaskan kode ini baris per baris untuk orang non-backend. Untuk setiap blok: apa fungsinya, kenapa ditulis begitu, dan apa yang terjadi kalau dihapus."

⚠️ Catatan: AI reviewer bisa melewatkan hal yang AI penulis juga lewatkan (bias yang sama), dan kadang "menemukan" masalah yang tidak ada. AI review melengkapi, tidak menggantikan, mata manusia.


← Security | Index | Lanjut: Glosarium →