「契約による設計」の版間の差分
編集の要約なし |
編集の要約なし |
||
| 1行目: | 1行目: | ||
'''契約による設計''' | '''契約による設計'''(英語:Design By Contract、でざいん・ばい・こんとらくと)とは、[[ソースコード]]の中に[[プログラム]]が満たすべき[[仕様]](契約)についての記述を盛り込み、[[設計]]の安全性を高める[[プログラミング]]の技法のひとつである。'''契約プログラミング'''(Programming By Contract)や、Design by Contract の頭文字である'''DbC''' (でぃーびーしー) とよばれることもある。 | ||
たとえば、ある[[サブルーチン]]の[[引数]]があるとして、[[ぬるぽ]]や[[ぬるり]]を防ぐために引数の[[nullチェック]]や[[境界チェック]]を行う、などという[[コーディング規約]]に近いものを、[[プログラミング言語]]の[[仕様]]として半ば強制することで、[[静的コード解析]] | たとえば、ある[[サブルーチン]]の[[引数]]があるとして、[[ぬるぽ]]や[[ぬるり]]を防ぐために引数の[[nullチェック]]や[[境界チェック]]を行う、などという[[コーディング規約]]に近いものを、[[プログラミング言語]]の[[仕様]]として半ば強制することで、[[静的コード解析]]やドキュメント生成、[[単体テスト]](のテンプレート生成)などを的確かつ効率的に行えるようにし、[[プログラム]]の品質を向上させようというものである。 | ||
== 条件の種類 == | == 条件の種類 == | ||
契約は、コードの利用条件が満たされることによって成立する。それら条件は、満たすべきタイミングと主体によって以下の3種類に分けられる。 | |||
; [[事前条件]] (precondition) :[[サブルーチン]] | ; [[事前条件]] (precondition) :[[サブルーチン]]の開始時に、これを呼ぶ側で保証すべき性質。たとえばというか、ほぼ引数の値のチェックである。 | ||
; [[事後条件]] (postcondition) :[[サブルーチン]]が、終了時に保証すべき性質。たとえば「[[戻り値]]は絶対に[[null]]を返さない」などを決めておくことを言う。 | ; [[事後条件]] (postcondition) :[[サブルーチン]]が、終了時に保証すべき性質。たとえば「[[戻り値]]は絶対に[[null]]を返さない」などを決めておくことを言う。 | ||
; [[不変条件]] (invariant) :[[クラス]]などの[[オブジェクト]]がその外部に公開しているすべての操作の開始時と終了時に保証されるべき、オブジェクト毎に共通した性質。 | ; [[不変条件]] (invariant) :[[クラス]]などの[[オブジェクト]]がその外部に公開しているすべての操作の開始時と終了時に保証されるべき、オブジェクト毎に共通した性質。 | ||