# Hata ayıklama

Adres: https://softwaredictionary.org/tr/terimler/debugging
Kategori: Programlamanın Temelleri
Son güncelleme: 2026-09-30
İngilizcesi: Debugging
Okunuşu: dibaging

Kısaca: Hata ayıklama, bir programın neden yanlış davrandığını bulma, hatalı kodu saptama ve düzeltme sürecidir; çoğu zaman hata ayıklayıcı adlı bir araç kullanılır.

## Hata ayıklama (debugging) nedir?

Hata ayıklama, yazılımın çökmesine, yanlış sonuç vermesine ya da beklenmedik davranmasına yol açan hataları (bug) izleyip düzeltme işidir. Genellikle bir döngü izler: sorunu güvenilir biçimde yeniden üret, nerede oluştuğunu daralt, nedeni hakkında bir hipotez kur, onu test et, düzeltmeyi uygula ve başka hiçbir şeyi bozmadan sorunun gittiğini doğrula.

Geliştiriciler birkaç teknik kullanır. En basiti, program çalışırken değerleri görmek için print ya da log ifadeleri eklemektir. Hata ayıklayıcı (debugger) ise çalışan bir programı bir kesme noktasında (breakpoint) duraklatmanıza, satır satır ilerlemenize, değişkenleri ve çağrı yığınını incelemenize ve değerlerin değişimini izlemenize olanak tanıyan bir araçtır; tarayıcılar, kod editörleri ve `gdb` ile Python'ın `pdb` aracı gibi komut satırı araçlarının hepsi birini sunar. Diğer yaklaşımlar arasında hata mesajlarını ve yığın izlerini dikkatle okumak, kodu başka birine sesli açıklamak (rubber duck debugging olarak bilinir) ve bir hatayı getiren değişikliği bulmak için commit'ler arasında `git bisect` ile arama yapmak vardır.

Hata ayıklama, bir dedektiflik işine çok benzer: kanıt toplar, şüphelileri elersiniz ve bir açıklama her olguya uyana dek ipuçlarını izlersiniz. En zor hatalar, yarış durumları ve kararsız (flaky) testler gibi tutarlı biçimde yeniden üretilemeyenlerdir; çünkü programı gözlemlemek zamanlamasını değiştirebilir. İyi günlükleme, küçük yeniden üretilebilir test senaryoları ve sürüm kontrolü bunları izlemeyi çok kolaylaştırır.

Hata ayıklama sıklıkla testle karıştırılır. Test, programı beklenen sonuçlara karşı denetleyerek bir şeylerin yanlış olduğunu söyler; hata ayıklama ise neden ve nerede yanlış olduğunu bulur. Başarısız bir test genellikle hata ayıklamanın başlangıç noktasıdır ve düzeltmeden sonra yeni bir regresyon testi aynı hatanın geri gelmemesini sağlar.

## Önemli noktalar

- Hata ayıklama, bir hatanın nedenini bulup düzeltmek demektir.
- Önce sorunu güvenilir biçimde yeniden üretin, sonra nerede oluştuğunu daraltın.
- Hata ayıklayıcılar kesme noktalarında duraklamanıza, kodda ilerlemenize ve değişkenleri incelemenize izin verir.
- Test bir şeylerin yanlış olduğunu ortaya koyar; hata ayıklama nedenini açıklar.
- Bir hatayı düzelttikten sonra sessizce geri dönmemesi için bir regresyon testi ekleyin.

## Örnek: Bir Python programını hata ayıklayıcıda duraklatmak

```python
def average(values):
    total = sum(values)
    breakpoint()  # pauses here and opens the pdb debugger
    return total / len(values)

average([])  # ZeroDivisionError: division by zero

# Inside the debugger you can type commands such as:
#   p values    print a variable (shows [])
#   n           run the next line
#   c           continue running
```

## Sık sorulan sorular

**Hata ayıklama (debugging) sözcüğü nereden gelir?**

Mühendisler “bug” sözcüğünü bilgisayarlar var olmadan çok önce donanım arızaları için kullanıyordu. Harvard Mark II ekibinin 1947 tarihli ünlü bir kayıt defteri girdisi, bir rölede bulunan gerçek bir güveyi “bug'ın bulunduğu ilk gerçek vaka” olarak yapıştırılmış hâlde kaydeder ve bu, terimin bilgisayar dünyasında yaygınlaşmasına yardımcı olmuştur.

**Kesme noktası (breakpoint) nedir?**

Kesme noktası, bir kod satırına koyduğunuz ve hata ayıklayıcıya program o satıra ulaştığında duraklamasını söyleyen bir işarettir. Duraklatılmışken değişkenleri inceleyebilir, sonraki satırlarda ilerleyebilir ve programın tam olarak ne yaptığını görebilirsiniz.

**Rubber duck debugging nedir?**

Kodunuzu satır satır başka bir kişiye ya da lastik ördek gibi bir nesneye anlatma pratiğidir. Mantığı sözcüklere dökmek çoğu zaman hiçbir araç olmadan hatayı ortaya çıkarır.

---

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