Code Contractsは、Design by Contract(リンク)概念の.NET実装である。.NET 4.0で提供されることになっていたが、Code ContractsはすでにDevLabs(リンク)からダウンロードで利用可能である。Contractsは、APIの使用にある制限を課すので、プログラミングがより安全になり、検証が厳しくなるので、実行時に予期せぬエラーの数が少なくなる。
ContractによるDesignまたはContractによるProgrammingは、プログラミングでは新しい概念ではなく、多くの言語で既にそ のような実装がある。Code Contractはこのプログラミングの実例を.NETにもたらしている。基本的な概念は、関連する2者間(クライアント(呼び出し側)とサプライヤ(呼 び出されるAPI))でコントラクトを成立させることである。契約条件を遵守することで、クライアントはサプライヤが期待される結果を提供するとますます 確信することができ、サプライヤはクライアントが適切な呼び出しをするとますます自信を持つことができる。
Code Contractsで利用可能な3つの契約条件は、事前条件、オブジェクト不変条件および事後条件である。事前条件は、たとえばコンストラクタやメソッド が正しいパラメータ値を使って呼び出されているかを検証するために使用される。事後条件は、たとえば戻り値が適切かどうかを検証するために使用される。オ ブジェクト不変条件は、オブジェクトに特定の条件を課して、不正な値を取得しないようにするために使用される。
これはユニットテストに非常によく似ているが、こうした検証がビルド時に実行されるという点が新しい。コンパイラは、Contracts経由で特定の チェックをおこない、すべての指定条件が満たされていることを確認し、満たされていない場合、警告を出す。即座にプログラマは条件が満たされないかどうか を確認し、コードを実行する前に是正措置を講じる。
現在、DevLabsチームはプロジェクト向けに作成されたドキュメンテーションにContractsを組み込む作業をしている。APIドキュメンテーションを読むことで、すべての契約条件が指定されていることを確認できる。
Code Contractsを使用する最終的な成果は、より良く、より安全なコードであり、外部APIのより適切な使用であり、結局はより良いソフトウェアである。
役立つリンク:Code Contractsオンラインドキュメンテーション(PDF)、Microsoft Research Code Contracts Webサイト(リンク)、関連フォーラム(リンク)。