契約による設計

提供: MonoBook
2012年5月17日 (木) 03:10時点におけるimported>Administratorによる版 (ページの作成:「'''契約による設計'''(Design By Contract、でざいん・ばい・こんとらくと)とは、ソースコードの中にプログラムが満たす...」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

契約による設計(Design By Contract、でざいん・ばい・こんとらくと)とは、ソースコードの中にプログラムが満たすべき仕様(契約)についての記述を盛り込み、設計の安全性を高めるプログラミングの技法のひとつである。契約プログラミング(Programming By Contract)や、Design by Contract の頭文字であるDbC (でぃーびーしー) とよばれることもある。

たとえば、あるサブルーチン引数があるとして、ぬるぽぬるりを防ぐために引数のnullチェック境界チェックを行う、などというコーディング規約に近いものを、プログラミング言語仕様として半ば強制することで、静的コード解析などを的確に行えるようにし、プログラムの品質を向上させようというものである。

条件の種類

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

事前条件 (precondition) 
サブルーチンの開始時に、これを呼ぶ側で保証すべき性質。
事後条件 (postcondition) 
サブルーチンが、終了時に保証すべき性質。
不変条件 (invariant) 
クラスなどのオブジェクトがその外部に公開しているすべての操作の開始時と終了時に保証されるべき、オブジェクト毎に共通した性質。

コードを呼ぶ側が事前条件不変条件を満たす義務を負うことで、呼ばれたコードはその条件が恒真であるとの前提を利益として得る。

引き換えに、呼ばれたコードは事後条件と不変条件を義務として負い、呼ぶ側の利益としてこれを保証する。

契約による設計をサポートする主な言語

ここに記載するプログラミング言語はあくまで一例でありすべてではない。

.NET Framework 4.0

.NET Framework 4.0では、コードコントラクトCode Contracts)という名前の機能が追加され、プログラミング言語レベルではなく、ランタイムレベルで「契約による設計」に対応した。これにより.NET Framework系のすべてのプログラミング言語が対応することとなった。

また、Visual Studio用のアドオンも提供されており、契約による設計のキモである静的チェックドキュメントの自動生成も行いえる。とくに静的チェックはとても重要な要素であり、これが使えないとただのコーディング規約程度の話で終わってしまい、魅力の9割が失われる。なお、アドオンが使えないVisual Studio Expressでは当然使えない。

コードコントラクトを利用するためのライブラリはSystem.Diagnostics.Contracts 名前空間にあり、事前条件事後条件不変条件などの表すための静的クラスが用意されている。

D言語

Eiffel

Eiffelは契約による設計を提唱・サポートした一番最初のプログラミング言語だそうだ。まったく知らない。

Sather

Eiffelから派生したサブセットで独自の進化を遂げてものらしい。 まったく知らない。

関連項目

参考文献


外部リンク