Code Contracts machen die Validierung leicht und sorgfältig

Visual Studio 2010 Beta 1 wird mit Code Contracts in mscorlib.dll geliefert, sodass der entsprechende Namensraum von Haus aus verfügbar ist. Um jedoch die Vorteile der Integration in Visual Studio nutzen zu können, muss man das Code Contracts-Paket herunterladen und installieren. (Es gibt eine akademische und eine kommerzielle Lizenz, die beide kostenlos sind.)

Als Nächstes sollte sichergestellt sein, dass eine Referenz auf die Code-Contracts-Assembly hinzugefügt ist. Klassen, die Code Contracts verwenden, sollten eine Referenz auf den Namensraum System.Diagnostics.Contracts hinzufügen.

Und schließlich wird man feststellen, dass unter den Projekteigenschaften nun eine Registerkarte für Code Contracts hinzugekommen ist. Auf dieser Eigenschaftenseite kann man Code Contracts für die Laufzeitüberprüfung und statische Analysen aktivieren und deaktivieren. Darüber hinaus lassen sich die Einstellungen dieser beiden Systeme auf der Eigenschaftenseite vornehmen.

Wichtige Hinweise: Die Konfiguration ist mit den Kompilierungseinstellungen verknüpft. Das bedeutet, dass man bestimmte Funktionen für Release Builds selektiv deaktivieren kann, sodass der Produktionscode keinen Code enthält, der noch nicht produktionsreif ist (Code Contracts ist noch kein endgültiges Release). Darüber hinaus benötigt die Validierung auch einiges an Rechenressourcen, und ihr standardmäßiges Verhalten (wie im Folgenden beschrieben) ist in den meisten Produktionsanwendungen nicht erwünscht.

Wer will, kann die Vorteile von Contract.Requires() auch nutzen, ohne irgendwelchen Code unter vielen Umständen schreiben zu müssen. Falls man eine Methode hat, bei der die ersten Anweisungen aus einer Gruppe von if/then/throw-Anweisungen ohne else-Klauseln bestehen, und diese Anweisungen die Anforderungen von Contract.Requires() erfüllen, kann ein Aufruf von Contract.EndContractBlock() nach der Anweisungsgruppe hinzufügen. Code Contracts wird diese Gruppe von Anweisungen als Vorbedingungen behandeln, genauso wie mit Contract.Requires().

Bei Invarianten sollten alle Eigenschaften, die für die Validierung verwendet werden, ausdrücklich deklariert werden. Und der zugrunde liegende Wert (nicht die Eigenschaft) sollte getestet werden. Bei Tests hat sich gezeigt, dass andernfalls die Validierung bereits einsetzt, noch ehe alle erforderlichen Eigenschaften festgelegt wurden.

Themenseiten: Anwendungsentwicklung, Software

Fanden Sie diesen Artikel nützlich?
Content Loading ...
Whitepaper

Artikel empfehlen:

Neueste Kommentare 

Noch keine Kommentare zu Code Contracts machen die Validierung leicht und sorgfältig

Kommentar hinzufügen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *