Bir cümlelik özet
Hata ayıklama, bir program ya da robot beklediğimiz gibi çalışmadığında sorunun nerede olduğunu sabırla bulup yalnız o adımı düzeltme işidir.
Neden önemli?
Kod yazan herkes hata yapar. Ben de bir şeyi ilk denememde çalıştıramadığımda önce şaşırıyordum; sonra fark ettim ki asıl beceri hatasız yazmak değil, hatayı bulabilmek. Bir robot yanlış yöne dönerse ya da bir döngü eksik çizerse, bunu “başarısızlık” olarak görmek yerine bir bilmece gibi düşünebiliriz.
Hata ayıklamayı öğrenmek seni programlamada bağımsız yapar. Çünkü artık takıldığında “çalışmıyor, sildim” demek yerine “şurada duruyor, şunu deneyeyim” diyebilirsin. Bu ders, bunu yapmanın sistematik bir yolunu gösteriyor.
Kısa tanım: Hata ayıklama (debugging), bir algoritmadaki veya koddaki hatayı bulup düzeltme sürecidir.
Sistematik hata ayıklama yöntemi
Hata ararken rastgele değişiklik yapmak çoğu zaman işi büyütür. Bunun yerine aşağıdaki sırayı izlemek çok daha güvenli.
- Beklenen sonucu yaz. Program tam olarak ne yapmalıydı? Önce bunu bir cümleyle söyle.
- Gözlemle. Program gerçekte ne yaptı? Ekrana, robota ya da hata mesajına dikkatle bak.
- Küçült. Programı küçük parçalara ayır. Hepsini birden değil, tek bir bölümü düşün.
- Tek tek test et. Her adımı ayrı ayrı çalıştır ve çıktısını kontrol et.
- İlk farkı bul. Beklenenle gerçek sonucun ilk kez ayrıştığı noktayı işaretle.
- Yalnız o adımı değiştir. Tek bir değişiklik yap, tekrar dene. Düzeldiyse harika; düzelmediyse geri al ve başka bir şey dene.
Bu yöntemin kalbi şu: aynı anda tek bir şeyi değiştir. Böylece neyin işe yaradığını gerçekten anlarsın.
Örnek: Kare yerine üçgen çizen döngü
Bir karakterin kare çizmesini istiyoruz ama ekranda üçgen beliriyor.
Beklenen: Dört kenarlı bir kare
Gözlem: Üç kenar çizilip duruyor
Küçült: Sadece tekrar bölümüne bak
İlk fark: Tekrar sayısı 3 yazılmış
Düzeltme: Tekrar sayısını 4 yap
İlk fark “tekrar sayısı” satırında ortaya çıkıyor. O yüzden tüm kodu silmemize gerek yok; sadece o tek satırı düzeltiyoruz.
Örnek: Yanlış eşik değeri
Bir robot, engele 10 santimden yakınken durmalı. Ama robot engele çarpana kadar hiç durmuyor.
Beklenen: Mesafe 10 cm'den küçükse dur
Gözlem: Robot hiç durmuyor
Küçült: Sensör okuması doğru mu? Evet, 8 cm okuyor
İlk fark: Koşulda "> 10" yazılmış, "< 10" olmalıydı
Düzeltme: Karşılaştırmayı düzelt
Burada sensör çalışıyor, motor çalışıyor. Tek sorun karşılaştırmanın yönü. Bunu bulmanın yolu, her parçayı ayrı ayrı kontrol etmekten geçiyor.
Hata türleri
Hatalar hep aynı görünmez. Üç ana türü tanımak, nereye bakacağını bilmeni kolaylaştırır.
Sözdizimi hatası
Yazım kuralına uymayan koddur. Bir noktalı virgülü unutmak, parantezi kapatmamak gibi. Bilgisayar genellikle bunu kendi söyler ve bir hata mesajı verir. Örneğin Python’da iki nokta üst üste unutmak böyle bir hatadır.
Mantık hatası
Kod çalışır, hata mesajı vermez ama yanlış sonucu üretir. Kare yerine üçgen çizen döngü buna örnektir. Bunlar en sinsi hatalardır çünkü bilgisayar sana “burada bir yanlış var” demez; sonucu senin fark etmen gerekir.
Çalışma zamanı hatası
Program başlar, bir süre çalışır, sonra bir noktada durur. Örneğin bir sayıyı sıfıra bölmeye çalışmak ya da olmayan bir dosyayı açmak. Kod yazımı doğrudur ama çalışırken beklenmedik bir durumla karşılaşır.
| Tür | Ne zaman fark edilir | Örnek |
|---|---|---|
| Sözdizimi | Program başlamadan | Kapatılmamış parantez |
| Mantık | Sonuç yanlış olunca | Üçgen çizen kare döngüsü |
| Çalışma zamanı | Çalışırken duruyor | Sıfıra bölme |
Robotikte hata nereden gelir?
Robotlarda bir sorun her zaman koddan kaynaklanmaz. Dört ana kaynağı sırayla kontrol etmek iyi bir alışkanlıktır.
- Kod: Mantık ya da eşik değeri yanlış olabilir.
- Bağlantı: Bir kablo gevşemiş ya da yanlış pine takılmış olabilir.
- Güç: Piller bitmiş ya da voltaj yetersiz olabilir. Motor zayıf dönüyorsa ilk buraya bak.
- Mekanik: Bir tekerlek sıkışmış, bir vida gevşemiş ya da bir parça engele takılmış olabilir.
Ben bir robotta “kod bozuk” diye saatlerce arayıp sonunda sorunun gevşek bir kablo olduğunu görünce şunu öğrendim: önce en basit ve en fiziksel şeyleri kontrol et.
Sözde kod: Robotu adım adım test et
Başla
Beklenen davranışı bir cümleyle yaz
Sensörü tek başına oku ve değeri göster
Eğer sensör değeri mantıklı değilse
bağlantıyı ve gücü kontrol et
Motoru tek başına kısa süre çalıştır
Eğer motor beklendiği gibi dönmüyorsa
güç ve mekanik parçaları kontrol et
Kod mantığını en sona bırak ve tek tek test et
Bitir
Python: Basit bir mantık hatasını görünür kılmak
Kare çizen bir döngüde neyin olduğunu görmek için her adımda print kullanabiliriz. Bu, gözlem yapmanın en kolay yollarından biridir.
kenar_sayisi = 3 # Hata: kare için 4 olmalı
for adim in range(kenar_sayisi):
print("Kenar çiziliyor:", adim + 1)
# ilerle ve 90 derece dön
print("Toplam kenar:", kenar_sayisi)
Çıktıyı görünce “Toplam kenar: 3” yazdığını fark ederiz ve ilk farkı hemen buluruz. kenar_sayisi değerini 4 yapmak sorunu çözer.
Mini uygulama
Aşağıdaki sözde kodda bir mantık hatası var. Bir karakterin beşgen (5 kenar) çizmesi isteniyor.
Başla
6 kez tekrarla
1 adım ilerle
72 derece sağa dön
Bitir
Görev:
- Beklenen sonucu bir cümleyle yaz.
- Bu kod ekranda hangi şekli çizer? (İpucu: 360 ÷ 72 = ?)
- İlk farkın hangi satırda olduğunu göster.
- Yalnız o tek satırı değiştirerek düzelt.
Cevabını bir yetişkine ya da arkadaşına anlat: “Beklenen şuydu, gözlem şuydu, ilk fark şurada, düzeltmem bu.”
Uygulama laboratuvarı: Hata Ayıklama
Hata Ayıklama konusunu kalıcı hâle getirmenin en iyi yolu, kavramı küçük ve ölçülebilir bir göreve dönüştürmektir. Bu çalışmada Sistematik hata ayıklama yöntemi ile Örnek: Yanlış eşik değeri arasındaki ilişkiyi kullanarak açık bir algoritma, sözde kod ve test tablosu hazırlayacaksın. Amaç yalnız sonucun çalışması değil; hangi kararı neden verdiğini, neyi test ettiğini ve hangi durumda tasarımı değiştireceğini açıklayabilmektir.
Görev senaryosu
Şu senaryoyu ele al: okul çantasını eksiksiz hazırlayan bir kontrol düzeni. Dersin ana hedefi “Beklenen ile gerçek sonucu karşılaştırıp hatayı sistemli biçimde bulup düzeltmeyi öğren” olduğuna göre önce problemi tek cümleyle tanımla. Ardından sistemin alacağı girdiyi, uygulayacağı işlemi ve üreteceği çıktıyı ayrı ayrı yaz. Bilmediğin bir ayrıntı varsa onu varsayım olarak işaretle; varsayımı gerçek bilgi gibi kullanma.
- Planla: Başlangıç durumunu, beklenen sonucu ve kullanacağın kavramları yaz.
- En küçük sürümü kur: Yalnız temel davranışı çalıştır; süsleme ve ek özellikleri sonraya bırak.
- Üç test hazırla: Normal bir durum, sınırda bir durum ve hatalı ya da beklenmeyen bir durum seç.
- Sonucu kaydet: Beklenen ile gerçekleşeni yan yana yaz; fark varsa olası nedeni belirt.
- Tek değişiklik yap: Aynı anda birçok şeyi değiştirmek yerine bir kararı düzeltip testi yeniden çalıştır.
Başarı ölçütleri
- Adımlar açık ve tek anlamlı mı?
- Başlangıç ve bitiş koşulu belli mi?
- Normal, sınır ve hatalı durumlar denendi mi?
- Gereksiz tekrar veya adım var mı?
- Başka biri algoritmayı aynı sonuçla uygulayabiliyor mu?
“Hata Ayıklama” çalışmasını bitirdiğinde ürünü bir arkadaşına yalnız bölüm başlıklarıyla anlat. Arkadaşın okul çantasını eksiksiz hazırlayan bir kontrol düzeni senaryosundaki adımları ve karar nedenlerini takip edebiliyorsa anlatım yeterince açıktır. Anlaşılmayan noktayı daha fazla terim ekleyerek değil, Sistematik hata ayıklama yöntemi ve Örnek: Yanlış eşik değeri ilişkisini daha küçük adımlara bölerek düzelt.
Sık yapılan hatalar
Her şeyi silmek
Bir şey çalışmayınca tüm kodu silip baştan yazmak cazip gelir. Ama böyle yaparsan hatanın ne olduğunu asla öğrenemezsin ve aynı hatayı tekrar yaparsın. Önce hatayı bul.
Tek seferde çok değişiklik yapmak
Aynı anda üç şeyi değiştirip yeniden çalıştırırsan, düzeldiğinde hangisinin işe yaradığını bilemezsin. Her seferinde tek bir şey değiştir.
Hata mesajını okumamak
Bilgisayarın verdiği hata mesajı bir ceza değil, bir ipucudur. Genellikle hangi satırda ve ne tür bir sorun olduğunu söyler. Mesajı okumadan çözüm aramak, haritayı açmadan yol sormak gibidir.
Güvenlik notu
Robotik parçalarını (kablo, pil, motor) kontrol ederken sistemin gücünü önce kapat. Gevşek bir kabloyu ya da sıkışmış bir tekerleği güç açıkken düzeltmeye çalışma; parmağın motora kapılabilir ya da kısa devre olabilir. Pil, motor ve kablolarla ilgili tüm kontrolleri bir yetişkinle birlikte yap.
Ders özeti
- Hata ayıklama, hatayı bulup yalnız ilgili adımı düzeltme sürecidir; her şeyi silmek değildir.
- Sistematik yöntem: bekleneni yaz, gözlemle, küçült, tek tek test et, ilk farkı bul, yalnız o adımı değiştir.
- Üç hata türü vardır: sözdizimi, mantık ve çalışma zamanı.
- Robotikte sorun koddan, bağlantıdan, güçten veya mekanikten gelebilir; önce en basit ve fiziksel olanı kontrol et.
- Aynı anda tek bir değişiklik yap ve hata mesajlarını mutlaka oku.
Kontrol soruları
- Hata ayıklama nedir? Bir cümleyle tanımla.
- Sistematik yöntemin altı adımını sırayla yaz.
- Kare yerine üçgen çizen bir döngüdeki hata hangi türdendir: sözdizimi, mantık, yoksa çalışma zamanı mı?
- Bir robotun motoru zayıf dönüyorsa ilk hangi iki kaynağı kontrol edersin?
- “Tek seferde çok değişiklik yapmak” neden kötü bir alışkanlıktır?
Cevaplar
- Bir algoritmadaki veya koddaki hatayı bulup düzeltme sürecidir.
- Beklenen sonucu yaz → gözlemle → küçült → tek tek test et → ilk farkı bul → yalnız o adımı değiştir.
- Mantık hatasıdır. Kod çalışır ve hata mesajı vermez, ama yanlış şekli üretir.
- Güç (piller/voltaj) ve mekanik (sıkışmış parça) kaynaklarını; ayrıca bağlantıyı da kontrol etmek iyi olur.
- Çünkü düzeldiğinde hangi değişikliğin işe yaradığını anlayamazsın; hatayı gerçekten çözmüş sayılmazsın.
Kaynak ve doğrulama notu
“Hata Ayıklama” dersi için doğrulama odağı Sistematik hata ayıklama yöntemi ile Örnek: Yanlış eşik değeri arasındaki ilişkinin örnekler üzerinde tutarlı çalışmasıdır. Bu dersteki algoritmalar, örnek girdiler elle izlenerek ve beklenen çıktılarla karşılaştırılarak doğrulanmıştır. Sözde kod, belirli bir programlama diline bağlı kalmadan düşünme sırasını görünür kılmak için kullanılır.
Sonraki ders
Birden Fazla Çözümü Karşılaştırmak: Aynı problemi çözen farklı algoritmaları hız, adım sayısı ve açıklık açısından karşılaştırmayı öğreneceğiz.