Frage

Microsoft hat vor kurzem ein Release ihres -Code Contracts Rahmen auf DevLabs mit einer kommerziellen Lizenz. Wir sind interessiert an ihnen in unserem Projekt mit (meist C #, einige C ++ / CLI) nach und nach ersetzen alle benutzerdefinierten Validierungscode, aber ich bin daran interessiert, über die Erfahrungen andere Menschen mit ihm gehabt haben zu wissen, bevor wir sie begehen, im Einzelnen:

  • Glauben Sie, dass der Rahmen für große und komplexe kommerzielle Projekte ausreichend ausgereift ist?

  • Welche Probleme haben Sie laufen in, während Sie es?

  • Welche Vorteile haben Sie bekam von ihm?

  • Ist es noch mehr Schmerzen als es wert ist?

Ich weiß, dass dies eine etwas subjektive Frage ist, wie es Meinung erfordert, aber wenn man bedenkt, dass dieser Rahmen 4.0 .NET ein sehr wichtiger Teil ist und (möglicherweise) die Art und Weise ändern, wie wir alle Validierungscode schreiben, ich, dass diese Frage hoffen wird offen gelassen werden, Erfahrungen zu diesem Thema zu sammeln mich eine Entscheidung in einem bestimmten, beantwortbar Frage zu helfen:

  

Sollten wir es zu benutzen, im nächsten Monat beginnen?

Beachten Sie, dass wir geworfen keinen Code API versenden, nur einen Web-Service ein, so dass für die Mehrheit des Code zu brechen Kompatibilität in Bezug auf dem Ausnahmetyp kein Problem ist. Wie ich jedoch als mehr Menschen der Hoffnung, bin nur ich von diesem Posten und seine Antworten profitieren, jedes Detail um dieses Gebiet ist mehr als willkommen.

War es hilfreich?

Lösung 2

Ich habe mit dem Code um gespielt Verträge einige mehr selbst auf einem kleinen, aber mäßig komplexe eigenständiges Projekt, das von einigen BCL-Klassen erben muss, und andere, die verwendet werden.

Die Verträge Sache scheint groß, wenn Sie in einer völlig isolierten Umgebung mit nur Ihren eigenen Code und primitiven Typen zu arbeiten, aber sobald Sie BCL-Klassen beginnen (die bis 4.0 .NET nicht ihre eigenen Verträge haben) die Verifizierer kann nicht überprüfen, ob sie eines der verstoßen, werden benötigt / sorgt / Invarianten und so Sie viele Warnungen zu möglichen unbefriedigt Einschränkungen erhalten.

Auf der anderen Seite, hat es einige ungültige oder potentiell unzufriedenen Einschränkungen finden, die echte Fehler sein könnte. Aber es ist sehr schwer, diese zu finden, weil es so viel Lärm ist, dass es schwer ist, um herauszufinden, welche Sie beheben können. Es ist möglich, die Warnungen der BCL-Klassen zu unterdrücken, indem der Mechanismus übernehmen verwenden, aber das ist etwas unsinnig, da diese Klassen werden Verträge in der Zukunft hat und Annahmen ihren Wert verringern.

Also mein Gefühl ist, dass jetzt, da in 3,5 wir versuchen, auf einen Rahmen zu schaffen, der Prüfer nicht ausreichend verstehen, dass es wahrscheinlich lohnt sich für 4,0 warten.

Andere Tipps

Die letzte reife Reaktion auf das war im Jahr 2009 und .NET 4 aus. Ich meine, wir sind auf Grund für ein Update:

Code-Verträge könnten gut ausgereift genug sein, um für Ihr Debug-Releases.

Ich weiß, das so etwas wie ein Upgrade von „Harmless“ auf „Mostly Harmless“.

Die -Code Startseite Verträge Links zu recht gründlicher Dokumentation im PDF-Format. Die Dokumentation beschreibt Nutzungsrichtlinien in Abschnitt 5. Um es zusammenzufassen, Sie können wählen, wie mutig Sie fühlen über den Vertrag Werkzeuge neu zu schreiben Ihre IL in Ihrer Veröffentlichung baut.

Wir sind mit dem „nicht der Veröffentlichung IL umschreiben“ -Modus.

Bisher habe ich die meisten diesen unerwarteten Vorteil genießen: es gibt weniger Code, so dass weniger Code testen . Alle Ihre Wache Klauseln wegschmelzen.

if(arg != null) { 
    throw new ArgumentNullException("arg"); 
}
// Blank line here insisted upon by StyleCop

wird:

Contract.Requires(arg != null);

Ihre Funktionen sind kürzer. Ihre Absicht ist es klarer. Und Sie nicht mehr einen Test namens ArgumentShouldNotBeNull schreiben müssen nur 100% Abdeckung zu erreichen.

Bisher habe ich in zwei Probleme laufen:

  • Ich hatte einen Unit-Test, der auf einem Vertrag Versagen verließ erfolgreich zu sein. Sie könnten die Existenz des Tests argumentieren, war ein Fehler, aber ich wollte in der Form eines Tests dieses besondere Verbot dokumentieren. Der Test nicht bestanden auf meinem Build-Server, weil ich nicht installiert haben die Werkzeuge. Lösung:. Installieren Sie die Tools

  • Wir sind mit zwei Tools, die IL umschreiben: Code-Verträge und Postsharp . Sie haben sich nicht zu gut zusammen. Postsharp ist 2.0.8.1283 das Problem behoben. Ich würde vorsichtig bewerten, wie jeder zwei IL-Umschreiben Tools zusammen bekommen, though.

Bisher sind die Vorteile überwiegen die Gefahren.

out-of-date Bedenken in anderen Antworten angehoben Adressierung:

  • Code-Verträge in der Dokumentation ist sehr gründlich, wenn auch leider in PDF.
  • Es gibt mindestens ein -Code Contract Forum hosted by Microsoft.
  • Code-Verträge Standard Edition ist kostenlos, wenn Sie eine VS2010-Lizenz.
  • .NET 4 aus. Ich habe in der Microsoft-Verträge laufen, wenn generische Auflistung Schnittstellen implementieren.

nach zu urteilen dieses Thema ich würde sagen, es ist nicht ganz ausgereift genug für ein Enterprise-Level-Projekt zu verwenden. Ich habe es selbst nicht verwendet, aber die Leute laufen noch in Fehler, die Ihren Vertrag kritischen Projekt zum Erliegen bringen würde. Es scheint wie ein wirklich großen Rahmen und die Beispiel Videos, die sie spannend gewesen zur Verfügung gestellt haben, aber ich würde warten:

  • Die Existenz einer Community-Forum. Sie werden in der Lage sein wollen unvermeidlichen Probleme, die Sie mit anderen Entwicklern führen zu diskutieren in, und Sie wollen wissen, dass es eine anständig starke Basis von Entwicklern aus dort zu diskutieren Lösungen mit.
  • Ein erfolgreiches Pilotprojekt Release. Im Allgemeinen, wenn Microsoft Research veröffentlicht etwas, das sie denken reif genug ist, in einem kommerziellen Projekt verwendet werden sollte, werden sie mit einer Organisation arbeiten, um es zu steuern und dann freigeben dass Open-Source-Projekt als ein Proof of concept und trial-by-Feuer von allen wichtigen Funktionen. Dies würde viel Vertrauen geben, dass die meisten der gemeinsamen Vertrags Szenarien abgedeckt sind und arbeiten.
  • Mehr vollständige Dokumentation. Schlicht und einfach, an einem gewissen Punkt, den Sie etwas mit Verträgen wollen, tun werden, die Sie noch nicht Verträgen mit Microsoft-Code tun. Sie mögen Grund schnell und eindeutig in der Lage sein, dass Ihr Szenario ist noch nicht unterstützt. Die aktuelle Dokumentation wird Sie hält erraten und verschiedene Dinge ausprobieren, aber meiner Meinung nach, die in einem führen Menge vergeudete Zeit.

Es ist nicht reif genug.

Es wird, sobald Microsoft es mit den erschwinglichen Ausgaben von VS freigibt, aber ohne die statische Code-Analyse ist es überhaupt nicht verwendet werden.

Die Ausgaben von VS, die es haben, sind so wahnsinnig teuer, dass nur eine Handvoll Menschen jemals in der Lage sein, die es sich leisten.

Es ist eine Schande Microsoft diese erstaunliche Idee mit ihrer Preispolitik getötet. Ich wünsche-Code Verträge würde Mainstream geworden, aber sie werden nicht.

Epos versagen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top