Negative testing dan fuzzing ringan — Vibe Coding dan Security: Dari Prompt ke Aplikasi Aman

MATERI 22 DARI 28

Negative testing dan fuzzing ringan

Uji input salah, nilai batas, ukuran ekstrem, encoding, dan urutan aksi yang tidak valid.

Tujuan pembelajaran

  • Menyusun tabel boundary.
  • Menggunakan property sederhana.
  • Menemukan asumsi input normal.

Konsep utama

Negative test

Membuktikan sistem menolak operasi yang tidak boleh.

Property test

Menguji sifat umum pada banyak input, bukan hanya contoh tertentu.

Alur kerja teknis

  1. Tulis tujuan dan acceptance criteria.
  2. Buat perubahan kecil yang dapat ditinjau.
  3. Jalankan test dan baca diff sebelum menerima hasil AI.

Contoh implementasi

Fuzz ringan validator umur

import random

def validate_age(value):
    age = int(value)
    if not 0 <= age <= 130:
        raise ValueError("Umur di luar batas")
    return age

for _ in range(1000):
    value = random.randint(-1000, 1000)
    try:
        age = validate_age(value)
        assert 0 <= age <= 130
    except ValueError:
        assert value < 0 or value > 130

Negative test upload metadata

$cases = [0, -1, 5 * 1024 * 1024 + 1];
foreach ($cases as $size) {
    assert($size < 1 || $size > 5 * 1024 * 1024);
}

Aspek keamanan

  • Batasi resource fuzz test.
  • Rekam seed bila butuh reproduksi.
  • Fuzzing tidak menggantikan threat model dan review.

Kesalahan umum

  • Menerima kode AI tanpa membaca diff dan memahami alur data.
  • Menguji hanya happy path dan mengabaikan input salah atau batas nilai.
  • Menyimpan secret, token, atau data nyata di prompt dan source code.

Pengujian dan verifikasi

  1. Jalankan contoh dengan input normal.
  2. Ulangi dengan input kosong, tipe salah, dan nilai batas.
  3. Pastikan error tidak membocorkan secret atau detail internal.

Latihan

  1. Modifikasi contoh dengan satu kebutuhan baru dan tulis acceptance criteria-nya.
  2. Tambahkan satu negative test lalu jelaskan risiko yang dicegah.

Checklist

  • Tujuan dan batas pekerjaan jelas.
  • Input divalidasi di server.
  • Secret tidak berada di source/prompt.
  • Test lulus dan diff sudah dibaca.

Rangkuman

Uji input salah, nilai batas, ukuran ekstrem, encoding, dan urutan aksi yang tidak valid.