Kazanimlar:
- Bir hatayı en küçük yeniden üretilebilir örneğe indirip tam kanıtla AI'ya taşıyabilme
- Kanıt temelli hipotezleri en ucuz kontrolle sınayıp kök nedeni bulabilme
- Belirtiyi yamalamak yerine kök nedeni çözüp bir regresyon testiyle güvenceye alabilme
Hata ayıklama (debugging), bir yazılımın neden beklenmedik davrandığını bulup düzeltme sürecidir. Bir geliştiricinin en çok zaman harcadığı ve en çok yorulduğu iştir; çünkü hata çoğu zaman göründüğü yerde değil, birkaç adım geride saklıdır. Yapay zeka, bu araştırmayı hızlandıran güçlü bir düşünme ortağıdır — ama yalnızca ona doğru kanıtları verirseniz. Kanıtsız debugging, AI'nın en çok halüsinasyon ürettiği alandır.
Bu ünitede hatayı üretmekten kök nedene inmeye uzanan disiplinli bir akış kuruyoruz: belirtiyi netleştirmek, kanıt toplamak (hata mesajı, yığın izi, log, girdi), hipotez üretmek, hipotezi sınamak ve düzeltmeyi doğrulamak. AI her adımda yardımcı olur; ama "düzeltildi" kararı, hatanın gerçekten kaybolduğunu görmenizle verilir.
Neden Kanıt Her Şeydir?
Bir LLM, hatayı sizin gördüğünüz gibi görmez; yalnızca ona anlattığınız kadarını bilir. "Uygulama çöküyor" gibi bir cümle, modele neredeyse hiçbir bilgi vermez ve model bu boşluğu tahminle — yani halüsinasyonla — doldurur. Buna karşılık tam hata mesajı, yığın izi (stack trace — hatanın hangi fonksiyon çağrılarından geçtiğini gösteren döküm), hatayı tetikleyen girdi ve beklenen vs. gözlenen davranış verildiğinde, model gerçek olasılıkları sıralayabilir.
Debugging'de AI'yı bir dedektifin yanındaki asistan gibi düşünün: ne kadar çok kanıt sunarsanız, o kadar isabetli hipotez üretir. Kanıt yoksa asistan sadece tahmin yürütür ve sizi yanlış izlere sürükleyebilir.
İpucu: Bir hatayı AI'ya taşımadan önce onu en küçük yeniden üretilebilir örneğe (minimal reproducible example) indirin. Hatayı tetikleyen en küçük kod ve girdi, hem sizin hem modelin işini kökten kolaylaştırır; çoğu zaman bu indirgeme sırasında nedeni kendiniz bulursunuz.
Adım Adım: Kök Neden Analizi Akışı
- Belirtiyi netleştirin. "Ne oluyor, ne olmasını bekliyordunuz?" İkisini bir cümlede yazın.
- Kanıt toplayın. Tam hata mesajı, yığın izi, ilgili log satırları, tetikleyen girdi, sürüm bilgisi.
- Hipotez ürettirin. AI'dan "bu belirtiyi açıklayan 3 olası neden ve her birini nasıl test ederim?" isteyin.
- En ucuz hipotezi önce sınayın. Bir log ekleyin, bir değeri yazdırın, bir testi çalıştırın. Kanıt hipotezi doğruluyor mu?
- Kök nedeni düzeltin, belirtiyi değil. Yamayla belirtiyi susturmak yerine, asıl nedeni giderin.
- Doğrulayın ve regresyon testi ekleyin. Hatanın kaybolduğunu görün; sonra o hatayı yakalayacak bir test yazın ki geri gelmesin.
Üç Mini Vaka
Vaka 1 — Yığın izi doğru dosyaya yönlendirdi. Bir uygulama, belirli isteklerde 500 hatası veriyordu. Geliştirici tam yığın izini ve tetikleyen isteği AI'ya verdi; model, hatanın bir tarih ayrıştırma katmanında None değerinden kaynaklandığı hipotezini öne çıkardı. Geliştirici o satıra bir log ekleyip doğruladı ve 15 dakikada çözdü; kanıtsız denemelerle önceki gün 2 saat harcanmıştı.
Vaka 2 — Halüsinasyon yanlış ize sürükledi. Başka bir geliştirici yalnızca "veritabanı bağlantısı kopuyor" yazdı. AI, hiçbir kanıt olmadan bir bağlantı havuzu (connection pool) ayarını suçladı; geliştirici bu ayarla 40 dakika uğraştı. Gerçek neden, ağ tarafındaki bir zaman aşımıydı ve ancak log'lara bakınca ortaya çıktı. Ders: kanıt vermeden alınan hipotez, güvenilir değil, sadece olasıdır.
Vaka 3 — Aralıklı (flaky) hata yakalandı. Ara sıra başarısız olan bir test vardı. AI'ya test kodu, başarısızlık mesajı ve "bazen geçiyor bazen kalıyor" bilgisi verildi; model, testlerin paylaşılan bir zaman/sıra bağımlılığına işaret etti. İnceleme, testin sistemin yerel saatine bağlı olduğunu doğruladı. Saat sabitlenince (mock'lanınca) test kararlı hale geldi.
Dört Kopyalanabilir Şablon
Kanıt temelli hipotez üretimi:
Bir hatayı ayıklıyorum. Kanıtlar aşağıda.- Beklenen davranış: {{beklenen}}- Gözlenen davranış: {{gözlenen}}- Hata mesajı / yığın izi: {{trace}}- Tetikleyen girdi: {{girdi}}- Ortam/sürüm: {{sürüm}}Bu belirtiyi açıklayan EN OLASI 3 kök nedeni sırala. Her biri için: nasıltest ederim (en ucuz kontrol) ve doğruysa nasıl düzeltilir. Kanıt yetersizsehangi ek bilgiye ihtiyacın olduğunu söyle.
Yığın izi yorumlama:
Bu yığın izini oku. Hatanın MUHTEMELEN hangi satırda başladığını (kök) ve hangisatırların sadece zincirin devamı olduğunu ayır. İlk bakılması gereken 1-2 yeriöner. İlgili kod:{{kod}}Trace:{{trace}}
En küçük yeniden üretim (minimal repro) çıkarma:
Aşağıdaki kod bir hata üretiyor. Hatayı hâlâ tetikleyen ama gereksiz her şeyiatılmış EN KÜÇÜK örneğe indir. Kaldırdığın her parçanın hatayı etkilemediğinivarsaymayıp bana "şunu kaldırınca hata kaybolursa neden odur" notu ekle.{{kod}}
Düzeltme sonrası doğrulama ve regresyon testi:
Kök nedenin {{neden}} olduğunu ve şu düzeltmeyi yaptığımı varsay: {{düzeltme}}.1) Bu düzeltme belirtiyi gerçekten giderir mi, yan etkisi olur mu?2) Bu hatayı gelecekte yakalayacak bir regresyon testi yaz.
Zayıf prompt / Güçlü prompt
Zayıf: "Kod çalışmıyor, neden?"
Güçlü: "Node 20 / Express. POST /orders, gövdede items boş dizi gelince 500 dönüyor; 400 dönmeliydi. Yığın izi: TypeError: Cannot read properties of undefined (reading '0') — ekte tam trace ve ilgili handler var. Bu belirtiyi açıklayan en olası 3 nedeni ve her birini nasıl test edeceğimi ver. [trace + kod]"
Güçlü sürüm; ortamı, uç noktayı, tetikleyici girdiyi, tam hata tipini ve beklenen davranışı verir. Model artık tahmin değil, analiz yapabilir.
Adım
AI'nın katkısı
Sizin kontrolünüz
Kanıt toplama
Hangi kanıt gerekli, hatırlatır
Kanıtı gerçekten toplar
Hipotez üretme
Olası nedenleri sıralar
Bağlamla önceliklendirir
Hipotez sınama
Test yöntemi önerir
Bizzat çalıştırıp gözlemler
Düzeltme
Yama önerir
Kök nedeni mi çözüyor, doğrular
Regresyon
Test yazar
Testin kırıldığını doğrular
Belirtiyi Değil Kök Nedeni Çözmek
AI, çoğu zaman belirtiyi hızlıca susturan bir yama önerir: bir try/catch ekle, bir null kontrolü koy, hatayı yut. Bu bazen doğru, çoğu zaman tehlikelidir; çünkü asıl neden yerinde durur ve başka bir yerden yeniden patlar. Her düzeltmede kendinize sorun: "Bu, hatanın nedenini mi gideriyor, yoksa görünmez mi kılıyor?" Kök nedeni bulduğunuzda düzeltme genelde daha küçük, daha sağlam ve kalıcı olur.
Dikkat: Bir istisnayı sessizce yutmak (boş catch) hatayı çözmez; yalnızca gizler ve gelecekteki teşhisi imkânsızlaştırır. AI böyle bir "çözüm" önerirse, kök nedeni sorgulamadan kabul etmeyin.
Sık yapılan hatalar
- Kanıtsız soru sormak. Belirsiz cümleler modeli halüsinasyona iter; tam hata, trace ve girdi verin.
- İlk hipoteze kilitlenmek. AI'nın ilk önerisi en olası olmayabilir; en ucuz kontrol edilebilir hipotezle başlayın.
- Belirtiyi yamalayıp kök nedeni atlamak. Susturulan hata geri döner.
- Düzeltmeyi doğrulamadan kapatmak. Hatanın gerçekten kaybolduğunu üretim benzeri koşulda görün.
- Regresyon testi yazmamak. Test eklenmezse aynı hata ilerleyen sürümlerde sessizce geri gelir.
Özetle
Debugging'de AI'nın gücü, ona verdiğiniz kanıtla doğru orantılıdır: tam hata mesajı, yığın izi, tetikleyen girdi ve beklenen davranış olmadan model yalnızca tahmin yürütür. Disiplinli akış — belirtiyi netleştir, kanıt topla, hipotez üret, en ucuz kontrolle sına, kök nedeni düzelt, doğrula ve regresyon testi ekle — hatayı hem hızlı hem kalıcı biçimde kapatır. AI hipotez üreticisidir; hatanın gerçekten çözüldüğüne karar veren sizsiniz.
Uygulama görevi
Yakın zamanda karşılaştığınız gerçek bir hatayı seçin (ya da bir test hatasını yeniden üretin). Önce "en küçük yeniden üretim" adımını uygulayın; hatayı tetikleyen en küçük kod ve girdiyi çıkarın. Sonra "kanıt temelli hipotez üretimi" şablonuyla AI'dan 3 olası neden ve test yöntemi alın. En ucuz hipotezi kendiniz sınayıp kök nedeni bulun, düzeltin ve son olarak bu hatayı gelecekte yakalayacak bir regresyon testi yazıp testin gerçekten kırıldığını doğrulayın.
Kontrol listesi
- [ ] Hatayı AI'ya taşımadan önce en küçük yeniden üretilebilir örneğe indiriyorum.
- [ ] Prompt'a tam hata mesajı, yığın izi, girdi ve beklenen davranışı ekliyorum.
- [ ] Tek hipoteze kilitlenmeden en ucuz kontrol edilebilir olanla başlıyorum.
- [ ] Belirtiyi yamalamak yerine kök nedeni çözdüğümü doğruluyorum.
- [ ] Düzeltmenin hatayı gerçekten giderdiğini gözlemliyorum.
- [ ] Her çözülen hata için bir regresyon testi ekliyorum.