契約による設計(Design By Contract)

プログラムコードの中にプログラムが満たすべき仕様について記述を盛り込むことで設計の安全性を高める。

仕様の記述を盛り込む

C#ではAssertを使用する。

System.Diagnostics.Debug.Assert(//条件)

  条件にはtrueになる条件を記述する。
  AssertはDebugビルド時は処理されるが、それ以外では処理されない。

契約とは、コードの利用条件が満たされることによって成立する。
条件は満たすべきタイミングと主体によって、以下の3種類に分けられる。

  • 事前条件(Precondition)

サブルーチンの開始前に保証すべき性質。
主体は呼ぶ側
Assertについては、一般的にサブルーチンの最初で引数チェックを記述する。

  • 事後条件(Postcondition)

サブルーチンが終了時に保証すべき性質。
主体は呼ばれた側
Assertについては、一般的にサブルーチンのreturn前に戻り値のチェックを記述する。

  • 不変条件(Invariant)

オブジェクトがその外部に公開しているすべての操作の開始時と終了時に保証すべき、オブジェクトごとに共通した性質。
主体は呼ぶ側と呼ばれた側の両方