E-bergi'nin bu ayki sayısında, umarım bilgilendirici ve keyif alacağınız bir yazı olacak ilk yazımla karşınızdayım :) Yazımda öncelikle sizlerle hata ayıklamanın bilgisayar bilimindeki yerini paylaştıktan sonra, hata ayıklamanın algoritmasına kabaca göz atacağız.

Hata ayıklama, bir bilgisayar programında ya da elektronik donanımda hataları bulmanın, kusurları düzeltmenin ve bütün bunların sayılarını en aza indirmenin yoludur. Hata ayıklama işlemi sonunda, bu işi uyguladığımız yazılımın ya da donanımın istediğimiz ve beklenen şekilde çalışması gerekir. Yanlız hata ayıklama işleminin çok dikkatli yapılması gerekir; çünkü diğerleriyle sıkı ilişkilendirilmiş bir programdaki küçük bir hatayı düzeltmek, diğer programda hiç beklenmedik bir hata yaratmaya sebep olabilir.

Şimdi bu terimin nasıl kullanılmaya başlandığına bir göz atalım. Aslında bu terimin ortaya çıkışı pek net olmamakla birlikte, ilk olarak, 1945 yılında yayınlanan uçak motorunun test edilmesi konulu bir makalede kullanılmıştı. Bundan sonra Oxford'un sözlüğünde yer almaya başladı; fakat o zamanlar daha bilgisayar terimi olarak kullanılmıyordu. Nitekim bilgisayarlar onlarla ilgili özel terimler kullanılmaya başlanacak kadar yaygın değillerdi. 1950'lerin başında bu terim ilk kez bir yazılımdaki hatayı düzeltme anlamında kullanıldı. Ve bu ilk diğer ilklerden biraz daha farklıydı :) Bu farkı kılan hikaye ise şöyle: Elektromekanik bilgisayarı için 1950'li yıllarda program geliştiren Grace Hopper isimli ünlü kadın programcı, hatalı çalışan programındaki problemi bir türlü bulamıyormuş. Uzun aramalar sonucunda, bilgisayarın röleleri arasında sıkışmış kalmış bir böcek ölüsünün bütün sorunların kaynağı olduğu anlaşılmış. Böylece bug kelimesi bilgisayar bilimine girmiş. Bundan sonra 1952'de yayımlanan ACM (Association for Computing Machinery)'nin üç makalesinde hata ayıklama terimi bilgisayar bilimine uygun kullanıldı. 1963'ten sonra daha da yaygın olmaya başladı. Hatta bu terim CTSS (Compatible Time-Sharing System)'nin el kitabında açıklama yapılmadan yer aldı. O zamandan beri de şu an kullandığımız haliyle bilgisayar biliminde yer almaya başladı.

Böcek temizlemenin tarihsel ve etimolojik anlamını inceledik, gelin şimdi hata ayıklamanın yöntemine bakalım. Hata ayıklama genel olarak karmaşık ve bir o kadar da yorucu bir iş. Fakat, bir programdaki hataları düzeltmek için harcadığımız efor, kullandığımız programlama diline göre değişiyor. Her dilin kendine özgü hata ayıklama programları var. Bu programlar bizim programın gidişatına göz atabilmemizi, istediğimiz yerde durdurup tekrar çalıştırabilmemizi, programa durma noktaları koyabilmemizi, değişkenlerin değerleriyle oynayabilmemizi sağlıyor. Örneğin, Java gibi üst seviye bir dilde hata ayıklamak; kural dışı durumları yakalama ve o durumda ne yapacağını bilme özelliği (exception handling) nedeniyle daha kolayken, C yada Assembly gibi daha eski dillerde hata ayıklama programları bazen bilgisayar hafızasındaki veri kaybına bile neden olabiliyor. Bu yüzden yapmamız gereken işlemleri iyi bilmemiz ve dikkatli olmamız gerekiyor. Yani başka bir deyişle, hata ayıklama işlemini kendimiz yapabilmek için birtakım aşamaları gerçekleştirmeye ihtiyacımız var. Genelleştirilmiş olarak bu aşamalar,

  • Hatayı tanımlamak
  • Hatayı tekrarlamak
  • Hatayı anlamak
  • Hatayı düzeltmektir.

Şimdi bütün aşamaları kısa kısa inceleyelim. İlk aşama hatayı tanımlama aşamasıdır. Kullanacağımız programın ya da elektronik donanımın doğru olarak nasıl çalışması gerektiğini düşünürüz. Çalıştırdıktan sonra eğer işler beklenen şekilde yürümüyorsa, bir problemimiz var demektir. Bu aşamada hatayı bulup, ne olduğunu teşhis etmemiz gerekir. İkinci aşamamız hatayı tekrarlamadır. Yani bulduğumuz hatayı kendimiz normal çalışan ortamlarda yaratmalıyız. Bu aşama hataya sebep olan şeyleri daha rahat analiz edebilmemiz açısından çok önemlidir. Yani, artık hataya giden aşamaları kendimiz rahatlıkla bulabiliriz. Kendimiz üretebildiğimiz bir şeyi düzeltmemiz, tabi ki daha kolaydır. Şimdi sırada hatayı anlama kısmı var. İlk iki aşamadan sonra hatayı iyice öğrenmiş olduk. Bundan sonra hatayı nerede aramamız gerektiğini de biliyoruz. Nereden kaynaklandığını düşünüyorsak, yazılımın ya da donanımın içinde hatayı bulmamız gerekir. Son olarak tek yapmamız gereken şey hatayı düzeltmektir. Artık hatanın yerini, hataya neyin sebep olduğunu bildiğimize göre; düzeltmek çok da zor olmamalıdır. Bütün bu aşamaları izlediğimizde hata ayıklama işlemini tamamlamış oluruz.

Peki hata ayıklama işlemi bize yazılım ve donanım geliştirmenin hangi aşamalarında yardımcı olur? Tek seferde hatasız olarak kod yazmamız, yazılım geliştirmemiz çok da kolay değildir. Mutlaka birtakım problemlerle karşılaşırız. Hataları ayıklama yöntemini kullanarak işimizi daha hızlı bir şekilde bitirebiliriz. Çünkü, yukarıda da bahsettiğim gibi hemen hemen her programlama diline uygun hata ayıklama programları var. Hata ayıklama işlemi için özelleşmiş bu programları kullanarak bu aşamaları çok daha hızlı ve emin adımlarla da yerine getirebiliriz. Bu programlar içinden en yaygın kullanılanı GDB (GNU Project Debugger) olup, bu programın kullanımı hakkında ayrıntılı bilgiyi Ekim 2007 sayımızdaki GDB yazımızda bulabilirsiniz. Uzun uzun kodlar içine gömülmektense, hata ayıklama yöntemiyle direk hatanın olduğu yeri tespit edebiliriz. Bu da bize hem kolaylık sağlar, hem de zamandan tasarruf etmemize yardımcı olur. Ayrıca, düzeltene kadar izlediğimiz aşamalar da yaptığımız işi daha iyi irdelememizi sağlar. Böylece hata sayısını azaltmak ve hata oluştuğunda müdahale edebilmek için gerekli alt yapıyı hazırlamak, yazılım geliştirme aşamasında uygulamamızı daha başarılı kılmakla beraber, yazılım uzmanlığı konusunda deneyimimizi de arttırır.

Bu yazım sizlerle ilk buluşmamdı. Umarım hata ayıklama hakkında yeterince bilgi verebilmişimdir. Gelecek ay tekrar görüşmek üzere, böceksiz programlar :)

Kaynaklar: