Skip to content

规格

Specification · Formal specification · Behavioral specification

明确允许输入、状态、输出或执行轨迹的数学条件,是正确性与精化的比较基准。

条目类型
定义

形式陈述

从输入—输出关系到行为集合

规格规定哪些结果或行为被允许。对输入集合 I 与输出集合 O,它可以是关系

SI×O.

实现 f:IO 满足该规格,当且仅当

iDom(S),(i,f(i))S.

这里的全称量词只覆盖规格定义域;若预期输入被漏出 Dom(S),验证不会替需求补上它。关系也不必给每个输入唯一输出,多种结果可以同时正确。

有状态系统需要比较完整行为。令 Obs 把实现执行投影到规格可见的行为域 B,并定义

BehObs(M)={Obs(ρ):ρ 是 M 的允许执行}.

BSB 是规格允许的行为集合,则满足关系的统一形式是

MObsSBehObs(M)BS.

程序逻辑的前置/后置条件、状态机不变量、时序逻辑公式与并发对象的调用—返回历史,都是选择不同 BObs 后的规格。安全性质通过有限坏前缀排除行为,活性性质则约束完整无限执行。

量词域与 assume–guarantee

MS 只有在行为域、观察函数和量词范围固定后才有意义。必须说明收集全部路径还是最大路径、是否保留有限终止执行,以及公平性是否限制无限路径;这些不是记号自动携带的约定。

环境假设 A 与系统保证 G 可写成

BehObs(M)AG.

该式只约束满足 A 的行为。若 A=ABehObs(M)=,保证会真空成立,所以还要独立检查假设可满足且确实覆盖预期环境。

直觉

规格回答“哪些行为算正确”,实现回答“系统实际怎样产生行为”。证明逐一说明实现行为经观察后落入允许集合;反例搜索则尝试构造

BehObs(M)(BBS)

中的元素。测试只采样这个差集,模型检查或演绎证明才试图覆盖规定量词域中的全部行为;精化则比较两个允许集合谁更具体。

形式化不会保证需求本身正确。规格可能遗漏输入、允许过多行为、把环境责任错写给系统,甚至彼此矛盾。验证结论始终是“相对于这个规格正确”,不能替代需求评审。

例子与边界

可复算的关系规格

排序规格可要求输出 y 与输入 x 含有相同多重集合且非降排列;它不规定 quicksort、mergesort、稳定性或内部比较轨迹。这说明规格既可约束结果,又可有意隐藏实现策略。

整数平方根给出更小的手算例。对 nN,允许输出 rN 当且仅当

r2n<(r+1)2.

输入 n=10 时,r=3 满足 910<16r=210<9 为假而失败,r=41610 为假而失败。这个检查只使用输入—输出关系,不要求实现采用二分搜索还是逐次试探。

行为域选错时的失败

并发队列通常量化调用—返回历史,分布式复制协议还可能量化消息、故障与无限执行。若把两者都压成最终状态关系,实时顺序与进展责任会消失;最终数据相同不能证明中途返回值或可用性正确。

“程序没有崩溃”只是很弱的安全性质,不等于功能正确;“每个请求最终响应”是活性条件,也不保证响应内容正确。成本上界、概率错误与近似比只有被写入规格或单独保证时,才属于待验证合同。

若规格只量化无限公平执行,一个停在未响应请求上的有限最大执行可能被排除;对持续服务而言,这会掩盖死锁。应先说明哪些有限执行算完整行为,再说明哪些无限调度因公平假设被接受,而不是让“活性”一词代替这些选择。

推论与应用

算法正确性把实现执行与规格比较;精化把较具体行为限制到较抽象规格允许的范围;模型检查判定有限状态模型是否满足给定性质。

规格设计常先固定观察接口,再区分环境假设与系统保证。模块化验证依赖此边界:调用方只需依赖公开规格,被调用模块可以替换实现,只要继续满足同一合同。

参考资料
  • Leslie Lamport, Specifying Systems, Addison-Wesley, 2002, Chapters 1–3.
  • Carroll Morgan, Programming from Specifications, 2nd ed., Prentice Hall, 1994, Chapters 1–2.
  • Michael Huth and Mark Ryan, Logic in Computer Science, 2nd ed., Cambridge University Press, 2004, Chapters 2–3.
  • Bowen Alpern and Fred B. Schneider, “Defining Liveness,” Information Processing Letters 21(4), 1985, pp. 181–185.
关系图谱53 个相邻概念 · 1 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组