Contract(ソフトウェアにおける契約)

モジュールの境界(Interface)における、StructureとBehaviorの両面の約束。

二つの側面

側面 担うもの 内容
Structure的側面 型システム I/Fの形の定義——引数の型、戻り値の型、許容される状態
Behavior的側面 テスト 特定の入力に対する出力、状態遷移の正しさ

Contractは内部のImplementation(Structure + Behavior)を隠蔽しつつ、外部に対して何を約束するかを宣言する。

フラクタル構造

この Contract はすべての粒度で再帰的に現れる

スケール Contract の形
関数 関数シグネチャ + 単体テスト
モジュール 公開インターフェース + 統合テスト
システム API仕様 + E2Eテスト

良い Contract の条件

Contractの推論可能性——I/Fから内部のStructureが推察可能であること。

推察通りに動くことが「期待通り」と感じられ、それがRequirementsと合致すれば「正しい」と判断される。

関連概念

関連