Ders-5 Clean Code – Savunmacı Programlama

Savunmacı Programlama

Savunmacı programlama programcıya pek çok şeyin hatalı olabileceğini akılda tutarak kodunu geliştirmesini tavsiye eder. Savunmacı programlamanın temel amacı, programın güvenirliğini (reliability) sağlamaktır. Güvenilirlik, programın olabileceğince hatadan arınmış olmasaı ve bu sayede çalışmaya devam etmesidir. Bu sebeple savunmacı programlama, çalışma sırasında oluşabilecek ve programın çalışmasına engel olacak herhangi istenmeyen bir duruma karşı önleyici tedbirler almayı amaçlar.

Kodu hatadan %100 arındıramayız ancak uzun süre hata almadan çalışabiliyorsa pratikte hatasız kod diyebiliriz.

Kodlama yaparken bizim korunmamız gereken veya karşılık olarak tedbir almamız gereken yalnızca kullanıcılar ve hataları değil aynı zamanda programramcılara – geliştiricilere karşıda korunmamız gerekip onların yapabilecekleri hatalara karşı da önlem mekanizmaları geliştirmemiz gerekmektedir. Hatta programcı, ileride kendisi için bile kodunu savunmacı bir şekilde yazmalıdır.

Önleme ve Yönetme

Savunmacı programlamanın tedbirleri iki türlü olabilir:

1- Geliştirme sırasında alınan önlemler ve tabii olarak yapılan testler ile istenen durumun oluşturmayacağından emin olmak. Bu amaçla assertion mekanizmaları kullanılır.

2- Çalışma zamanınd aolabilecek durumları öngörmek. Bu amaçla sıra dışı durum yönetimi (exception handling) yapılır.

Tekniklerin ilki önlemeye ikincisi ise yönetmeye odaklanır.

Dolayısıyla bazı tedbşrler geliştirme sürecinde alınır ve istenmeyen durumun gerçekleşmeyeceğinden emin olunduktan sonra geliştirilen kod canlı ortama aktarılır.

Örneğin;

  • Açılan bir dosyanın kapandığından emin olmak.
  • Sıfıra bölme ya da negatif bir sayının kare kökünün alınmasından kaçınmak.
  • Başa ve ortaya ekleme ve çıkarmalar olduğunda liste(linked list) kullanma bu türden önlemlerdir.

Diğer türlü tedbirler ise canlı ortamda baz durumların olabileceğini düşünür ve çalışan sistem içinde bunları yönetmeye çalışır. Bu tür durumların geliştirme sırasında, canlı ortamda olmayacak şekilde tedbir alınamaması veya alınmamasının en temel sebebi, durumun doğrudan bir hata olmaması ve yönetme şartlarının, kullanıcıyla bilgi vermek, ondan girdi istemek gibi canl ortama bağlı olmasıdır.

Örneğin, açılması istenilen dosyanın bulunamaması, açılamaması ya da ödeme yapılacak kredi kartının limetinin yetmemesi bu türden önlemlerdendir.

Bu anlamda önleme genelde geliştirme sırasında yanlış programlama tekniklerinin kullanılmasının önüne geçmeyi hedeflerken yönetme çalışma zamanında iş süreçlerindeki normalin dışındaki durumları öngörmeyi amaçlamaktadır.

Sistemci Önlemler

Savunmacı programlama paranoyak bir durum değildir. Savunmacı programlama gelişi güzel kontroller yapmak, her noktada gerekli-gereksiz ayrımı yapmadan değişkenlerin değerlerini, nesnelerin durumlarını v.s kontrol etmek demek değildir.

Bu şekilde bir yaklaşım he geliştirmeyi ve bakımı güçleştirir hem de programı hantallaştırır. Savunmacı programlama en temelde olabilecek belli başlı durumlara karşı önlem almayı hedefler. İşlemcinin önemli bir kısmı kontrol için ayrılıyorsa orada bir problem var demektir.

Örneğin şu konularda önleyici tedbirleri, önlemleri almak, ihtiyatlı olmak gereklidir:

  • Tutarlı isimlendirme v.b kod geleneği (code convertion) kullanımı,
  • Sisteme dışarıdan yapılan yanlış girdiler (wrong input),
  • Sistem içerisindeki modüllerin birbirlerine geçtikleri geçersiz ya da yanlış girdiler (invalid or wrong parameters),
  • İlkel veri problemeleri, değer aralığı (range), değer kesinliği(precision) v.s
  • null referanslar,
  • İstenmeyen değişken değerleri ve nesne durumları,
  • Değişken nesneler (mutable objects), değişmemesi gereken alanlar ve tutarsız durumlar,
  • İlkel/karmaşık (primitive/complex) tip dönüşümleri (type convertions),
  • Doğru algoritma, uygun veri yapısı (data structure), torba (collection) v.s seçimi.
  • Etkin CPU, bellek v.b kaynak kullanımları,
  • Dosya, veri tabanı v.b dış kaynaklara etkin erişim ve kullanma,
  • Güvenliği zedeleyici durumlar,
  • İş süreci ve kurallarındaki sıra dışı durumlar (exceptions).

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir