Si vous deviez choisir vos techniques préférées (intelligentes) pour le codage défensif, quelles seraient-elles? Bien que mes langages actuels soient Java et Objective-C (avec une formation en C ++), n'hésitez pas à répondre dans n'importe quel langage. L'accent serait mis ici sur des techniques défensives intelligentes autres que celles que plus de 70% d'entre nous connaissons déjà. Alors maintenant, il est temps de creuser profondément dans votre sac d'astuces.
En d'autres termes, essayez de penser à autre chose que cet exemple inintéressant :
if(5 == x)
au lieu deif(x == 5)
: pour éviter une affectation involontaire
Voici quelques exemples des meilleures pratiques de programmation défensives intéressantes (des exemples spécifiques à un langage sont en Java):
- Verrouillez vos variables jusqu'à ce que vous sachiez que vous devez les modifier
Autrement dit, vous pouvez déclarer toutes les variables final
jusqu'à ce que vous sachiez que vous devrez la modifier, auquel cas vous pouvez supprimer le fichier final
. Un fait généralement inconnu est que cela est également valable pour les paramètres de méthode:
public void foo(final int arg) { /* Stuff Here */ }
- Quand quelque chose de mauvais se produit, laissez une trace de preuves derrière
Il y a un certain nombre de choses que vous pouvez faire lorsque vous avez une exception: évidemment, la consigner et effectuer un nettoyage en serait quelques-unes. Mais vous pouvez aussi laisser une trace de preuves (par exemple, définir des variables sur des valeurs sentinelles comme "UNABLE TO LOAD FILE" ou 99999 serait utile dans le débogueur, au cas où vous catch
passeriez un bloc d' exception ).
- Quand il s'agit de cohérence: le diable est dans les détails
Soyez aussi cohérent avec les autres bibliothèques que vous utilisez. Par exemple, en Java, si vous créez une méthode qui extrait une plage de valeurs, rendez la limite inférieure inclusive et la limite supérieure exclusive . Cela le rendra cohérent avec des méthodes comme celles String.substring(start, end)
qui fonctionnent de la même manière. Vous trouverez que tous ces types de méthodes dans le Sun JDK se comportent de cette façon car il effectue diverses opérations, y compris l'itération d'éléments cohérents avec des tableaux, où les indices vont de zéro ( inclus ) à la longueur du tableau ( exclusif ).
Alors, quelles sont vos pratiques défensives préférées?
Mise à jour: si vous ne l'avez pas déjà fait, n'hésitez pas à intervenir. Je donne une chance à plus de réponses avant de choisir la réponse officielle .