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
- Tulis tujuan dan acceptance criteria.
- Buat perubahan kecil yang dapat ditinjau.
- 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 > 130Negative 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
- Jalankan contoh dengan input normal.
- Ulangi dengan input kosong, tipe salah, dan nilai batas.
- Pastikan error tidak membocorkan secret atau detail internal.
Latihan
- Modifikasi contoh dengan satu kebutuhan baru dan tulis acceptance criteria-nya.
- 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.