Yaşar Safkan

Her konuda yazılar...

  • Ağırından
  • Hafifinden
  • Kısa Kısa
  • Google
  • Teknik
    • Programlama Taosu
  • Trafik
    • Park Başarıları
  • Üniversite
  • Link
Buradasınız : Ana Sayfa / Teknik / Hataları Halının Altına Süpürmek…

Hataları Halının Altına Süpürmek…

25/08/2015 By Yaşar Safkan 1 Yorum

O kadar zamandır o kadar çok defa kullandım ki, “Happy Path Programcılığı” lafını bir yerden mi duydum, kendim mi uydurdum hatırlamıyorum. Boğaziçi Tarzancası konuşma alışkanlığını her ne kadar yenmeye çalışsam da, tam olmuyor görüleceği üzere. Türkçe olarak, “Mutlu Yol Programcılığı” diyebiliriz buna.

Nedir bu “Mutlu Yol Programcılığı”? (Bundan sonra MYP diyelim adına, bakarsın insanlar kullanır, tutar…)

MYP, kod yazarken, olası hata durumlarından hiçbirinin oluşmayacağını varsayarak, her şeyin mükemmel çalışacağını düşünmek demektir.

Bu bir hastalıktır. Bunun yayılması, işin sonrasında, test ve hata ayıklama aşamalarında işimizi inanılmaz zor bir hale getirir.

Hastalığın semptomları nelerdir?

– Programa, dışarıdan (dosya, kullanıcı, ağ…) üzerinden herhangi bir veri girişi olduğunda, bunun geçerli olup olmadığının denetlenmemesi. Mesela, kullanıcıya sayı girmesini söyledik. Girdiği şeyin gerçekten sayı olup olmadığını kontrol etmedik.

– Hata alabilen bir sistem fonksiyonu veya metodu çağırdığımızda, hata durumunu ciddiye almamak. Özel olarak, exception atan dillerde, atılan exception’ı “öylesine” yakalamak.

– Kütüphane kodu veya o şekilde kullanılacak bir kod parçasında, dış parametrelerin (özel olarak “public” metodların parametreleri) kontrol edilmeden kullanılması.

Mesela, sıklıkla görülen bir örnek:

BufferedReader reader = null;

try {

    reader = new BufferedReader(new File(“hede.txt”));

} catch (Exception e) {

}

…

Yazma anını izlerseniz, olay şöyle gelişir: Önce:

BufferedReader reader = new BufferedReader(new File(“hede.txt”));

Yazılır. Sonra, bu satır hata verince, etrafına try-catch konur. Sonra, dışarıda kullanabilmek için reader tanımı dışarı alınır. Sonra oluşan “bunun değeri bazen belirsiz oluyor” hatasından kaçmak için, “= null” kısmı eklenir.

Oldu mu? Evet, mükemmel bir MYP oldu.

Böyle bir kod parçasını görüp de, “yapma bunu böyle” derseniz, önünüze gelecek ilk tepki, “ya ne yapayım”dır. Neyse ki bunun cevabı var!

MYP’nin en kötü tehlikesi, oluşan hata durumu, halının altına süprüldüğü için, programın alakasız bir yerde, alakasız bir hatayla çatlayacak olmasıdır. Sonrasında, hatayı ayıklamak için, “lan bu hata nasıl oluyor da oluyor” diye kodu satır satır didiklemek gerekir. Izdırap.

MYP’den kaçınmak için, bazı prensipleri şöyle sıralayabiliriz:

  • Her hatayı, oluştuğu yerde try/catch ile bertaraf etmeye çalışmayın. İlk refleks olarak, try/catch eklemek yerine, metoda “throws” eklemek daha iyi bir tepkidir. Elbette ilk refleksler, durumu doğru anlayıp, doğru şeyi yapmanın yerini tutmaz.
  • Eğer bir kütüphane veya yardımcı kod içindeyseniz, ne amaçla kullanılacağı belli olmadığından, oluşan hataları sizi çağıran koda göndermek daha doğru harekettir. Çünkü, oluşan problemi düzeltecek bir eylemi, sizin yapmanız mümkün değildir.
  • Eğer, kavramsal olarak bir iş yapan bir kod içindeyseniz, kendinize özel bir exception tanımlamak ve yakaladığınız exception’ları kendi exception objeniz ile sarıp atmak, daha mantıklı olabilir.
  • Hata attığınız zaman, hata mesajına olağanüstü önem verin. Olağanüstü derken, şaka yapmıyorum. Hata mesajını okuyanın, hatanın ne olduğunu anlamak için, kodu açıp bakmasına gerek kalmıyorsa veya debug modunda kodu yeniden çalıştırması gerekmiyorsa, hata mesajınız yeterince iyidir. Yani, mesela hatayla ilgili değişkenlerin değerlerini hata mesajının içine yazmak mantıklı bir harekettir.
  • “Eğer bu hata oluşuyorsa, kodlama hatası vardır” dediğiniz durumlarda, (Java yazıyorsanız) RuntimeException (tercihan bir türevini) atın.
  • Kodun hata vermesi, kendiliğinden kötü bir şey değildir. Eğer hata verecekseniz, mümkün olan en erken yerde ve en korkunç şekilde verin. (Frenkler buna “fail fast” diyorlar.)
  • Bir try/catch’de, catch’in içi asla boş olmamalıdır. Yakalanan hata, en azından loglanmalıdır. Eğer, “bu try/catch formalite, bu hatanın oluşmasına imkan yok” diyorsanız, (ki böyle durumlar vardır — mesela Java’da Charset.forName(“UTF-8”) exception atar gibi görünür, ama atamaz [normal şartlar altında]) o zaman bile bir RuntimeException ile sarmalayıp yakaladığınız exception’ı atın. Tut ki oldu, hep beraber şaşırırız.
  • Eğer ilgili hata durumunda, artık herhangi bir kodun çalışmasının bir anlamı kalmadı veya ne yapacağı belirsiz hale geldiyse, o zaman Error atmak caizdir. (Bunu normal exception tutan şeyler tutmaz. Program muhtemelen ölür.) Mesela JVM’in attığı OutOfMemoryError bir error’dur… Yaratmaya çalıştığınız obje yaratılmayınca kimbilir ne olur?

