Wenn Sie Ihre bevorzugten (cleveren) Techniken für die defensive Codierung auswählen müssten, welche wären das? Obwohl meine aktuellen Sprachen Java und Objective-C sind (mit einem Hintergrund in C ++), können Sie jederzeit in einer beliebigen Sprache antworten. Der Schwerpunkt liegt hier auf anderen cleveren Abwehrtechniken als denen, die über 70% von uns hier bereits kennen. Jetzt ist es an der Zeit, tief in Ihre Trickkiste zu graben.
Mit anderen Worten, versuchen Sie, an etwas anderes als dieses uninteressante Beispiel zu denken :
if(5 == x)stattif(x == 5): um eine unbeabsichtigte Zuordnung zu vermeiden
Hier sind einige Beispiele für einige faszinierende bewährte Methoden der defensiven Programmierung (sprachspezifische Beispiele sind in Java):
- Sperren Sie Ihre Variablen, bis Sie wissen, dass Sie sie ändern müssen
Das heißt, Sie können alle Variablen deklarieren , finalbis Sie wissen, dass Sie sie ändern müssen. An diesem Punkt können Sie die Variablen entfernen final. Eine häufig unbekannte Tatsache ist, dass dies auch für Methodenparameter gilt:
public void foo(final int arg) { /* Stuff Here */ }
- Wenn etwas Schlimmes passiert, hinterlassen Sie eine Spur von Beweisen
Es gibt eine Reihe von Dingen, die Sie tun können, wenn Sie eine Ausnahme haben: Offensichtlich sind es einige, die Sie protokollieren und eine Bereinigung durchführen. Sie können aber auch eine Spur von Beweisen hinterlassen (z. B. das Setzen von Variablen auf Sentinel-Werte wie "UNABLE TO LOAD FILE" oder 99999 wäre im Debugger hilfreich, falls Sie zufällig einen Ausnahmeblock catchüberschreiten).
- Wenn es um Beständigkeit geht: Der Teufel steckt im Detail
Seien Sie genauso konsistent mit den anderen Bibliotheken, die Sie verwenden. Wenn Sie beispielsweise in Java eine Methode erstellen, die einen Wertebereich extrahiert, wird die Untergrenze inklusive und die Obergrenze exklusiv . Dies macht es konsistent mit Methoden, wie sie String.substring(start, end)auf die gleiche Weise funktionieren. Sie finden alle diese Arten von Methoden im Sun JDK, um sich so zu verhalten, da verschiedene Operationen ausgeführt werden, einschließlich der Iteration von Elementen, die mit Arrays konsistent sind, wobei die Indizes von Null ( einschließlich ) bis zur Länge des Arrays ( exklusiv ) reichen .
Was sind deine Lieblingsverteidigungspraktiken?
Update: Wenn Sie es noch nicht getan haben, können Sie sich gerne einschalten. Ich gebe die Möglichkeit, dass weitere Antworten eingehen, bevor ich die offizielle Antwort auswähle .