Önceki yazımızda bug kavramının ne olduğundan ve ortaya çıkış hikayesinden bahsetmiştik. (Buraya tıklayarak Bug isimli yazıma ulaşabilirsiniz.) Bug bilgisayar mühendisliğindeki anlamıyla kaynak kodundaki; yani C, Java, Python gibi programlama dillerinde yazdığımız kodun barındırdığı hatalardı. Bu yazımızda ise oluşan hatayı(bugu) ayıklama, ifade etme, yazılan programı daha kusursuz hale getirmek için yol gösterme anlamlarına gelen ‘debugging‘ i Türkçe’ye çevrilmiş en kısa hali ile hata ayıklamayı sizlerle birlikte anlamaya ve anlatmaya çalışaca

Debugging bilgisayar programlamada ya da mühendisliğinde problemin kaynağını ayrıştırmayı ve sonra problemi çözmeyi ya da çözmenin bir yolunu bulmayı amaçlayan çok adımlı bir işleme sürecidir. Debuggingin son adımı düzeltmeyi kontrol etmek ya da geçici bir çözüm üretip çalıştığından emin olmaktır.

Yazılım geliştirmede, debugging süreci bir geliştiricinin bir bilgisayar programındaki bir hata kodunu tespit etmesiyle başlar ve geliştirici hatanın nasıl ortaya çıktığını kavrar. Debugging yazılım geliştirme sürecinin ve bütün yazılım geliştirme hayat döngüsünün vazgeçilmez bir parçasıdır.

Donanım geliştirmede, debugging süreci yüklenmemiş ya da doğru yapılandırılmamış yazılım bileşenlerini arar. Mesela, bir mühendis bir JTAG* bağlantısını entegre olmuş bir devre üzerindeki debug bağlantılarında test edebilir.

Yazılımda hata ayıklama nasıl çalışır

Tipik olarak hata ayıklama süreci kod yazılır yazılmaz başlar ve kodun bir yazılım ürününü şekillendirmek için diğer programlama birimleriyle kombine olması gibi ardışık bölümler halinde devam eder. Büyük bir programda bu binlerce satır koda denk gelir, hata ayıklama süreci unit test, kod yorumları ve pair programming gibi stratejiler kullanarak daha kolay hale getirilebilir.

* JTAG, üretim sonrası baskı devre kartlarının tasarımlarını doğrulamak ve test etmek için bir endüstri standardıdır.

Bugları tanımlamak için kodların loglanışına  bakmak ve kendi başına çalışan bir hata ayıklayıcı tool ya da bir yazılım geliştirme platformunun(IDE*) debug modunu kullanmak faydalı olacaktır. Eğer geliştiricinin standart hata mesajları ile arası iyiyse bu saydığımız yöntemler yararlı olacaktır. Eğer geliştiriciler kod yazarken yeterli yorum yazmıyorsa, hatta eğer kullanıcı en sade kodu yazıyorsa da bu hata ayıklama ile uğraşan biri için bir meydan okuma olabilir.

Bazı durumlarda, kod satırının kendisi anlaması kolay değilken modül problemin açık olduğunu söyler. Böyle bir durumda unit testleri-JUnit ve xUnit gibi, programcıya özel girdi değerleriyle ( input ) özel bir fonksiyonu çalıştırma imkanı veren- yardımcı olabilir.

Standard pratik, bir kırılma noktası ( breakpoint ) düzenlemek ve programı çalışmanın durduğu kırılma noktasına kadar çalıştırmaktır. Bir IDE’nin hata ayıklayıcı bileşeni genellikle şunları sağlar: Programcıya hafızayı ve değişkenleri görme kabiliyeti, programı sonraki kırılma noktasına kadar çalıştırma, sonraki satırdaki işlemi çalıştırma ve bazı durumlarda değişkenlerin değerlerini değiştirme ve hatta çalıştırılacak kod satırının içeriğini değiştirmek.

Hata ayıklamanın önemi

Hata ayıklama bir işletim sistemi, uygulama veya programın neden tuhaf davrandığını belirlemenin önemli bir parçasıdır. Hatta geliştiriciler aynı kodlama standardını kullansa bile, yeni bir yazılım programının hatalara sahip olması daha muhtemeldir. Birçok durumda, yeni bir yazılım programının hata ayıklama süreci programı yazma sürecinden daha uzun olabilir. Devamlı olarak, en çok kullanılan yazılım bileşenlerindeki hatalar bulunur ve düzeltilir.

Hata Ayıklama vs Testing

