Konu Anlatımı
Hata Bulma ve Kod Denetimi
Bir programı yazmak ile o programı ayıklama arasındaki fark ilk bakışta önemsiz görünür. Oysa öğrencilerin en çok zorlandığı iş, hatanın kendisini bulup kök nedeni düzeltmektir. Bu konuda üç hata türünü ayırt etmeyi, hatayı adım adım izleyerek bulmayı ve düzeltilen kodun başka bir yerde sorun çıkarmadığını sınamayı öğreneceğiz.
Konunun çalışma alanı, 4. ünitede öğrendiğimiz diziler ve fonksiyonlardır. Bir dizinin sınırının bir eleman dışına taşması ya da geri değer döndürmeyi unutan bir fonksiyon, tipik hata kaynaklarıdır. Kod denetimi ise programcının kendi yazdığı kodu yabancı bir gözle inceleme ve sınama yöntemleriyle doğrulama süresidir.
1. Ne Öğreneceğiz ve Ön Bilgi
Ön bilgi olarak değişken, veri tipi, koşul ve döngü yapılarını, ayrıca dizilerin sıfırdan başlayan indekslerle tutulduğunu ve fonksiyonların geri değer döndürdüğünü bilmemiz gerekir. Konuya geçmeden önce kendinize şu soruları sorun: Program neden durur? Program neden farklı bir sonuç üretir? Program neden beklenenden yavaş çalışır? Bu soruların cevabı, hata türlerini birbirinden ayırmanın anahtarıdır.
Bu konunun sonunda bir programı denetim altına almayı, bulunan hatada yalnızca belirtiyi değil nedeni düzeltebilmeyi ve düzeltme sonrasında tüm sınamaları yeniden yürütebilmeyi hedefliyoruz. Denetim araçları bize programın içinde adım adım yürüme ve değişkenleri izleme imkânı verir.
2. Temel Kavramlar ve Sınıflandırma
Programcılar hatayı üç ana başlıkta toplar. Sözdizimi hatası, yazım kurallarına uyulmamasıdır; eksik parantez, eksik noktalama veya tanımsız bir komut derleyici tarafından yakalanır ve program hiç çalıştırılmaz. Çalışma zamanı hatası ise program derlenip çalışmaya başladıktan sonra ortaya çıkar; sıfıra bölme, dizi sınırının aşılması ya da tür uyuşmazlığı bu türdendir. Mantık hatası hiçbir aşamada programı durdurmaz, yalnızca hesaplanan sonucun beklenenden sapmasına yol açar.
Belirti ile neden ayrımı bu konunun ikinci temel kavramıdır. Belirti, ekranda gördüğümüz sonuçtur; neden ise o sonucu doğuran karardır. Bir fonksiyon yanlış değer döndürdüğü için ekranda hatalı bilgi görünür, ancak asıl düzeltilmesi gereken yer o değerin hesaplandığı satırdır. Kapsam hatası, sıra hatası ve sınır hatası da bu üç ana sınıfın altında değerlendirilir.
- Sözdizimi hatası derleme aşamasında bulunur, çalıştırma hiç başlamaz.
- Çalışma zamanı hatası program çalışırken durur ve hata mesajı üretir.
- Mantık hatası programı durdurmaz, yalnızca sonucu beklenenden sapar.
- Kapsam hatası, değişkenin kullanıldığı yerde tanımlı olmamasıdır.
- Sıra hatası, işlemlerin yanlış sırada yapılmasıyla oluşur.
3. Basit Örnek ve Adım Adım Çözüm
Bir dizideki sayıların toplamını hesaplayan döngüde sayaç, dizi uzunluğu kadar artıyorsa son turda dizinin dışındaki bir konuma erişilir. Bu hatanın bulunması için izleme tablosu hazırlayalım. Tabloyu doldururken son sütunun boş kaldığını ve toplamın beklenmedik büyüdüğünü görürüz.
- Adım 1: Her tur için sayaç değerini, dizi elemanını ve toplamın yeni değerini tabloya yazın.
- Adım 2: Doldurduğunuz tabloya bakın ve hangi turda değerlerin beklentiyi bozduğunu bulun.
- Adım 3: Hatanın döngünün üst sınırında olduğunu tespit edin, sınırı uzunluk eksi bir yapın.
- Adım 4: Tabloyu yeniden doldurun ve toplamın beklendiği gibi çıktığını doğrulayın.
Düzeltme sonrası toplam beklendiği gibi çıkar. Dikkat edilecek nokta şudur: sınırı yalnızca bu döngüde değiştirmek yeterli olmayabilir. Aynı desen programın başka yerlerinde de varsa kök neden ortadan kaldırılmalıdır; aksi hâlde hata başka bir ekranda yeniden belirir.
4. İleri Örnek ve Saha Uygulaması
Bir atölyede üretilen parçaların sayısını tutan bir program düşünelim. Parça sayacı her üretimde bir artırılır, gün sonunda toplam ekrana yazdırılır. Programcı sayacı artırma satırını koşulun altına yazdığı için sayaç hiç artmaz ve toplam hep sıfır kalır. Program çalışır, hata mesajı vermez, yalnızca yanlış rapor üretir. Bu tam anlamıyla bir mantık hatasıdır.
Saha uygulamasında denetim şu sırayla yürütülür: önce beklenen sonuç kâğıda yazılır, sonra program çalıştırılır ve sonuçlar karşılaştırılır. Fark çıktığında sayaç değeri her üretim adımında yazdırılarak hatanın hangi adımda oluştuğu bulunur. Sonuçta düzeltme yapılır ve önceki tüm sınamalar yeniden yürütülür.
5. Karşılaştırma Tablosu ve Denetim
Aşağıdaki tablolar hata türlerinin oluşma anını ve denetimde kullanılan yöntemleri özetler. Tabloyu kendiniz doldurarak sınav hazırlığı yapabilirsiniz.
| Hata türü | Oluşma anı | Programın durumu | Fark etme yolu |
|---|
| Sözdizimi hatası | Derleme sırasında | Program başlamaz | Derleyici kuralı ve satırı bildirir |
| Çalışma zamanı hatası | Çalışma sırasında | Program durur | Hata mesajı ve çağrı adresi |
| Mantık hatası | Çalışma sırasında | Program sürer | Yalnızca sınama sonucuyla |
| Kapsam hatası | Derleme sırasında | Program başlamaz | Tanımsız değişken uyarısı |
| Sıra hatası | Çalışma sırasında | Program sürer | Sonuç beklenenden farklı çıkar |
| Denetim yöntemi | Ne yapar | Sağladığı yarar |
|---|
| Adım adım yürütme | Programı satır satır çalıştırır | Hatalı adım doğrudan görülür |
| Değişken izleme | Değişkenlerin anlık değerini gösterir | Kök neden hızla saptanır |
| İzleme tablosu | Değişken değerlerini kâğıda yazar | Program dışında da izlenebilir |
| Değer yazdırma | Ara değerleri ekrana basar | Ek araç gerekmez |
| Kod okuma | Blokları satır satır inceler | Dikkat hataları yakalanır |
| Yeniden sınama | Tüm sınamaları tekrar yürütür | Yan etkiler ortaya çıkar |
Denetimde sıra önemlidir. Önce hatanın oluştuğu kapsamı daraltmak, sonra kök nedeni araştırmak, en sonra düzeltmeyi yapmak gerekir. Bu sırayı tersine çevirmek, saatler harcamak demektir.
6. Sık Yapılan Hatalar, Özet ve Kendini Dene
Sık yapılan ilk hata, ekranda görülen belirtiyi doğrudan düzeltmeye çalışmaktır. İkinci hata, sözdizimi hatası ile mantık hatasını aynı sanmaktır. Üçüncü hata ise düzeltme sonrası sınamaları tekrarlamamaktır. Bu üç alışkanlıktan vazgeçildiğinde hata bulma süresi belirgin biçimde kısalır.
- Hatanın satırı ile kök nedenin satırı çoğu zaman farklı yerlerdedir.
- Dizi sınırı denetimi, yeni yazılan her döngüde mutlaka bulunmalıdır.
- Fonksiyonun her yolunda geri değer döndürdüğünden emin olunmalıdır.
- Düzeltilen kodun önceki sınamalarla birlikte çalıştığı doğrulanmalıdır.
- Bulunan her hata için kısa bir kayıt tutulmalıdır.
Özetle hata bulma, belirtiden yola çıkıp kök nedene ulaşmayı gerektiren bir süreçtir. Hata türünü doğru tanımak arama alanını yarıya indirir. Değişken değerlerini yazdırmak ve adım adım yürümek, kök nedeni bulmanın en hızlı yoludur. Düzeltme sonrası yeniden sınama ise çözümün kalıcı olmasını sağlar.
Kendini dene: elindeki bir programda hatanın çıktısını önce kâğıda yaz, sonra programı çalıştırıp karşılaştır. Ardından hatanın oluştuğu adımı bul ve yalnızca o adımda değişken değerlerini yazdırarak izlemeyi sürdür.