Eğer savunma kodlaması için Favori (akıllı) tekniklerinizi seçmek zorunda olsaydınız, bunlar ne olurdu? Mevcut dillerim Java ve Objective-C (arka plan C ++ 'da) olmasına rağmen, herhangi bir dilde cevap vermekten çekinmeyin. Buradaki vurgu ,% 70'inden fazlasının zaten bildiği teknikler dışında akıllı savunma tekniklerine olacaktır . Şimdi hile çantanızın derinliklerine inme zamanı.
Başka bir deyişle, bu ilginç örnek dışında düşünmeye çalışın :
if(5 == x)
yerineif(x == 5)
: istenmeyen atamayı önlemek için
İşte bazı ilginç en iyi savunma programlama uygulamalarına bazı örnekler (dile özgü örnekler Java'dadır):
- Değişkenlerinizi değiştirmeniz gerektiğini bilene kadar değişkenlerinizi kilitleyin
Yani, değiştirmeniz gerekeceğini bilinceye kadar tüm değişkenleri final
bildirebilirsiniz, bu noktada final
. Yaygın olarak bilinmeyen bir gerçek, bunun yöntem parametreleri için de geçerli olduğudur:
public void foo(final int arg) { /* Stuff Here */ }
- Kötü bir şey olduğunda, geride bir kanıt bırakın
Bir istisnanız olduğunda yapabileceğiniz birkaç şey vardır: Açıkçası oturum açmak ve bazı temizlik yapmak birkaç şey olacaktır. Ancak bir kanıt izi de bırakabilirsiniz (örn. "DOSYA catch
YÜKLENEMEZ " veya 99999 gibi sentinel değerlerine değişkenleri ayarlamak, bir istisna -block'u aşarsanız hata ayıklayıcıda yararlı olacaktır ).
- Tutarlılık söz konusu olduğunda: şeytan ayrıntıda gizlidir
Kullandığınız diğer kütüphanelerle tutarlı olun. Örneğin, Java'da, bir değer aralığı ayıklayan bir yöntem oluşturuyorsanız, alt sınırı kapsayıcı ve üst sınırını özel hale getirin . Bu String.substring(start, end)
, aynı şekilde çalışan yöntemler gibi tutarlı hale getirecektir . O endeksler Sıfır (gelmektedir diziler, tutarlı elemanların yineleme dahil olmak üzere çeşitli işlemleri yapar gibi bu şekilde davranmasına Güneş JDK yöntemlerin bu türdeki tüm bulacaksınız Anin dizinin (uzunluğuna) münhasır ).
Peki senin favori savunma uygulamaların neler?
Güncelleme: Henüz yapmadıysanız, giriş yapmaktan çekinmeyin. Resmi yanıtı seçmeden önce daha fazla yanıt gelmesi için bir şans veriyorum .