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.

Page: 1 2 3 4

ZDNet.de Redaktion

Recent Posts

Apple schließt Zero-Day-Lücken in iOS, iPadOS und macOS

Zwei von Google-Mitarbeitern entdeckte Schwachstellen werden bereits aktiv gegen Mac-Systeme mit Intel-Prozessoren eingesetzt. Sie erlauben…

2 Tagen ago

Gefährliche Anzeigen für Passwortmanager Bitwarden verbreiten Malware

Die Hintermänner haben es unter anderem auf Daten von Facebook-Geschäftskonten abgesehen. Opfer werden über angebliche…

3 Tagen ago

Public Cloud: Gartner erwartet 2025 weltweite Ausgaben von 723 Milliarden Dollar

Bis 2027 werden 90 Prozent der Unternehmen eine Hybrid-Cloud-Strategie umsetzen.

3 Tagen ago

iPhone 15 ist bestverkauftes Smartphone im dritten Quartal

Apple belegt in der Statistik von Counterpoint die ersten drei Plätze. Samsungs Galaxy S24 schafft…

3 Tagen ago

So günstig & effizient war Content Produktion noch nie: Neues Content System erobert deutschen Markt

Kontinuierliche Content Produktion und Markenaufbau sind essentieller Pfeiler von langfristigen Unternehmenserfolg. Das ist mittlerweile auch…

3 Tagen ago

Lenovo übertrifft die Erwartungen und hebt Prognose an

KI-Funktionen beschleunigen die Erholung des PC-Markts. Der Nettogewinn legt um 44 Prozent zu, der Umsatz…

4 Tagen ago