Hata Ayıklama Taktikleri

Hatice Surumlu
5 min readMay 29, 2023

Hata ayıklama (debugging), yazılımın amaçlandığı şekilde çalışması için sorunları bulma ve düzeltme sürecidir.

Bir sistemde hata ayıklama yaparken, ilk adım sistemin nasıl çalıştığına dair inançlarınızın doğru olamayabileceğini kabul etmektir. Eğer her şey düşündüğünüz gibi olsaydı, kodunuz her zaman doğru çalışırdı; ancak bu durumun her zaman böyle olmadığını biliyoruz.

Eğer bunu kabullenmezseniz, bazı hataları bulmak için saatler harcamanız gerekebilir. 3 saat hata ayıklama yapmak yerine dökümanları okumak sadece 5 dakikanızı alabilir ve zamanınızı daha verimli bir şekilde kullanmanızı sağlayabilirsiniz.

Illustration credit: Forrest Brazeal

Kodunuzda her zaman hatalar olacaktır ve bunları mümkün olan en kısa sürede bulup düzeltmeniz gerekir. Sizinle, benim de işime yarayan birkaç (yaygın) hata ayıklama tekniklerini paylaşacağım.

Genellikle hata ayıklama aşamalarımız aşağıdaki gibidir:

  • Bu olamaz !
  • Benim bilgisayarımda çalışmıyor !
  • Bu olmamalı !
  • Bu hata neden oluyor ?
  • Anladım , düzeldi !
  • Hata nasıl düzeldi ?

Şimdi gelin, hata ayıklamanın zor olduğu hatalar üzerinde çalışmak için özel olarak neler yapabiliriz onları inceleyelim.

Yürüyüşe Çık

Kodda hata ayıklamak için kullanacağınız en iyi araçlardan biri 10–15 dakikalık yürüyüşe çıkmaktır.

Hayal kırıklığına uğradığınızı, zor bir soruna takılıp kaldığınızı veya boşa kürek çektiğinizi fark ederseniz, hemen ara verin.

5 ila 15 dakika arasında yapacağınız bir yürüyüş , enerjinizi yenilemeye ve fizyolojik durumunuzu iyileştirmeye yardımcı olacaktır.

Bazen ihtiyacımız olan tek şey, sorunlarımızı çözmemizi sağlayacak minik bir bakış açısı değişikliğidir.

Lastik Ördek

Sorununuzu başka birine anlatın. Önemli olan kime anlattığınız değil, kendinize de anlatabilirsiniz. Esas olan problemi kendinize açıklamış olmanızdır.

Genelde birine ders anlatırkan, konuyla ilgili varsayımlarımızda sıklıkla tutarsızlıklar fark ederiz ve konu hakkında yeni bir bakış açısı edinmiş oluruz.

Kernighan ve Pike’ın dediği gibi:

Bazen biri ile iletişim kurduğunuzda utanarak “Önemli değil , sorunu gördüm, rahatsız ettiğim için özür dilerim” gibi birkaç cümleyle yetinebilirsiniz. Eğer bir insanla konuşmak yerine , bir kauçuk ördek gibi cansız nesnelerle konuşmak size daha kolay geliyorsa onlarla iletişim kurabilirsiniz.

“Lastik ördek” terimi, iş arkadaşlarınızdan birinden yardım istemeden önce sorununuzu bir lastik ördeğe açıklama veya “hata ayıklama” eylemini ifade eder.

Bazı geliştiriciler kendisinden tavsiye istendiğinde “Problemini önce bir lastik ördeğe açıkla” derler; bu birçok sorunu çözmek için iyi bir yoldur.

Hata Mesajını Tam Olarak Okuyun

Hata ayıklama sırasında gözden kaçan başka bir şey, hata mesajını okumaktır. Araçlarınız genellikle size hata hakkında pek çok bilgi verir ve bu mesajlar, düşündüğünüzden çok daha yararlı olabilir.

Hata mesajında, kodunuzdaki hangi yerin hatalı olduğunu gösteren ipuçlarını arayın.

Örneğin, fonksiyon veya değişken isimlendirmede bir yazım hatanız bulunuyorsa, bir hatanın var olduğunu varsaymak yerine hemen düzeltin.

Dokümanları Okuyun

Hata ayıklamaya çalışmadan önce dokümanları okuyun.

Bu herkes tarafından bilinen bir şey ama çoğu zaman gözden kaçıyor. İnsanların yaptıkları bir şeyin neden işe yaramadığını anlamak için boşa kürek çektiklerini gördüm, halbuki yapmaları gereken tek şey belgeleri okumak ve bir işlevi veya yöntemi yanlış kullandıklarını fark etmek.

Hata ayıklarken dokümanları okuyun

Bu aynı zamanda oldukça açıklayıcıdır — sıkışmışsanız ve cevapları başka nerede arayacağınızı bilmiyorsanız, kodunuzun belgelerini tekrar okumayı deneyin. Bazen bir hata gibi görünen şey aslında sizin tarafınızdan bir yanlış anlaşılmaya (veya belki de dokümantasyonda bir hataya) dönüşebilir.

Hata ayıklamayı denedikten sonra dokümanları okuyun

Sadece işe yaramadığından, tüm bu dökümanların içinde gizlenmiş yararlı bir bilginin olmadığını söyleyemeyiz. Yeni gözlerle hatanıza tekrar bakmadan önce hatadan uzaklaşıp kendinize biraz zaman ayırın . Biraz zaman geçtikten sonra , sorununuzu çözmeye en iyi nasıl yaklaşacağınız konusunda yeni fikirler edinebilirsiniz.