İşin gerçeği şu ki, MYP ile yazacağınız kod miktarı, tüm hata durumlarını doğru şekilde ele aldığınız durumda yazacağınız kod miktarının yarısından azdır. Ancak, MYP ile hata ayıklamada harcayacağınız süre, düzgün hata ele alımıyla yazılımış kodun iki katından kesin fazla, benim kestirimime göre en azından dört katı olacaktır.

Kendinize ve takım arkadaşlarınıza acı çektirmeyin.

Hataları halının altına süpürmeyin.

Yapmaaaayıııııın öyleeeeeee!!!!

VN:F [1.9.13_1145]
please wait...
Rating: 5.0/5 (2 votes cast)
Hataları Halının Altına Süpürmek..., 5.0 out of 5 based on 2 ratings
3 I like This

Bunu paylaş:

  • Twitter üzerinde paylaşmak için tıklayın (Yeni pencerede açılır)
  • Facebook'ta paylaşmak için tıklayın (Yeni pencerede açılır)
  • Linkedln üzerinden paylaşmak için tıklayın (Yeni pencerede açılır)
  • WhatsApp'ta paylaşmak için tıklayın (Yeni pencerede açılır)
  • Arkadaşınıza e-posta ile bağlantı göndermek için tıklayın (Yeni pencerede açılır)

İlgili

Kategori:Teknik

Yorumlar

  1. Gökmen Görgen der ki

    26/08/2015 ile 00:08

    For döngüsü içinde try – except kullanıp, exceptionları continue ile pas geçmek caiz midir hocam?

    VA:F [1.9.13_1145]
    please wait...
    Rating: 5.0/5 (2 votes cast)

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Arama

Popüler Yazılar

  • Güneşin Altında Her Şey Boş
  • Agile: Türk Kaşığıyla Amerikan Çikolatası

Beni takip etmek için

  • Email
  • LinkedIn
  • Medium
  • Twitter
  • YouTube

Son çıkanlar

  • Kitaplar, Kitaplar, Kitaplar… 16/07/2021
  • İnsana İnsan Emanet Etmek 23/04/2021
  • Planlama, Proje Yönetimi, Risk Yönetimi 23/04/2021
  • Kafamdaki Bölmeler 23/04/2021
  • “Zor” Merakı 17/04/2021

Son yorumlar

  • Yazılım yazılsa yazılsa kaç saat yazılır? için Emir
  • CV Nasıl Yazılır? Nasıl Yazılmaz? için Bahar
  • Kafamdaki Bölmeler için paslanmaz çelik evye bataryası
  • 8401 Makinayı Nasıl Kapattım? için Salih
  • 8401 Makinayı Nasıl Kapattım? için Tolga

En çok ziyaret edilenler

  • CV Nasıl Yazılır? Nasıl Yazılmaz? Ne belalı iştir şu CV yazmak. Özellikle ilkini. Yalnız, nedense… (73.217)
  • Neden Türkiye’de Hasan Beyin Takımı Olur Da,… Böyle yazı başlığı mı olur? Başlıkları vurucu yapınca daha çok… (12.515)
  • Maliyet Hesabı Maliyet hesabı... Düşündünüz mü hiç, ne kadar önemli bir meseledir… (9.168)
  • Yazılım Kariyerinin Başındakilere Ukalalıklar… İlk defa Google'da duyduğum bir laf var: "Haklıysan ukalalık değildir."… (8.841)
  • 8401 Makinayı Nasıl Kapattım? Artık on yılı geçti, ama Google hikayeleri askerlik hikayeleri gibi… (6.427)
  • Başlatmayın Erken Kalkmanızdan! Gördüğünüz yazı başlığı, ilk düşündüğüm başlığın, üç kademe efendileştirilmiş hali.… (6.150)
  • Agile: Türk Kaşığıyla Amerikan Çikolatası Doğru, onun aslı çikolata değil. Hem çikolata kaşıkla yenmez. Nutella… (6.093)
  • Meslek Seçimi Hikayesi "Meslek sahibi olana meslek seçmesi kolay" dememişler, ben olsam derdim.… (5.223)
  • Tartışmak Nedir, Nasıl Olur? "Tartışmak", kelime kökeni olarak açık şekilde "tart"maktan türemiş bir kelimedir.… (4.598)
  • Yöneticilik ve Liderlik Üzerine Bunların üzerine yazıp çizen çok... Bir ukalalık da ben edeyim,… (4.257)
  • Arşiv

Sosyal Medya’da

Follow Us on TwitterFollow Us on LinkedInFollow Us on YouTube

Bloga e-posta ile abone ol

Bu bloga abone olmak ve e-posta ile bildirimler almak için e-posta adresinizi girin.

MOST LIKED POSTS

  • Neden Türkiye'de Hasan Beyin Takımı Olur Da, Beyin Takımı Olmaz? (55)
  • Yazılım Kariyerinin Başındakilere Ukalalıklar... (40)
  • 8401 Makinayı Nasıl Kapattım? (34)
  • CV Nasıl Yazılır? Nasıl Yazılmaz? (30)
  • Öğrenemediklerim... (30)

Copyright © 2006-2017 · News Pro Theme On Genesis Framework · WordPress