一、Pre-condition和Post-condition
- 前置条件:对客户端的约束,在使用方法时必须满足的条件
- 后置条件:对开发者的约束,方法结束时必须满足的条件
- 契约:如果前置条件满足了,后置条件必须满足
二、Specification撰写
- @param : 表明参数的前置条件
- @throws : 表明异常
- @effects : 表明函数运行结果,包括函数可能会对参数造成的影响
- @returns : 表明后置条件
三、确定性与陈述性
- 确定性(deterministic) : 仅有一个合法输出?
- 陈述性(declarative): 没有描述计算过程?
四、Specification的强度
概念
- S2的规约强于S1 $ <=>$ S2前置条件更弱,后置条件更强
比较强度的方法
- 验证S2的前置条件更弱
- 验证S2在S1的前置条件下,S2的后置条件更强