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

Kritische Lücken in Adobe Reader und Acrobat

Sie erlauben eine Remotecodeausführung. Betroffen sind alle unterstützten Versionen von Adobe Reader und Acrobat für…

7 Tagen ago

Google stopft weitere fünf Löcher in Chrome 128

Betroffen sind Chrome für Windows, macOS und Linux. Das von den Anfälligkeiten ausgehende Risiko stuft…

7 Tagen ago

Steuerstreit mit der EU: Apple muss 13 Milliarden Euro nachzahlen

Der Gerichtshof der Europäischen Union entscheidet „endgültig“ über den Rechtsstreit. Dem Urteil zufolge sind von…

1 Woche ago

September-Patchday: Microsoft schließt kritische Zero-Day-Lücke in Windows Update

Sie betrifft ältere Versionen von Windows 10. Ein weiterer kritischer Bug steckt aber auch in…

1 Woche ago

CloudEye für 18 Prozent aller Malware-Infektionen in Deutschland verantwortlich

Der Downloader nimmt Windows-Rechner ins Visier. RansomHub festigt seine Position als führende Ransomware-Gruppe weltweit.

1 Woche ago

Funeral Scams: Neue perfide Online-Betrugsmasche auf Facebook

Britische Bestattungsunternehmen haben bereits reagiert und weisen darauf hin, dass ihre Beerdigungen nicht gelivestreamt werden.

1 Woche ago