Aynı Kodu Tekrar Çalıştırın

Aralıklı olarak meydana gelen bir sorununuz varsa , kodu tekrar çalıştırmak sorunu bulmanıza yardımcı olabilir. Aşağıdaki durumları bulmaya çalışıyorsanız kodu tekrar çalıştırmak sizin için yararlı olabilir:

✔ Zamanlama sorunu

✔ Yarış koşulu (Race condition)

✔ Deterministik olmayan yürütmeye sahip kod

✔ Ağ gecikmesi gibi dış etkenlerden etkilenen kod

Aralıklı gibi görünmeyen ancak arada bir sorun oluşturan bir probleminizi varsa, kodu birden fazla çalıştırmak ve çalıştırmalar arasında farkları kontrol etmek en iyisidir.

Aynı kodu tekrar çalıştırmayı denerken , defalarca denenmiş ve doğru yaklaşımlar içeren “The Practice Of Programming” yazısı size yardımcı olacaktır.

Sorunu tekrarlabilir hale getirin.

Hata ayıklarken , hatanın her seferinde aynı koşullar altında oluştuğundan emin olarak başlayın. Hatayı yeniden oluşturmak için attığınız adımları otomatikleştiren bir tarif yazın.

Bir hatayı tekrar üretmeyi kolaylaştırmanın bir yolu,sorunun nasıl ve nerede meydana geldiğini anlamak yerine hatayı bile isteye oluşturabilmektir.

Böl ve Fethet

Orijinal hata ile aynı hatayı tetikleyen daha küçük, daha odaklı bir kod kopyası oluşturabilir misiniz?

Hatanın ortadan kalkmasını sağlayan değişiklikleri belirleyin ve her bir değişikliği test ederek hatanın düzelip düzelmediğini kontrol edin.

Başarısızlıkların numerolojisini inceleyin

Bazen başarılı ve başarısız kod farkları kayıtlarının numerolojisini analiz etmek, aradığımızı bulmamıza yardımcı olabilir.

Hatanın sebebi bir yazım yanlışı, eksik bir noktalı virgül veya başka basit bir kusur olabilir.

Google Arama Sonuçlarının ilk Sayfası / StackOverflow

Hata ayıkladığınız sorununuz için arama sonuçlarının ilk sayfası çok yardımcı olabilir. Genellikle aynı sorunla karşılaşan ve sorunu çözen veya en azından hataya nasıl yaklaşılacağı konusunda fikirleri olan başka insanlar bulabilirsiniz. StackOverflow’da hatanızla ilgili sorulara göz atmanız da iyi bir fikir.

Kayıt Alma (Loglama)

Geliştiriciler, kod yürütme sırasında değerleri kontrol etmek için genellikle kodlarına geçici loglama ifadeleri (ör: console.log(), print) ekler. Bu, kodunuzun beklediğiniz gibi davranıp davranmadığını görmek için iyi bir yoldur. Bu loglama ifadelerini, kod satırları arasındaki değişkenlerin değerlerini kontrol etmek için de kullanabilirsiniz.

Ayrıca kodunuzun patladığı (veya bir hatanın oluştuğu ) yere ulaşmak için çağrılan işlevlerin bir listesi olan yığın(stack) izlerine başvurmak mantıklı olabilir. Kodunuzda ne olduğunu ve nasıl düzelteceğinizi anlamaya yardımcı olması için stack trace( yığın izleme )kullanabilirsiniz .

İşte Chrome DevTools hata ayıklayıcısındaki CallStack (çağrı yığını):

Karmaşık veri yapılarıyla çalışan bir web geliştiricisiyseniz, verilerin çok daha güzel bir görsel temsili için console.log() yerine console.table() kullanabilirsiniz:

SONUÇ

Hatanızı ayıklamak için birden fazla geçerli yol bulunabilir. Burada kilit nokta sizin ve projeniz için en uygun olan yolu seçmek olacaktır.

Kendinize doğru soruları sorun ve hangi yöntemi kullanacağınızı daha hızlı bulun.

Hata ayıklarken önce hatanızı tanımlayın ve kendinize hatanız hakkında sorular sorun.

  • Bu kodun amacı nedir ?
  • Bu kod tam olarak ne yapıyor ?
  • Kodda bulduğunuz sorunlar nelerdir ?
  • Daha önceden böyle bir sorunla karşılaşmış mıydınız?
  • (karşılaştıysanız) En son bu sorunu nasıl çözmüştünüz?
  • Sizce, bu hataya neler sebep olmuş olabilir?

İşte bu soruları sormak hataların sebebine karşı en azından bir önsezi oluşturmanıza yardımcı olacaktır ve bu sayede hatalarınızı çözme sürecinde işinizi kolaylaştıracaktır.

DİPNOT:

[¹] Bu yazı, çeviri bir yazıdır. Debugging Tactics [Addy Osmani] tarafından addyosmani.com isimli kaynakta yayınlanmıştır.

Addy Osmani is a Software Engineer at Google working on the Chrome web browser. He is the author of books like Image Optimization and Learning JavaScript Design Patterns. He has also written a number of open-source projects like Yeoman, TodoMVC, Quicklink and Material Design Lite.

--

--