C#での契約プログラミング – おまけ

前回紹介したCode Contract、動的なコントラクトの一部をご紹介しましたが他にも「インターフェースに対してコントラクトを設定する」とか、付加情報をもっと付けるとか、色々あります。また、動的な解析以外にも [静的な解析] および、[doc出力機能] が備わっています。これらをさらっと見ておきます。

 

1.静的な解析

これはCodeContractをインストールした上で、プロジェクトのプロパティから[Code Contracts]を選択し、Static Checkingにチェックを付けます。

static_analysis

コントラクトが静的に守られているかをチェックしてくれるものです。例えば、public APIのXMLドキュメントが用意されていなかったら、

codecontractの静的解析

こんな感じでWarningが出てきます(アウトプットウィンドウにも)。無効化したい場合は

namespace CodeContractSample
{
    using System.Diagnostics.Contracts;

    /// <summary>
    /// クラスInvariantSampleのサマリーです
    /// </summary>
    [ContractVerification(false)]
    public class InvariantSample
    {
        /// <summary>
        /// TestPropertyのサマリーです
        /// </summary>
        public int TestProperty { get; set; }

        [ContractInvariantMethod]
        private void ObjectInvariant()
        {
            Contract.Invariant(TestProperty > 0);
        }
    }
}

上のようにContractVerificationAttributeにfalseを設定しておきます。HELPドキュメントにもありますが、正確に静的解析させるにはCodeContractの深い理解が必要であるようです。パフォーマンスの都合もありますし、”おまけ”で扱うような軽い気持ちでは正しくは理解できなそうです;

 

2.doc出力

こちらは簡単です。同じくプロジェクトのプロパティから [Code Contracts] の [Emit contracts into XML doc file] にチェックを付けてビルドするだけです。

output_docこれをいつぞやご紹介したSand castleへの入力とすると、

contract_doc

こんな感じにContractsの項目ができます。ユーザにAPIを公開するときはContractもはっきり示しておきたいものです。

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中