Vorteile der selbständigen Programmierung

7

Was bringt es, Behauptungen in unseren Code aufzunehmen? Was sind die Vorteile einer durchsetzungsfähigen Programmierung?

%Vor%

Zum Beispiel können wir die Nachrichtenvariable überprüfen und hier eine Ausnahme auslösen. Warum verwende ich Assert hier? Oder ist dies ein falsches Beispiel, um die Vorteile von Behauptungen zu sehen?

    
Canavar 24.04.2009, 21:30
quelle

7 Antworten

9

Sie unterstützen auch die Philosophie von fail fast, erklärt in diesem Artikel von Jim Shore.

    
Shane Fulmer 24.04.2009, 21:37
quelle
7

Wo einige Leute schreiben würden:

%Vor%

Es ist viel praktischer zu schreiben:

%Vor%

Ich mag es, Asserts zu verwenden, weil sie einfach mit einer einfachen Kompilierzeitkonstante ausgeschaltet werden können oder etwas anderes machen können, um einen Fehlerbericht zu erstellen. Normalerweise lasse ich keine Zusicherungen (zumindest nicht in der üblichen Weise) bei der Veröffentlichung von etwas.

Die Verwendung von ihnen hat mich davor bewahrt, sehr dumme Fehler auf den Computern anderer Leute zu machen. Diese mutigen Seelen, die gerne meinen Alpha-Code testen. Die Verwendung von ihnen plus Tools wie Valgrind hilft mir zu garantieren, dass ich etwas Schlimmes einfangen kann, bevor ich es begehe.

    
Tim Post 25.04.2009 01:01
quelle
2

Eine wichtige Unterscheidung, die es zu berücksichtigen gilt, ist die Art von Fehlern, die Sie mit Behauptungen erfassen möchten. Ich benutze häufig Behauptungen, um Programmierfehler zu erfassen (d. H. Eine Methode mit einem Null-Parameter aufzurufen) und einen anderen Mechanismus, um Validierungsfehler zu behandeln (z. B. das Übergeben einer Sozialversicherungsnummer mit der falschen Länge). Für den Programmierfehler, der bei der Assertion auftritt, möchte ich schnell versagen. Für den Validierungsfehler möchte ich weniger drastisch antworten, da es normal sein kann, dass Fehler in den Daten auftreten (z. B. ein Benutzer, der eine Dateneingabe durchführt). In diesen Fällen kann die ordnungsgemäße Behandlung darin bestehen, den Fehler dem Benutzer zu melden und weiter zu funktionieren.

    
Rob Scott 25.04.2009 00:27
quelle
1

Wenn es eine bestimmte Voraussetzung für die Methode gibt, einen Nicht-Null-Nachrichtenparameter zu übernehmen, dann soll das Programm FAIL sein, sobald die Vorbedingung nicht gilt und die Quelle des Fehlers dann sein muss behoben.

Ich glaube, dass Aussagen bei der Entwicklung sicherheitskritischer Software wichtiger sind. Und natürlich würden Sie Behauptungen lieber verwenden, wenn die Software formal spezifiziert wurde.

    
Peter Perháč 24.04.2009 21:37
quelle
1

Für eine hervorragende Diskussion von Assertions (und vielen anderen Themen im Zusammenhang mit der Code-Erstellung) lesen Sie Code Complete von Steve McConnel. Er widmet dem effektiven Gebrauch von Behauptungen ein ganzes Kapitel.

    
JayMcClellan 24.04.2009 21:39
quelle
1

Ich benutze sie um zu überprüfen, ob ich eine gültige abhängige Klasse bekommen habe. Zum Beispiel akzeptieren Sie normalerweise in Konstruktor DI eine Art von externer Klasse, von der Sie abhängig sind, um eine Aktion oder einen Dienst bereitzustellen.

so können Sie behaupten (classRef! - null, "classRef kann nicht null sein"); anstatt darauf zu warten, dass Sie eine Nachricht an classRef weiterleiten und eine andere Ausnahme wie die Ausnahme erhalten: Zugriffsverletzung oder etwas Ähnliches, das nicht sofort vom Code übersehen werden kann.

    
MikeJ 24.04.2009 22:01
quelle
0

Es ist sehr nützlich, unsere Annahmen zu testen. Die Behauptungen stellen ständig sicher, dass die Invariante wahr ist. Kurz gesagt, es wird für die folgenden Zwecke verwendet,

  • Es ermöglicht die Implementierung von fail-fast System.
  • Es reduziert die Fehlerausbreitung aufgrund von Nebenwirkungen.
  • Es verbietet (Art der Plausibilitätsprüfung), dass das System aufgrund von Benutzerdaten oder durch nachfolgende Codeänderungen in einen inkonsistenten Zustand eintritt.

Manchmal bevorzuge ich die Verwendung von assert_return (), wenn wir try / catch / throw nicht verwenden wollen.

%Vor%

Ich schlage assert_return () vor, um die Anwendung zu stoppen, indem Sie einen Fehler im Test-Build melden. Und dann im Produktionssystem sollte es protokollieren und Fehler und Rückkehr von der Funktion sagen, dass es nicht tun kann.

    
shuva 03.01.2017 17:24
quelle

Tags und Links