Hata ayıklama ve testing biribirini tamamlayıcı süreçlerdir. Testingin amacı programın kaynak kodunda bir hata olduğunda ne olduğunu tanımlamaktır. Hata ayıklamanın amacı ise hatanın yerini keşfetmek ve düzeltmektir.

Testing süreci geliştiricinin kodlama hatasının nerede olduğunu bulmasına yardımcı olmaz. Sadece kodlama hatasının program üzerindeki etkilerini gösterir. Hata bir kere tanımlandığında, hata ayıklama geliştiriciye hatanın sebebini bulmasına yardımcı olur. Böylece hata düzeltilir.

*IDE: integrated development environment (tümleşik geliştirme ortamı)

Örnekler

Genel kodlamanın bazı hatalarını içeren örnekler:

  • Sözdizimi hatası (Syntax error)
  • İşleyiş süresi hatası (Runtime Error)
  • Anlamsal hata (Semantic Error)
  • Mantık hatası (Logic Error)
  • Kodlama standardında benimsenmiş kalıplara aldırmama
  • Yanlış fonksiyonu çağırma
  • Yanlış değişken ismini yanlış yerde kullanma
  • Kesinlikle gereken bir değişkeni başlatamama
  • Bir hata geri dönüşü kontrolünü atlama

Hata ayıklama taktikleri

Güvenlik, genel kod hataları ve kod karmaşıklıkları analistlerini de içeren kaynak kodu analistleri hata ayıklamada yardımcı olabilir. Bir t analisti anlaması ve test etmesi zor olacak giriftlikte modüller bulabilir. Diğer hata ayıklama taktikleri şunlardır:

  • Statik analiz – geliştirici kodu programı çalıştırmadan inceler.
  • Baskı(print) hata ayıklama (tracing olarak da bilinir)
  • Uzaktan(remote) hata ayıklama – geliştiricinin hata ayıklayıcıyı farklı bir sistemde çalıştırarak programı debug etmesidir.
  • Otopsi(post-mortem) hata ayıklama – geliştirici programı debug etmeyi sadece program ölümcül istisnalar deneyimlerse durdurur.

Hata ayıklama aletleri (Debugging Tools)

Bir hata ayıklayıcı yazılım geliştirme sürecine işletim sisteminin çeşitli seviyelerinde veya uygulama geliştirmede kodlamadaki hataları tanımlayarak yardım eden bir yazılım aletidir.

Bazı hata ayıklayıcılar hangi kod satırlarının çalıştırılmadığını görmek için bir çalıştırma testini analiz eder. Diğer hata ayıklama aletleri bir programın nasıl görüntüleneceğini ve verilen işletim sisteminde ya da hesaplama aygıtında nasıl davranacağını bir programcının modellemesine izin veren simülatörleri sağlar. 

Birçok açık kaynak hata ayıklayıcı aletler ve scripting language*ler bir IDE’de çalışmaz, yani hata ayıklamaya biraz elle yapılan(manual) bir yaklaşım gerektirirler. Örnek olarak, USB Hata Ayıklama Android bir cihazın Android SDK çalıştıran bir bilgisayarla haberleşmesine olanak tanır.

Bu durumda; geliştirici bir programı loga değerler düşürerek, kod çalıştırmasını yansıtmak için genişletilmiş yazdırma durumları(print statements) oluşturarak veya özel aralıklarda klavye girdileri bekleyerek bir kırılma noktası simüle edecek hard-coded bekleme komutlarını yerleştirerek bir programı debug edebilir.

Hata ayıklamanın zor yanları

Hata ayıklama süreci oldukça zor olabilir ve kod yazmaya başlamaktan daha zor olmasa da çok çalışma gerektirir. Süreç özellikle şu durumlarda zorlayıcı oluyor:

  • Kodlama hatasının olumsuz etkisi açıktır, ama sebebi değildir.
  • Kodlama hatasının olumsuz etkisini yeniden üretip tespit etmek zordur      

–mesela ağ içeriği aşağı inen (drop down) menüler içerdiğinde.

  • Bağlı olunan durumlar açık değildir; yani programın bir bölümündeki bir kodlama hatasını düzeltmek, programın başka bölümlerinde yeni hataların alınmasına sebep olabilir.

Çevirisini yaptığım site: https://searchsoftwarequality.techtarget.com/definition/debugging

*scripting language: kodlama dili(JavaScript, Python ve Ruby gibi)

Leave a Reply

Your email address will not be published. Required fields are marked *