Code ContractsとPex

マイクロソフトのDevLabsで公開されている.NETにおける設計とテストにおけるテクノロジーであるCode ContractsとPexを使ってみました。
結論から言うとかなり使えそうでひょっとしたら開発スタイルを変え可能性があると思いました。
かなり奥が深そうでまだ可能性と限界について完全に理解できているわけではないのですがまだ日本語で紹介している情報が少ないようなので書きたいと思います。


Code Contractsは.NETで「契約による設計(DbC:Design By Contract)」を実現するためのランタイムとVisual Studioに統合される開発環境です。
つまりC#などの言語で契約、つまりメソッド毎に「事前条件 (precondition)」「事後条件 (postcondition)」とクラス(インスタンス)における「不変条件 (invariant)」を記述することで静的検証と実行時の検証をサポートします。
Code Contractsではインターフェイスに契約を記述してそのインターフェイスを実装するすべてのクラスに契約を適用することができてこの点が興味深いです。
Pexは対象のメソッドの構造を解析してコードカバレッジが100%となるパラメータの組み合わせを生成してユニットテストコードを自動生成します。
Code ContractsとPexでどんなことができるかはマイクロソフトのビデオを見るとわかりやすいと思います。
Manuel Fahndrich and Peli de Halleux - The Synergy of Code Contracts and Pex
英語のビデオですがC#がわかる人であれば映像だけで理解できると思います。
更に詳細の情報はMicrosoft Researchのそれぞれのプロジェクトのページにある他のビデオやドキュメントを見るのが良いです。
Code Contracts - Microsoft Research
Pex and Moles - Isolation and White Box Unit Testing for .NET - Microsoft Research


Code ContractsとPexの商用評価版はDevLabsのサイトからダウンロードして利用することができます。
ただこれらの機能のすべてを利用するためにはVisual Studio Teamエディションが要求されます。
Teamエディションを使用しない場合にはVisual Studio 2008または2010で利用できますがCode Contractsでは静的評価が利用できません。
またPexではTeamエディションがなければアカデミック版しか利用できませんが機能的な制限は無いようです。
あくまでも個人的な評価ということであればアカデミック版でも良いと思います。
私は調査のためにVisual Studio 2010 Ultimateの評価版(ベータ2)を利用しています。
Visual Studio 2010 Ultimateの評価版は現在以下のページからダウンロードできます。
http://www.microsoft.com/japan/visualstudio/products/2010/default.mspx
Code ContractsはDevLabsの以下のページからダウンロードできます。
http://msdn.microsoft.com/en-us/devlabs/dd491992.aspx
Pexの商用評価版はDevLabsの以下のページからダウンロードできます。
http://msdn.microsoft.com/en-us/devlabs/cc950525.aspx


他にも色々と書けばきりがないのですが、とりあえず導入のご紹介までとします。
また機会があれば書きたいと思います。


(2010-02-08:追記)
Code Contractsについて具体的に紹介しているブログがありました。
とある契約の備忘目録。契約による設計(Design by Contract)で信頼性の高いソフトウェアを構築しよう。 - Bug Catharsis
概要を見たい場合はこちらのサイトで丁寧に紹介されています。
ただ「契約による設計は性悪説的思想である」とは思いません。
コミュニケーションを促進してくれたりうっかりが重大な結果になることを救ってくれるものだと思います。
やはり実際に使ったときの印象は文章では分かりにくいので上記のビデオを見ることをお勧めしたいと思います。