# Fuzz Testi

Adres: https://softwaredictionary.org/tr/terimler/fuzz-testing
Kategori: Test ve Kalite
Son güncelleme: 2026-09-30
İngilizcesi: Fuzz Testing
Okunuşu: faz testing

Kısaca: Fuzz testi, çökmeleri, takılmaları ve güvenlik açıklarını bulmak için bir programa çok sayıda beklenmedik ya da bozuk girdi veren otomatik bir tekniktir.

## Fuzz testi nedir?

Fuzz testi ya da fuzzing, bir programa çok sayıda rastgele, beklenmedik ya da bozuk girdi yağdırır ve çökmeleri, takılmaları, bellek hatalarını ve diğer yanlış davranışları gözler. Fikir, Wisconsin Üniversitesi'nden Barton Miller'ın 1988'deki, rastgele girdinin birçok standart Unix aracını çökerttiği bir deneyine dayanır. Fuzzing, kimsenin test yazmayı düşünmediği hataları bulmakta özellikle iyidir.

Bir fuzzer tekrar tekrar bir girdi üretir, bunu genellikle bir dosya ayrıştırıcısı gibi tek bir fonksiyon olan fuzz hedefine verir ve sonucu kontrol eder. Modern coverage-guided (kapsam güdümlü) fuzzer'lar tohum derlemi (seed corpus) adı verilen birkaç örnek girdiyle başlar, bitleri çevirerek, bayt ekleyerek ya da dosyaları birleştirerek bunları mutasyona uğratır ve yeni kod yollarına ulaşan mutasyonları tutar; böylece zamanla daha derine iner. Çoğunlukla sanitizer'larla, yani arabellek taşması gibi bellek hatalarını oluştukları anda tespit eden araçlarla birleştirilirler ve çöken her girdi, geliştiriciler yeniden üretip regresyon testi olarak ekleyebilsin diye kaydedilir.

Fuzzing, rastgele sırayla her düğmeye basan bir yürümeye yeni başlayan çocuğa uzaktan kumanda vermek gibidir: er ya da geç tasarımcıların hiç düşünmediği bir kombinasyonu bulur. Dosya biçimi ve görüntü ayrıştırıcıları, ağ protokolü işleyicileri, derleyiciler, tarayıcılar ve işletim sistemi çekirdekleri gibi güvenliğe duyarlı kodlarda yaygın olarak kullanılır. Pek çok büyük açık kaynak proje fuzzer'ları sürekli çalıştırır ve fuzzing binlerce CVE ortaya çıkarmıştır.

Fuzz testi sıklıkla özellik tabanlı testle karıştırılır. İkisi de girdileri otomatik üretir, ancak fuzzing genellikle ham baytlar üzerinde saatlerce ya da günlerce çalışır ve esas olarak programın çöküp çökmediğini ya da yanlış davranıp davranmadığını sorar; özellik tabanlı test ise normal test takımında hızlı çalışır, yapılandırılmış değerler üretir ve belirli doğruluk kurallarını kontrol eder. Fuzzing ayrıca, bir sisteme sızmaya yönelik daha geniş ve insan güdümlü bir girişim olan sızma testinden (penetration testing) daha dardır.

## Önemli noktalar

- Fuzzing, bir programa çok miktarda beklenmedik ya da bozuk girdi verir.
- Çökmeleri, takılmaları, bellek hatalarını ve güvenlik açıklarını arar.
- Coverage-guided fuzzer'lar yeni kod yollarına ulaşan girdileri evrimleştirir.
- Çöken her girdi bir regresyon testine dönüştürülmelidir.
- Dosyalar ve ağ mesajları gibi güvenilmeyen veriyi ayrıştıran kodu hedefler.

## Örnek: Go'nun yerleşik fuzzing özelliğiyle bir fuzz testi

```go
package parser

import "testing"

// Run with: go test -fuzz=FuzzParseConfig
func FuzzParseConfig(f *testing.F) {
    f.Add([]byte("name=app\nport=8080")) // seed input the fuzzer mutates
    f.Fuzz(func(t *testing.T, data []byte) {
        // Any input may be rejected with an error, but it must never crash
        cfg, err := ParseConfig(data)
        if err == nil && cfg == nil {
            t.Errorf("no error and no config for input %q", data)
        }
    })
}
```

## Sık sorulan sorular

**Fuzzing ile özellik tabanlı test arasındaki fark nedir?**

Fuzzing genellikle ham ya da bozuk veri üzerinde uzun süre çalışır ve esas olarak çökmeleri ve güvenlik hatalarını arar. Özellik tabanlı test, yapılandırılmış girdilerle normal test takımının bir parçası olarak çalışır ve çıktıyla ilgili belirli kuralların geçerli olduğunu kontrol eder.

**Coverage-guided fuzzing nedir?**

Her girdinin hangi koda ulaştığını ölçen, yeni yollara ulaşan girdileri tutan ve bunları daha da mutasyona uğratan bir fuzzing stratejisidir. Bu, fuzzer'ın körü körüne tahmin yürütmek yerine karmaşık kodun derinliklerine ilerlemesini sağlar.

**Fuzzing yalnızca güvenlik testi için midir?**

Hayır. En çok güvenlik açıklarını bulmasıyla bilinir, ancak boş girdide çökme, sonsuz döngüler ve aynı davranması gereken iki uygulama arasındaki farklar gibi sıradan hataları da bulur.

---

Software Dictionary: https://softwaredictionary.org/tr · https://softwaredictionary.org/tr/llms.txt
