{"id":169922,"date":"2008-10-28T15:19:56","date_gmt":"2008-10-28T15:19:56","guid":{"rendered":"https:\/\/www.microsoft.com\/en-us\/research\/project\/code-contracts\/"},"modified":"2017-06-06T08:52:45","modified_gmt":"2017-06-06T15:52:45","slug":"code-contracts","status":"publish","type":"msr-project","link":"https:\/\/www.microsoft.com\/en-us\/research\/project\/code-contracts\/","title":{"rendered":"Code Contracts"},"content":{"rendered":"<p class=\"asset-content\">Code Contracts provide a language-agnostic way to express coding assumptions in .NET programs. The contracts take the form of preconditions, postconditions, and object invariants. Contracts act as checked documentation of your external and internal APIs. The contracts are used to improve testing via runtime checking, enable static contract verification, and documentation generation.<\/p>\n<h1>Code Contracts is now Open Source!<\/h1>\n<p>Code Contracts is now an open source <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"https:\/\/github.com\/Microsoft\/CodeContracts\">project<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> in GitHub. This page is being kept for historical interest. All downloads, documentation, and discussions take place <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"https:\/\/github.com\/Microsoft\/CodeContracts\" target=\"_blank\">there<span class=\"sr-only\"> (opens in new tab)<\/span><\/a>.<\/p>\n<p>It is just one of the many projects that are part of the <a href=\"https:\/\/www.microsoft.com\/en-us\/research\/project\/open-source-for-academics\/\">Open Source for Academics<\/a> program.<\/p>\n\t<div data-wp-context='{\"items\":[]}' data-wp-interactive=\"msr\/accordion\">\n\t\t\t\t\t<div class=\"clearfix\">\n\t\t\t\t<div\n\t\t\t\t\tclass=\"btn-group align-items-center mb-g float-sm-right\"\n\t\t\t\t\tdata-bi-aN=\"accordion-collapse-controls\"\n\t\t\t\t>\n\t\t\t\t\t<button\n\t\t\t\t\t\tclass=\"btn btn-link m-0\"\n\t\t\t\t\t\tdata-bi-cN=\"Expand all\"\n\t\t\t\t\t\tdata-wp-bind--aria-controls=\"state.ariaControls\"\n\t\t\t\t\t\tdata-wp-bind--aria-expanded=\"state.ariaExpanded\"\n\t\t\t\t\t\tdata-wp-bind--disabled=\"state.isAllExpanded\"\n\t\t\t\t\t\tdata-wp-class--inactive=\"state.isAllExpanded\"\n\t\t\t\t\t\tdata-wp-on--click=\"actions.onExpandAll\"\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t>\n\t\t\t\t\t\tExpand all\t\t\t\t\t<\/button>\n\t\t\t\t\t<span aria-hidden=\"true\"> | <\/span>\n\t\t\t\t\t<button\n\t\t\t\t\t\tclass=\"btn btn-link m-0\"\n\t\t\t\t\t\tdata-bi-cN=\"Collapse all\"\n\t\t\t\t\t\tdata-wp-bind--aria-controls=\"state.ariaControls\"\n\t\t\t\t\t\tdata-wp-bind--aria-expanded=\"state.ariaExpanded\"\n\t\t\t\t\t\tdata-wp-bind--disabled=\"state.isAllCollapsed\"\n\t\t\t\t\t\tdata-wp-class--inactive=\"state.isAllCollapsed\"\n\t\t\t\t\t\tdata-wp-on--click=\"actions.onCollapseAll\"\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t>\n\t\t\t\t\t\tCollapse all\t\t\t\t\t<\/button>\n\t\t\t\t<\/div>\n\t\t\t<\/div>\n\t\t\t\t<ul class=\"msr-accordion\">\n\t\t\t\t\t\t\t\t<li class=\"m-0\" data-wp-context='{\"id\":\"accordion-content-2\"}' data-wp-init=\"callbacks.init\">\n\t\t<div class=\"accordion-header\">\n\t\t\t<button\n\t\t\t\taria-controls=\"accordion-content-2\"\n\t\t\t\tclass=\"btn btn-collapse\"\n\t\t\t\tdata-wp-bind--aria-expanded=\"state.isExpanded\"\n\t\t\t\tdata-wp-on--click=\"actions.onClick\"\n\t\t\t\tid=\"accordion-button-1\"\n\t\t\t\ttype=\"button\"\n\t\t\t>\n\t\t\t\tOverview\t\t\t<\/button>\n\t\t<\/div>\n\t\t<div\n\t\t\taria-labelledby=\"accordion-button-1\"\n\t\t\tclass=\"msr-accordion__content\"\n\t\t\tdata-wp-bind--inert=\"!state.isExpanded\"\n\t\t\tdata-wp-run=\"callbacks.run\"\n\t\t\tid=\"accordion-content-2\"\n\t\t>\n\t\t\t<div class=\"msr-accordion__body\">\n\t\t\t\t<h1>Overview<\/h1>\n<p>Code Contracts bring the advantages of design-by-contract programming to all .NET programming languages. The benefits of writing contracts are:<\/p>\n<p><b>Improved testability<\/b><\/p>\n<ul>\n<li>each contract acts as an oracle, giving a test run a pass\/fail indication.<\/li>\n<li>automatic testing tools, such as <a href=\"https:\/\/www.microsoft.com\/en-us\/research\/project\/pex4fun\/\">Pex<\/a>, can take advantage of contracts to generate more meaningful unit tests by filtering out meaningless test arguments that don&#8217;t satisfy the pre-conditions.<\/li>\n<\/ul>\n<p><b>Static verification<\/b> We have prototyped numerous static verification tools over the past years. Our current tool takes advantage of contracts to reduce false positives and produce more meaningful errors.<\/p>\n<p><b>API documentation<\/b> Our API documentation often lacks useful information. The same contracts used for runtime testing and static verification can also be used to generate better API documentation, such as which parameters need to be non-null, etc.<\/p>\n<p>Our solution consists of using a set of static library methods for writing preconditions, postconditions, and object invariants as well as three tools:<b>ccrewrite<\/b>, for generating runtime checking from the contracts<\/p>\n<ul>\n<li><b>cccheck<\/b>, a static checker that verifies contracts at compile-time.<\/li>\n<li><strong>ccdoc<\/strong>, \u00a0a tool that adds contracts to the XML documentation files and to <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/www.codeplex.com\/\/sandcastle\" target=\"_blank\">Sandcastle<span class=\"sr-only\"> (opens in new tab)<\/span><\/a>-generated MSDN-style help files.<\/li>\n<\/ul>\n<p>The use of a library has the advantage that all .NET languages can immediately take advantage of contracts. There is no need to write a special parser or compiler. Furthermore, the respective language compilers naturally check the contracts for well-formedness (type checking and name resolution) and produce a compiled form of the contracts as MSIL. Authoring contracts in Visual Studio allows programmers to take advantage of the standard intellisense provided by the language services. Previous approaches based on .NET attributes fall far short as they neither provide an expressive enough medium, nor can they take advantage of compile-time checks.<\/p>\n<ul>\n<li><b>Contracts<\/b> are expressed using static method calls at method entries. Tools take care to interpret these <b>declarative contracts<\/b> in the right places. These methods are found in the <b>System.Diagnostics.Contracts<\/b> namespace.<\/li>\n<li><b>Contract.Requires<\/b> takes a boolean condition and expresses a precondition of the method. A precondition must be true on entry to the method. It is the caller&#8217;s responsibility to make sure the pre-condition is met.<\/li>\n<li><b>Contract.Ensures<\/b> takes a boolean condition and expresses a postcondition of the method. A postcondition must be true at all normal exit points of the method. It is the implementation&#8217;s responsibility that the postcondition is met.<\/li>\n<\/ul>\n<p style=\"padding-left: 30px;\">Full details are in the <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"https:\/\/github.com\/Microsoft\/CodeContracts\/blob\/master\/Documentation\/User%20Documentation\/userdoc.pdf\" target=\"_blank\">user documentation<span class=\"sr-only\"> (opens in new tab)<\/span><\/a>.<\/p>\n\t\t\t<\/div>\n\t\t<\/div>\n\t<\/li>\n\t\t<li class=\"m-0\" data-wp-context='{\"id\":\"accordion-content-4\"}' data-wp-init=\"callbacks.init\">\n\t\t<div class=\"accordion-header\">\n\t\t\t<button\n\t\t\t\taria-controls=\"accordion-content-4\"\n\t\t\t\tclass=\"btn btn-collapse\"\n\t\t\t\tdata-wp-bind--aria-expanded=\"state.isExpanded\"\n\t\t\t\tdata-wp-on--click=\"actions.onClick\"\n\t\t\t\tid=\"accordion-button-3\"\n\t\t\t\ttype=\"button\"\n\t\t\t>\n\t\t\t\tPeople\t\t\t<\/button>\n\t\t<\/div>\n\t\t<div\n\t\t\taria-labelledby=\"accordion-button-3\"\n\t\t\tclass=\"msr-accordion__content\"\n\t\t\tdata-wp-bind--inert=\"!state.isExpanded\"\n\t\t\tdata-wp-run=\"callbacks.run\"\n\t\t\tid=\"accordion-content-4\"\n\t\t>\n\t\t\t<div class=\"msr-accordion__body\">\n\t\t\t\t<p>The main people who worked on this project are:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.microsoft.com\/en-us\/research\/people\/mbarnett\/\">Mike Barnett<\/a><\/li>\n<li>Manuel Fahndrich<\/li>\n<li>Francesco Logozzo<\/li>\n<li><a href=\"https:\/\/www.microsoft.com\/en-us\/research\/people\/schulte\/\">Wolfram Schulte<\/a><\/li>\n<li>Herman Venter<\/li>\n<\/ul>\n<p>There were also <strong>many<\/strong> others, especially interns:<\/p>\n<ul>\n<li>Mehdi Bouaziz<\/li>\n<li>Scott Carr<\/li>\n<li>Patrick and Radhia Cousot<\/li>\n<li>Diego Garbervetsky<\/li>\n<li>Jacque-Henri Jourdan<\/li>\n<li>Vincent Laviron<\/li>\n<li>Mathias Peron<\/li>\n<li>Daryl Zuniga<\/li>\n<\/ul>\n\t\t\t<\/div>\n\t\t<\/div>\n\t<\/li>\n\t\t<li class=\"m-0\" data-wp-context='{\"id\":\"accordion-content-6\"}' data-wp-init=\"callbacks.init\">\n\t\t<div class=\"accordion-header\">\n\t\t\t<button\n\t\t\t\taria-controls=\"accordion-content-6\"\n\t\t\t\tclass=\"btn btn-collapse\"\n\t\t\t\tdata-wp-bind--aria-expanded=\"state.isExpanded\"\n\t\t\t\tdata-wp-on--click=\"actions.onClick\"\n\t\t\t\tid=\"accordion-button-5\"\n\t\t\t\ttype=\"button\"\n\t\t\t>\n\t\t\t\tDownload\t\t\t<\/button>\n\t\t<\/div>\n\t\t<div\n\t\t\taria-labelledby=\"accordion-button-5\"\n\t\t\tclass=\"msr-accordion__content\"\n\t\t\tdata-wp-bind--inert=\"!state.isExpanded\"\n\t\t\tdata-wp-run=\"callbacks.run\"\n\t\t\tid=\"accordion-content-6\"\n\t\t>\n\t\t\t<div class=\"msr-accordion__body\">\n\t\t\t\t<p>Our tools can be installed in any Visual Studio edition (except Express). The license <strong>does<\/strong> allow commercial use.\u00a0It is available\u00a0on the\u00a0<a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/visualstudiogallery.msdn.microsoft.com\/1ec7db13-3363-46c9-851f-1ce455f66970\" target=\"_blank\">Visual Studio Gallery<span class=\"sr-only\"> (opens in new tab)<\/span><\/a>.<\/p>\n<p>After installing please use the link to the documentation under All Programs -> Microsoft Code Contracts to get you started.<\/p>\n<p><span id=\"53c58309-58d4-418b-ab06-d54cd2fc18a8\" class=\"ImageBlock fn\"><a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/msdn.microsoft.com\/en-us\/devlabs\/dd491992.aspx\" target=\"_blank\"><img decoding=\"async\" id=\"Image53c58309-58d4-418b-ab06-d54cd2fc18a8\" class=\"alignleft\" src=\"https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2016\/02\/contracts-codecontracts_sm.png\" alt=\"\" \/><span class=\"sr-only\"> (opens in new tab)<\/span><\/a><\/span>If your project uses Code Contracts and would like to have it added to this list, please let us know!<span id=\"53c58309-58d4-418b-ab06-d54cd2fc18a8\" class=\"ImageBlock fn\"><\/span> Code Contracts is available with a commercial license on the <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/visualstudiogallery.msdn.microsoft.com\/1ec7db13-3363-46c9-851f-1ce455f66970\" target=\"_blank\">Visual Studio Gallery<span class=\"sr-only\"> (opens in new tab)<\/span><\/a><\/p>\n\t\t\t<\/div>\n\t\t<\/div>\n\t<\/li>\n\t\t<li class=\"m-0\" data-wp-context='{\"id\":\"accordion-content-8\"}' data-wp-init=\"callbacks.init\">\n\t\t<div class=\"accordion-header\">\n\t\t\t<button\n\t\t\t\taria-controls=\"accordion-content-8\"\n\t\t\t\tclass=\"btn btn-collapse\"\n\t\t\t\tdata-wp-bind--aria-expanded=\"state.isExpanded\"\n\t\t\t\tdata-wp-on--click=\"actions.onClick\"\n\t\t\t\tid=\"accordion-button-7\"\n\t\t\t\ttype=\"button\"\n\t\t\t>\n\t\t\t\tProjects Using Code Contracts\t\t\t<\/button>\n\t\t<\/div>\n\t\t<div\n\t\t\taria-labelledby=\"accordion-button-7\"\n\t\t\tclass=\"msr-accordion__content\"\n\t\t\tdata-wp-bind--inert=\"!state.isExpanded\"\n\t\t\tdata-wp-run=\"callbacks.run\"\n\t\t\tid=\"accordion-content-8\"\n\t\t>\n\t\t\t<div class=\"msr-accordion__body\">\n\t\t\t\t<ul>\n<li>\n<div><a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"http:\/\/autodiff.codeplex.com\/\">Autodiff<span class=\"sr-only\"> (opens in new tab)<\/span><\/a><\/div>\n<\/li>\n<li>\n<div><a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"https:\/\/github.com\/boogie-org\/boogie\">Boogie<span class=\"sr-only\"> (opens in new tab)<\/span><\/a><\/div>\n<\/li>\n<li>\n<div><a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"http:\/\/ccisamples.codeplex.com\/\">CCI<span class=\"sr-only\"> (opens in new tab)<\/span><\/a><\/div>\n<\/li>\n<li>\n<div><a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"http:\/\/www3.gehealthcare.com\/en\/Products\/Categories\/Healthcare_IT\/Medical_Imaging_Informatics_-_RIS-PACS-CVIS\/Centricity_Enterprise_Archive\">Centricity Enterprise Archive<span class=\"sr-only\"> (opens in new tab)<\/span><\/a>(Commercial medical DICOMXDS archive)<\/div>\n<\/li>\n<li>\n<div><a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"http:\/\/connectedproperties.codeplex.com\/\">Connected Properties<span class=\"sr-only\"> (opens in new tab)<\/span><\/a><\/div>\n<\/li>\n<li><a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"https:\/\/github.com\/Microsoft\/dafny\">Dafny<span class=\"sr-only\"> (opens in new tab)<\/span><\/a><\/li>\n<li>\n<div><a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"http:\/\/csharpsdk.org\/\">Facebook C# SDK<span class=\"sr-only\"> (opens in new tab)<\/span><\/a><\/div>\n<\/li>\n<li>\n<div><a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"http:\/\/dbexecutor.codeplex.com\/\">DbExecutor<span class=\"sr-only\"> (opens in new tab)<\/span><\/a><\/div>\n<\/li>\n<li>\n<div><a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"http:\/\/elysium.codeplex.com\/\">Elysium<span class=\"sr-only\"> (opens in new tab)<\/span><\/a><\/div>\n<\/li>\n<li>\n<div><a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"http:\/\/fttk.codeplex.com\/\">FT Toolkit<span class=\"sr-only\"> (opens in new tab)<\/span><\/a><\/div>\n<\/li>\n<li>\n<div><a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"http:\/\/labs.codeplex.com\/\">Labs Framework<span class=\"sr-only\"> (opens in new tab)<\/span><\/a><\/div>\n<\/li>\n<li>\n<div><a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"http:\/\/mishrareader.codeplex.com\/\">Mishra Reader<span class=\"sr-only\"> (opens in new tab)<\/span><\/a><\/div>\n<\/li>\n<li>\n<div><a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"http:\/\/ncolony.codeplex.com\/\">NColony<span class=\"sr-only\"> (opens in new tab)<\/span><\/a><\/div>\n<\/li>\n<li>\n<div><a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"http:\/\/nitoasyncex.codeplex.com\/\">Nito AsyncEx<span class=\"sr-only\"> (opens in new tab)<\/span><\/a><\/div>\n<\/li>\n<li>\n<div><a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"http:\/\/quickgraph.codeplex.com\/\">QuickGraph<span class=\"sr-only\"> (opens in new tab)<\/span><\/a><\/div>\n<\/li>\n<li>\n<div><a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"http:\/\/rxx.codeplex.com\/\">Extensions for Reactive Extensions<span class=\"sr-only\"> (opens in new tab)<\/span><\/a><\/div>\n<\/li>\n<li>\n<div><a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/resxresourcemanager.codeplex.com\/\" target=\"_blank\">ResX Resource Manager<span class=\"sr-only\"> (opens in new tab)<\/span><\/a><\/div>\n<\/li>\n<li>\n<div><a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/sando.codeplex.com\/\" target=\"_blank\">Sando<span class=\"sr-only\"> (opens in new tab)<\/span><\/a><\/div>\n<\/li>\n<li>\n<div><a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"http:\/\/shweet.codeplex.com\/\">Shweet<span class=\"sr-only\"> (opens in new tab)<\/span><\/a><\/div>\n<\/li>\n<li>\n<div><a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"http:\/\/wpfscrabble.codeplex.com\/\">Scrabble for WPF<span class=\"sr-only\"> (opens in new tab)<\/span><\/a><\/div>\n<\/li>\n<\/ul>\n\t\t\t<\/div>\n\t\t<\/div>\n\t<\/li>\n\t\t<li class=\"m-0\" data-wp-context='{\"id\":\"accordion-content-10\"}' data-wp-init=\"callbacks.init\">\n\t\t<div class=\"accordion-header\">\n\t\t\t<button\n\t\t\t\taria-controls=\"accordion-content-10\"\n\t\t\t\tclass=\"btn btn-collapse\"\n\t\t\t\tdata-wp-bind--aria-expanded=\"state.isExpanded\"\n\t\t\t\tdata-wp-on--click=\"actions.onClick\"\n\t\t\t\tid=\"accordion-button-9\"\n\t\t\t\ttype=\"button\"\n\t\t\t>\n\t\t\t\tVideos\t\t\t<\/button>\n\t\t<\/div>\n\t\t<div\n\t\t\taria-labelledby=\"accordion-button-9\"\n\t\t\tclass=\"msr-accordion__content\"\n\t\t\tdata-wp-bind--inert=\"!state.isExpanded\"\n\t\t\tdata-wp-run=\"callbacks.run\"\n\t\t\tid=\"accordion-content-10\"\n\t\t>\n\t\t\t<div class=\"msr-accordion__body\">\n\t\t\t\t<ul>\n<li><a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/channel9.msdn.com\/Search\/?Term=code contracts\" target=\"_blank\">Channel 9 Videos<span class=\"sr-only\"> (opens in new tab)<\/span><\/a><\/li>\n<li><a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/channel9.msdn.com\/Blogs\/Peli\/Code-Contracts-Editor-Extensions\" target=\"_blank\">Visual Studio 2010 Editor Extensions<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> (21 September 2010)<\/li>\n<li><a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/channel9.msdn.com\/posts\/martinesmann\/Code-Contracts-and-Pex-Power-Charge-Your-Assertions-and-Unit-Tests\/\" target=\"_blank\">Pex and Code Contracts<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> on their Danish tour! (21 May 2010)<\/li>\n<li><a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/channel9.msdn.com\/posts\/Peli\/Getting-started-with-Code-Contracts-in-Visual-Studio-2008\/\" target=\"_blank\">Getting Started with Code Contracts<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> (23 February 2009)<\/li>\n<li><a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/channel9.msdn.com\/posts\/Peli\/Xml-Documentation-from-Code-Contracts-for-Net\/\" target=\"_blank\">Code Contracts Documentation<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> (10 August 2009)<\/li>\n<li><a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/channel9.msdn.com\/posts\/Peli\/Static-Checking-with-Code-Contracts-for-NET\/\" target=\"_blank\">Code Contracts Static Checker<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> (22 December 2009) Also available in <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/channel9.msdn.com\/posts\/Peli\/Analisi-statica-con-i-Code-Contracts-per-NET\/\" target=\"_blank\">Italian<span class=\"sr-only\"> (opens in new tab)<\/span><\/a>!<\/li>\n<li><a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/channel9.msdn.com\/posts\/Peli\/The-Synergy-of-Code-Contracts-and-Pex\/\" target=\"_blank\">Code Contracts and Pex<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> (23 April 2009) Also available in <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/channel9.msdn.com\/posts\/Peli\/Code-Contracts-et-Pex-pour-NET\/\" target=\"_blank\">French<span class=\"sr-only\"> (opens in new tab)<\/span><\/a>!<\/li>\n<li><a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"http:\/\/channel9.msdn.com\/pdc2008\/TL51\/\">PDC2008 Presentation<span class=\"sr-only\"> (opens in new tab)<\/span><\/a><\/li>\n<li>PDC2009 Presentation (17 November 2009)<\/li>\n<li><a href=\"http:\/\/www.microsoft.com\/italy\/beit\/Msdn.aspx?video=cc04ad96-86d5-4b7d-ae84-f1d8de27b2c1\" target=\"_self\">Francesco Logozzo introduces the Code Contracts API<\/a> to Italian programmers (in Italian).<\/li>\n<\/ul>\n\t\t\t<\/div>\n\t\t<\/div>\n\t<\/li>\n\t\t<li class=\"m-0\" data-wp-context='{\"id\":\"accordion-content-12\"}' data-wp-init=\"callbacks.init\">\n\t\t<div class=\"accordion-header\">\n\t\t\t<button\n\t\t\t\taria-controls=\"accordion-content-12\"\n\t\t\t\tclass=\"btn btn-collapse\"\n\t\t\t\tdata-wp-bind--aria-expanded=\"state.isExpanded\"\n\t\t\t\tdata-wp-on--click=\"actions.onClick\"\n\t\t\t\tid=\"accordion-button-11\"\n\t\t\t\ttype=\"button\"\n\t\t\t>\n\t\t\t\tCode Contracts in the News and Blogs\t\t\t<\/button>\n\t\t<\/div>\n\t\t<div\n\t\t\taria-labelledby=\"accordion-button-11\"\n\t\t\tclass=\"msr-accordion__content\"\n\t\t\tdata-wp-bind--inert=\"!state.isExpanded\"\n\t\t\tdata-wp-run=\"callbacks.run\"\n\t\t\tid=\"accordion-content-12\"\n\t\t>\n\t\t\t<div class=\"msr-accordion__body\">\n\t\t\t\t<ul>\n<li>Sputnik coding gets started with CodeContracts, Nov 2011<\/li>\n<li>A five part series by <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/msdn.microsoft.com\/\/magazine\/ee532098.aspx?sdmr=DinoEsposito&sdmi=authors\" target=\"_blank\">Dino Esposito<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> in the Cutting Edge column from <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" title=\"\" href=\"http:\/\/msdn.microsoft.com\/en-us\/magazine\/default.aspx\" target=\"_blank\">MSDN Magazine<span class=\"sr-only\"> (opens in new tab)<\/span><\/a>:\n<ul>\n<li><a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" title=\"\" href=\"http:\/\/msdn.microsoft.com\/en-us\/magazine\/f1a5a4ae-a5e9-4727-a070-0259235313ea\" target=\"_blank\">Give Your Classes a Software Contract<span class=\"sr-only\"> (opens in new tab)<\/span><\/a>, April 2011<\/li>\n<li><a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" title=\"\" href=\"http:\/\/msdn.microsoft.com\/en-us\/magazine\/8a0c1b3a-38ea-460f-bad6-71e2309ee152\" target=\"_blank\">Code Contract Settings in Visual Studio 2010<span class=\"sr-only\"> (opens in new tab)<\/span><\/a>, May 2011<\/li>\n<li><a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" title=\"\" href=\"http:\/\/msdn.microsoft.com\/en-us\/magazine\/17c54b15-503e-403d-8944-670d7e592aad\" target=\"_blank\">Invariants and Inheritance in Code Contracts<span class=\"sr-only\"> (opens in new tab)<\/span><\/a>, June 2011<\/li>\n<li><a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" title=\"\" href=\"http:\/\/msdn.microsoft.com\/en-us\/magazine\/06518642-93c5-4ccc-bfe2-40503b1da267\" target=\"_blank\">Inheritance and the Liskov Prinicple<span class=\"sr-only\"> (opens in new tab)<\/span><\/a>, July 2011<\/li>\n<li><a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" title=\"\" href=\"http:\/\/msdn.microsoft.com\/en-us\/magazine\/b000c58b-18ad-4311-bb6c-21ffbcd3a90f\" target=\"_blank\">Static Code Analysis and Code Contracts<span class=\"sr-only\"> (opens in new tab)<\/span><\/a>, August 2011<\/li>\n<\/ul>\n<\/li>\n<li><a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/devjourney.com\/blog\/code-contracts-part-1-introduction\/\" target=\"_blank\">Kevin Hazzard<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> does a multiple part introduction. Now up to <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/devjourney.com\/blog\/code-contracts-part-8-an-interview-with-the-microsoft-code-contracts-team\/\" target=\"_blank\">Chapter 8<span class=\"sr-only\"> (opens in new tab)<\/span><\/a>!<\/li>\n<li>Jasper shows how contracts work for <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/devjourney.com\/blog\/code-contracts-part-5-abstract-types-and-interfaces\/\" target=\"_blank\">abstract types and interfaces <span class=\"sr-only\"> (opens in new tab)<\/span><\/a>&#8212; June 6, 2010<\/li>\n<li>Derik Whittaker <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/www.dimecasts.net\/Content\/WatchEpisode\/172\" target=\"_blank\">looks at how to use Assert, Assume, ForAll, and Exists <span class=\"sr-only\"> (opens in new tab)<\/span><\/a>&#8212; May 31, 2010<\/li>\n<li>Jasper takes <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/devjourney.com\/blog\/code-contracts-part-4-object-invariants\/\" target=\"_blank\">a look at object-invariants<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> &#8212; May 30, 2010<\/li>\n<li>Gunnar Peipman shows how to <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/weblogs.asp.net\/gunnarpeipman\/archive\/2010\/05\/28\/code-contracts-validating-arrays-and-collections.aspx\" target=\"_blank\">validate arrays and collections <span class=\"sr-only\"> (opens in new tab)<\/span><\/a>with CodeContracts &#8212; May 28, 2010<\/li>\n<li>Exoteric uses <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/xosfaere.wordpress.com\/2010\/05\/28\/nine-ways-to-not-die\/\" target=\"_blank\">CodeContracts in modelling die rolls <span class=\"sr-only\"> (opens in new tab)<\/span><\/a>&#8212; May 28, 2010<\/li>\n<li><a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" title=\"\" href=\"http:\/\/devjourney.com\/blog\/code-contracts-part-3-postconditions\/\" target=\"_blank\">Jasper <span class=\"sr-only\"> (opens in new tab)<\/span><\/a>examines postconditions &#8212; May 27, 2010<\/li>\n<li>Gunnar Peipman looks at how the <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/weblogs.asp.net\/gunnarpeipman\/archive\/2010\/05\/22\/code-contracts-how-they-look-after-compiling.aspx\" target=\"_blank\">compiled contracts look after rewriting<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> &#8212; May 22, 2010<\/li>\n<li><a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" title=\"\" href=\"http:\/\/devjourney.com\/blog\/code-contracts-part-2-preconditions\/\" target=\"_blank\">Jasper <span class=\"sr-only\"> (opens in new tab)<\/span><\/a>looks a preconditions in more detail &#8212; May 20, 2010<\/li>\n<li><a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" title=\"\" href=\"http:\/\/devjourney.com\/blog\/code-contracts-part-1-introduction\/\" target=\"_blank\">Jasper <span class=\"sr-only\"> (opens in new tab)<\/span><\/a>is starting a series on CodeContracts &#8212; May 17, 2010<\/li>\n<li><a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/fernandomachadopirizen.wordpress.com\/2010\/05\/08\/pex-and-contracts-better-together\/\" target=\"_blank\">Fernando Machado P\u00edriz <span class=\"sr-only\"> (opens in new tab)<\/span><\/a>shows off the beneficial interaction of CodeContracts and PeX &#8212; May 8, 2010<\/li>\n<li><a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/weblogs.asp.net\/gunnarpeipman\/archive\/2010\/05\/06\/code-contracts-unit-testing-contracted-code.aspx\" target=\"_blank\">Gunnar Peipman<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> shows examples of CodeContracts and testing &#8212; May 6, 2010<\/li>\n<li><a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/blog.yoot.be\/index.php\/2010\/03\/22\/value-object-with-c-4-0\/\" target=\"_blank\">YOOT<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> uses contracts in an implementation of Value Objects &#8212; March 22, 2010<\/li>\n<li><a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/xosfaere.wordpress.com\/2010\/03\/15\/application-of-implication\/\" target=\"_blank\">xosfaere <span class=\"sr-only\"> (opens in new tab)<\/span><\/a>ponders implication operators &#8212; March 15, 2010<\/li>\n<li>Jeffrey Richter talks about Code Contracts at <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/www.wintellect.com\/CS\/blogs\/bvananda\/archive\/2010\/03\/05\/wintellect-devweek-in-london-march-15th-19th.aspx\" target=\"_blank\">DevWeek Conference <span class=\"sr-only\"> (opens in new tab)<\/span><\/a>&#8212; March 16, 2010<\/li>\n<li><a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/weblogs.asp.net\/abdullaabdelhaq\/archive\/2010\/03\/05\/introducing-net-4-0-amp-asp-net-4-0-jordev.aspx\" target=\"_blank\">Jordan .NET User Group <span class=\"sr-only\"> (opens in new tab)<\/span><\/a>covers Code Contracts &#8212; Feb 25, 2010<\/li>\n<li><a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/xosfaere.wordpress.com\/2010\/02\/28\/extreme-code-contracts\/\" target=\"_blank\">xosfaere <span class=\"sr-only\"> (opens in new tab)<\/span><\/a>provides an introduction &#8212; Feb 28, 2010<\/li>\n<li>Doug Finke <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/dougfinke.com\/blog\/index.php\/2010\/02\/27\/static-checking-net-code-contracts\/\" target=\"_blank\">showcases the static checker<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> &#8212; Feb 27, 2010<\/li>\n<li>Developer days in Scottland has a <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/blog.colinmackay.net\/archive\/2010\/02\/27\/Agenda-for-DDD-Scotland-2010.aspx\" target=\"_blank\">session <span class=\"sr-only\"> (opens in new tab)<\/span><\/a>on CodeContracts &#8212; Feb 27, 2010<\/li>\n<li>Matthias Jauernig <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/www.minddriven.de\/?p=700\" target=\"_blank\">compares Design-by-contract and Test-driven-development <span class=\"sr-only\"> (opens in new tab)<\/span><\/a>part 4 &#8212; Feb 14, 2010<\/li>\n<li>Roy Dictus discusses <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/www.agilitylux.com\/practices\/code-contracts-by-example\/\" target=\"_blank\">CodeContracts by Example<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> &#8212; Feb 3, 2010<\/li>\n<li>Matthias Jauernig <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/www.minddriven.de\/?p=654\" target=\"_blank\">compares Design-by-contract and Test-driven-development <span class=\"sr-only\"> (opens in new tab)<\/span><\/a>part 3 &#8212; Feb 6, 2010<\/li>\n<li>Rober McCarter talks about <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/robertmccarter.wordpress.com\/2010\/02\/05\/code-contracts\/\" target=\"_blank\">suppressing warnings<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> when using CodeContracts &#8212; Feb 5, 2010<\/li>\n<li>rantings in the dark gets inspired and creates <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/kinsey.no\/blog\/index.php\/2010\/02\/03\/jscontract-code-contracts-for-javascript\/\" target=\"_blank\">jsContract<span class=\"sr-only\"> (opens in new tab)<\/span><\/a>, i.e., CodeContracts for Javascript &#8212; Feb 3, 2010<\/li>\n<li>Matthias Jauernig <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/www.minddriven.de\/?p=638\" target=\"_blank\">compares Design-by-contract and Test-driven-development <span class=\"sr-only\"> (opens in new tab)<\/span><\/a>part 2 &#8212; Jan 30, 2010<\/li>\n<li>Matthias Jauernig <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/www.minddriven.de\/?p=618\" target=\"_blank\">compares Design-by-contract and Test-driven-development <span class=\"sr-only\"> (opens in new tab)<\/span><\/a>part 1 &#8212; Jan 23, 2010<\/li>\n<li>Martin Lapierre&#8217;s <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/www.code-magazine.com\/Article.aspx?quickid=1001101\" target=\"_blank\">article <span class=\"sr-only\"> (opens in new tab)<\/span><\/a>on CodeContracts and Pex &#8212; Jan, 2010<\/li>\n<li>DaveT provides an <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/blogs.msdn.com\/davethompson\/archive\/2010\/01\/12\/code-contracts-with-net-4-0.aspx\" target=\"_blank\">overview of CodeContracts<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> &#8212; Jan 12, 2010<\/li>\n<li>Francesco Logozzo <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/channel9.msdn.com\/posts\/Peli\/Static-Checking-with-Code-Contracts-for-NET\/\" target=\"_blank\">talks about the static checker on Channel 9<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> &#8212; Dec 22, 2009<\/li>\n<li>Peli and MaF talk about <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/channel9.msdn.com\/posts\/Peli\/Code-Contracts-et-Pex-pour-NET\/\" target=\"_blank\">CodeContracts in French<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> &#8212; Dec 17, 2009<\/li>\n<li>Blog entry on <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/techiethings.blogspot.com\/2009\/12\/nunit-and-microsoft-contracts-library.html\" target=\"_blank\">CodeContracts and NUnit <span class=\"sr-only\"> (opens in new tab)<\/span><\/a>&#8212; Dec 13, 2009<\/li>\n<li>Dino Esposito talks about <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/dotnetslackers.com\/articles\/net\/Code-Contracts-Preview-Assert-Assume.aspx\" target=\"_blank\">asserts and assumes<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> &#8212; Nov 11, 2009<\/li>\n<li>Relentless Development blog <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/relentlessdevelopment.wordpress.com\/2009\/11\/11\/code-contracts-the-future\/\" target=\"_blank\">ponders the future with CodeContracts<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> &#8212; Nov 11, 2009<\/li>\n<li>Vaideeswaran covers <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/vaideeswaranr.blogspot.com\/2009\/11\/vs-2010-and-net-40-series-code.html\" target=\"_blank\">postconditions and invariants<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> &#8212; Nov 3, 2009<\/li>\n<li>Vaideeswaran covers <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/vaideeswaranr.blogspot.com\/2009\/10\/visual-studio-2010-and-net-40-series.html\" target=\"_blank\">preconditions and postconditions<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> &#8212; Oct 29, 2009<\/li>\n<li>Dino Esposito <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/dotnetslackers.com\/articles\/net\/Code-Contracts-Preview-Invariants.aspx\" target=\"_blank\">introduces invariants<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> &#8212; Oct 21, 2009<\/li>\n<li>Eric Swanson has <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/blogs.us.sogeti.com\/ericswanson\/2009\/10\/13\/microsoft-code-contracts\/\" target=\"_blank\">a slide deck on Code Contracts<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> &#8212; Oct 13, 2009<\/li>\n<li>Dino Esposito <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/dotnetslackers.com\/articles\/net\/Code-Contracts-Preview-PostConditions.aspx\" target=\"_blank\">introduces postconditions<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> &#8212; Oct 2, 2009<\/li>\n<li>Sankarsan <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/codingndesign.com\/blog\/?p=32\" target=\"_blank\">blogs about CodeContracts <span class=\"sr-only\"> (opens in new tab)<\/span><\/a>&#8212; Sep 27, 2009<\/li>\n<li>Matthias Jauernig talks about the <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/www.leading-edge-dev.de\/?p=447\" target=\"_blank\">documentation feature of CodeContracts <span class=\"sr-only\"> (opens in new tab)<\/span><\/a>&#8212; Sep 13, 2009<\/li>\n<li>Dino Esposito <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"http:\/\/dotnetslackers.com\/articles\/net\/Code-Contracts-Preview-Preconditions.aspx\">introduces preconditions<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> &#8212; Sep 9, 2009<\/li>\n<li>Jani J\u00e4rvinen writes <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/www.developer.com\/design\/article.php\/3836626\/Understanding-and-Benefiting-from-\" target=\"_blank\">an introduction to Code Contracts<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> &#8212; Sep 4, 2009<\/li>\n<li>Jomit <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/jomit.blogspot.com\/2009\/09\/spec-code-contracts-in-net-40.html\" target=\"_blank\">blogs about Code Contracts <span class=\"sr-only\"> (opens in new tab)<\/span><\/a>&#8212; Sep 1, 2009<\/li>\n<li>Matt describes<a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/www.softwareproductdev.com\/2009\/08\/code-contracts-in-net-40-contracts-on-interfaces\/\" target=\"_blank\"> how contracts are written on interfaces <span class=\"sr-only\"> (opens in new tab)<\/span><\/a>&#8212; Aug 28, 2009<\/li>\n<li>Matt describes <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/www.softwareproductdev.com\/2009\/08\/code-contracts-in-net-40-object-invariants\/\" target=\"_blank\">object invariants <span class=\"sr-only\"> (opens in new tab)<\/span><\/a>&#8212; Aug 27, 2009<\/li>\n<li>Matt describes<a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/www.softwareproductdev.com\/2009\/08\/code-contracts-in-net-40-post-conditions\/\" target=\"_blank\"> postconditions <span class=\"sr-only\"> (opens in new tab)<\/span><\/a>&#8212; Aug 26, 2009<\/li>\n<li>winSharp <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/winsharp93.wordpress.com\/2009\/08\/16\/contracts-as-a-part-of-the-type-system\/\" target=\"_blank\">talks about interface contracts<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> &#8212; Aug 16, 2009<\/li>\n<li>winSharp <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/winsharp93.wordpress.com\/2009\/08\/07\/no-interface-without-contract-part-6-object-invariants\/\" target=\"_blank\">talks object invariants <span class=\"sr-only\"> (opens in new tab)<\/span><\/a>&#8212; Aug 7, 2009<\/li>\n<li>karthick discusses <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/www.reservedbits.blogspot.com\/2009\/07\/code-contracts-makes-validation-easy.html\" target=\"_blank\">validation using CodeContracts <span class=\"sr-only\"> (opens in new tab)<\/span><\/a>&#8212; Jul 25, 2009<\/li>\n<li>winSharp provides <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/winsharp93.wordpress.com\/2009\/07\/19\/no-interface-without-contract-part-5-using-microsoft-code-contracts\/\" target=\"_blank\">an overview of CodeContracts<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> &#8212; Jul 19, 2009<\/li>\n<li>Stefano Ricciardi discusses <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/stefanoricciardi.com\/2009\/07\/17\/code-contracts-and-inheritance\/\" target=\"_blank\">Contracts and inheritance<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> &#8212; Jul 17, 2009<\/li>\n<li>winSharp discusses <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/winsharp93.wordpress.com\/2009\/07\/13\/no-interface-without-contract-part-4-writing-down-pre-and-postconditions\/\" target=\"_blank\">pro and cons of parameter validation with CodeContracts<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> &#8212; Jul 13, 2009<\/li>\n<li>Derik Whittaker <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/www.dimecasts.net\/Casts\/CastDetails\/123\" target=\"_blank\">posts a video on CodeContracts<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> &#8212; Jul 2, 2009<\/li>\n<li>Derik Whittaker <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/devlicio.us\/blogs\/derik_whittaker\/archive\/2009\/07\/01\/code-contracts-primer-part-5-utilizing-object-invariants.aspx\" target=\"_blank\">discusses object invariants<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> &#8212; Jul 1, 2009<\/li>\n<li>Stefano Ricciardi <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/stefanoricciardi.com\/2009\/06\/26\/introduction-to-microsoft-code-contracts-with-visual-studio-2008\/\" target=\"_blank\">introduces CodeContracts <span class=\"sr-only\"> (opens in new tab)<\/span><\/a>&#8212; Jun 26, 2009<\/li>\n<li><a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/blogs.zdnet.com\/microsoft\/?p=2209\" target=\"_blank\">Mary Jo Foley<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> &#8212; March 2, 2009<\/li>\n<li><a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"http:\/\/blogs.techrepublic.com.com\/programming-and-development\/?p=917\">TechRepublic<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> &#8212; March 2, 2009<\/li>\n<li><a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/www.eweek.com\/c\/a\/Application-Development\/Microsoft-Delivers-Code-Contracts-for-NET\/\" target=\"_blank\">eWeek<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> &#8212; February 24, 2009<\/li>\n<li><a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/blogs.msdn.com\/somasegar\/archive\/2009\/02\/23\/devlabs-code-contracts-for-net.aspx\" target=\"_blank\">Soma&#8217;s Blog<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> &#8212; February 24, 2009<\/li>\n<li><a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" href=\"http:\/\/www.infoworld.com\/article\/09\/02\/24\/Microsoft_offers_language_agnostic_coding_technology_1.html\" target=\"_blank\">InfoWorld<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> &#8212; February 24, 2009<\/li>\n<\/ul>\n\t\t\t<\/div>\n\t\t<\/div>\n\t<\/li>\n\t\t\t\t\t\t<\/ul>\n\t<\/div>\n\t\n","protected":false},"excerpt":{"rendered":"<p>Code Contracts provide a language-agnostic way to express coding assumptions in .NET programs. The contracts take the form of preconditions, postconditions, and object invariants. Contracts act as checked documentation of your external and internal APIs. The contracts are used to improve testing via runtime checking, enable static contract verification, and documentation generation. Code Contracts is [&hellip;]<\/p>\n","protected":false},"featured_media":0,"template":"","meta":{"msr-url-field":"","msr-podcast-episode":"","msrModifiedDate":"","msrModifiedDateEnabled":false,"ep_exclude_from_search":false,"_classifai_error":"","footnotes":""},"research-area":[13560],"msr-locale":[268875],"msr-impact-theme":[],"msr-pillar":[],"class_list":["post-169922","msr-project","type-msr-project","status-publish","hentry","msr-research-area-programming-languages-software-engineering","msr-locale-en_us","msr-archive-status-active"],"msr_project_start":"2008-10-28","related-publications":[160384,166172,165514,163736,163528,163288,163277,163274,162502,161671,161457,161402,156238,160268,160267,160230,159954,158436,158128,157493,156866,156241,156240,156239],"related-downloads":[],"related-videos":[188433],"related-groups":[],"related-events":[],"related-opportunities":[],"related-posts":[307343],"related-articles":[],"tab-content":[],"slides":[],"related-researchers":[],"msr_research_lab":[199565],"msr_impact_theme":[],"_links":{"self":[{"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-project\/169922","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-project"}],"about":[{"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/types\/msr-project"}],"version-history":[{"count":3,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-project\/169922\/revisions"}],"predecessor-version":[{"id":281603,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-project\/169922\/revisions\/281603"}],"wp:attachment":[{"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/media?parent=169922"}],"wp:term":[{"taxonomy":"msr-research-area","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/research-area?post=169922"},{"taxonomy":"msr-locale","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-locale?post=169922"},{"taxonomy":"msr-impact-theme","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-impact-theme?post=169922"},{"taxonomy":"msr-pillar","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-pillar?post=169922"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}