形式化方法
形式化方法

15.1 概 述
15.1.1 非形式化方法的缺点 15.1.2 软件开发过程中的数学 15.1.3 应用形式化方法的准则
15.1.3 应用形式化方法的准则
关于形式化方法是有争议的。这种方法 对某些软件工程师很有吸引力,其拥护 者甚至宣称这种方法可以引发软件开发 的革命,另一些人则对把数学引入软件 开发过程持怀疑甚至反对的态度。编者 认为,对形式化方法也应该“一分为二 ”,既不要过分夸大它的优点也不要一 概排斥。
15.1.1 非形式化方法的缺点
假设在系统规格说明中还规定,系统的 某个命令是:
AVERAGE命令的功能是在PC上显示由某 个特定传感器在两个日期之间获取的平 均水深。
15.1.1 非形式化方法的缺点
抽象层次混杂是指在非常抽象的陈述中 混进了一些关于细节的低层次陈述。这 使得系统规格说明的读者很难了解系统 的整体功能结构。
S (D, e, f ) + DC (e, f ) → M (D, e, f−1) S (N, e, f ) + DC (e, f ) → W (e, f )
15.2 有穷状态机
15.2.1 基本概念 15.2.2 电梯问题 15.2.3 评论
15.2.3 评论
有穷状态机方法采用了一种简单的格式 来描述规格说明
15.2.1 基本概念
15.2.1 基本概念
15.2.1 基本概念
从上面这个简单例子可以看出,一个有 穷状态机包括下述5个部分:状态集J、 输入集K、由当前状态和当前输入确定下 一个状态(次态)的转换函数T、初始态 S和终态集F。
15.2.1 基本概念
有穷状态机的概念在计算机系统中应用 得非常广泛,如每个菜单驱动的用户界 面都是一个有穷状态机的实现。一个菜 单的显示和一个状态相对应,键盘输入 或用鼠标选择一个图标是使系统进入其 他状态的一个事件。状态的每个转换都 具有下面的形式
3-形式化开发方法 (1)

确的数学语义的方法,都称为形式化方法。 – 狭义地,形式化方法是软件规格(specification)和验证(verification) 的方法。
分为:
– 形式化规格是通过具有明确数学定义的文法和语义的方法或语言对软件的
期望特性或者行为进行的精确、简洁描述。 – 形式化验证是基于已建立的形式化规格,对软件的相关特性进行评价的数 学分析和证明。
“程序”不同,这里的“程序”是对规格、设计文档以及程序代码 的统称。 – 在这种理解下,程序可以划分为若干层次:最高层是不能直 接执行的程序,即规格,它由抽象的描述语句构成;最低层 是可以直接执行的程序,称为程序代码,它由可执行的命令 语句构成;最高层和最低层之间为一系列混合程序,其中既 含有抽象的描述语句,又含有可执行的命令语句。
程序求精
又称为程序变换:是将自动推理和形式化方法相结合 而形成的一门新技术,它研究从抽象的形式规格推演 出具体的面向计算机的程序代码的全过程。 基本思想:是用一个抽象程度低、过程性强的程序去 代替一个抽象程度高、过程性弱的程序,并保持它们 之间功能的一致。
– 这里所说的“程序”与传统观点中“可以由计算机直接执行”的
(二)发展历史
程序求精技术是形式化方法研究的一个热点, 在已出现的许多相关技术中,真正能够应用到实 际软件开发过程中的并不多。
– 目前比较典型的是IBM Hursly公司以及牛津大学PRG
程序设计研究组提出的针对Z规格的求精方法、以及 Carroll Morgan的规则求精方案。
(三)相关内容
–
双重类方法则兼有前面二者的特点,既能够通过数学公理和概念来高度抽象地描述 系统,又具有状态和转移的可执行特征,这类方法包括扩展状态机/实时时态逻 辑(extended state machinM/RTTL)、TRIO+、 TROL等。
形式化方法在软件测试中的应用

形式化方法在软件测试中的应用形式化方法是一种利用数学工具来验证软件系统的正确性和安全性的方法。
它通过建立模型、规范和推理来检测和排除软件中的错误和缺陷,从而提高软件的可靠性和质量。
形式化方法在软件测试中的应用可以帮助发现潜在的错误,降低测试的漏洞率,并提高测试的效率和准确性。
在软件测试中,形式化方法主要有以下几个方面的应用:1.引理证明:通过数学推理和证明,验证软件系统的正确性。
形式化方法可以帮助设计者证明软件系统的一些特性,如功能正确性、安全性和可靠性等。
通过引理证明,可以更准确地了解软件系统的行为,找出潜在的设计错误,从而提高软件系统的可靠性。
2.静态分析:通过对源代码的静态分析,发现并修复潜在的缺陷。
形式化方法可以通过对源代码的形式化表示和分析,检测代码中的错误和漏洞,从而提高软件的质量。
静态分析可以帮助测试人员找出可能的代码错误,如空指针引用、数组越界等,从而减少测试的次数和成本。
3.模型检测:通过数学建模和模型检测技术,检测系统模型中的错误和缺陷。
形式化方法可以帮助建立系统的形式化模型,并对该模型进行模型检测。
模型检测可以帮助发现系统模型中的一些潜在错误,如死锁、活锁、资源争用等,从而提高系统的可靠性和安全性。
4.可达性分析:通过可达性分析技术,找出系统模型中的不可达状态和死代码。
形式化方法可以通过可达性分析,分析系统模型中的状态转移和事件触发关系,并找出不可达状态和死代码。
通过可达性分析,可以发现潜在的设计错误,提高系统的可靠性和安全性。
综上所述,形式化方法在软件测试中的应用可以帮助发现潜在的错误,降低测试的漏洞率,并提高测试的效率和准确性。
通过形式化方法,在设计和测试过程中进行模型化工具支持,可以更准确地描述和分析软件系统的行为,并找出其中的错误和缺陷,从而提高软件的可靠性和质量。
软件工程的形式化方法

软件工程的形式化方法
软件工程的形式化方法是指使用数学语言和工具来描述和分析软件系统的方法。
这种方法主要目的是利用形式化的规范化语言来确保软件系统的正确性、一致性和可靠性。
形式化方法的核心思想是将软件系统的设计、开发和验证过程转化为严格的数学推理和证明。
它通过建立数学模型和推理规则来描述和操作软件系统的各个方面,包括系统的结构、行为和约束条件等。
形式化方法还提供了一些工具和技术,如模型检测、定理证明和计算机辅助验证等,用于对软件系统进行形式化的验证和验证。
形式化方法在软件工程领域具有重要的应用价值。
它可以帮助开发人员提前发现和解决软件系统中的潜在问题,减少测试和调试的工作量,提高软件系统的质量和可靠性。
此外,形式化方法还可以提供软件系统的形式化规范,为系统的维护、重用和扩展提供了基础。
然而,形式化方法也存在一定的限制和挑战。
首先,形式化方法需要开发人员具备深厚的数学和逻辑推理能力,因此对于一般开发人员来说比较难以理解和应用。
其次,形式化方法在建模和验证过程中需要投入大量的时间和精力,导致在软件项目的时间和成本方面存在一定的压力。
此外,形式化方法还可能存在误差和缺陷,因为它们依赖于人工规约和形式化验证过程。
总的来说,形式化方法是软件工程领域一种重要的技术和方法,可以帮助开发人员确保软件系统的正确性和可靠性。
它在一些关键和复杂的软件系统中具有特别的应用价值,并在工业界和研究界得到广泛的关注和应用。
形式化方法 名词解释

形式化方法名词解释摘要:一、形式化方法的定义二、形式化方法的应用领域三、形式化方法的优势与局限性四、我国在形式化方法的研究与发展五、形式化方法在未来的发展趋势正文:一、形式化方法的定义形式化方法,简单来说,是一种通过数学模型和逻辑推理来描述、分析和解决问题的方法。
它借助于符号、公式和逻辑推理,使得问题阐述更加严谨、精确,便于研究者之间的交流与理解。
形式化方法的应用领域十分广泛,包括数学、计算机科学、物理学、经济学、生物学等诸多学科。
二、形式化方法的应用领域在数学领域,形式化方法为数学的公理化、严谨化提供了有力支撑。
如皮亚诺公理体系的建立,为自然数的理论研究奠定了基础。
在计算机科学领域,形式化方法在程序设计、软件开发和系统分析中发挥着重要作用。
如算法复杂度分析、程序正确性证明等都离不开形式化方法。
三、形式化方法的优势与局限性形式化方法的优势在于其严谨性和精确性。
它有助于揭示问题的本质,为理论研究提供严密的框架。
然而,形式化方法也存在一定的局限性。
首先,它要求研究者具备较高的数学素养和逻辑思维能力。
其次,形式化方法在应用过程中,可能会过于复杂,导致不易理解。
最后,形式化方法有时并不能解决实际问题,需要与其他方法相结合。
四、我国在形式化方法的研究与发展我国在形式化方法的研究取得了举世瞩目的成果。
如在数学领域,华罗庚、陈省身等著名数学家为形式化方法的发展作出了巨大贡献。
在计算机科学领域,我国学者在程序设计、软件工程、人工智能等方面取得了丰硕的成果。
五、形式化方法在未来的发展趋势随着科技的不断发展,形式化方法在各个领域的应用将更加广泛。
在未来,形式化方法将继续向以下几个方向发展:1.形式化方法与其他方法的融合,如与实证方法、模拟方法等相结合,以提高解决问题的效率;2.形式化方法在交叉学科中的应用,如数学物理、生物信息学等领域;3.形式化方法在工程技术中的应用,如控制系统、通信系统等;4.形式化方法在人工智能、大数据等领域的创新应用。
形式化方法

形式化方法
By 周帝
目录
1.形式化方法 形式化方法 2.软件中的形式化方法 软件中的形式化方法 2.1非形式化方法的缺点 非形式化方法的缺点 2.2形式化方法的优点 形式化方法的优点 3.形式化方法的举例 形式化方法的举例 4.形式化方法语言 形式化方法语言
形式化方法
By 周帝
非形式化的缺点
用自然语言书写的系统规格说明书,可能存在矛盾、二义性、含糊性、不完整 性及抽象层次混乱等问题。 矛盾:指一组相互冲突的陈述。监控化学反应容器中的温度,监控在一定范围 内的温度 二义性:指读者可以用不同方式理解的陈述。操作员标识由操作员姓名和密码 组成,密码由6位数字构成。当操作员登陆进系统时它被放在注册文件里 含糊性:系统规格说明书庞大,易出现含糊性。 不完整性:遗漏了客户的一些需求。例如,AVERAGE命令的功能是显示某个 传感器在两个日期内获得的平均水深(每个数据保留6个月) 抽象层次混乱:是指在非常抽象的陈述中混进了一些关于细节的低层次陈述。
形式化方法
By 周帝
形式化方法的定义
用于开发计算机系统的形式化方法是描述系统 性质的基于数学的技术,这样的形式化方法提供了 一个框架,可以在框架中以系统的而不是特别的方 式刻划、开发和验 证系统。 如果一个方法有良好 的数学基础,那么它就是形式化的,典型地以形式 化规约语言给出。这个基础提供一系列精确定义的 概念,如:一致性和完整性,以及定义规范 的实 现和正确性。 形式化方法的本质是基于数学的方 法来描述目标软件系统属性的一种技术。
形式化方法
By 周帝
事例
在一幢M层楼的大厦里,用电梯内的和每个楼层的按 钮来控制N部电梯的运动。当按下电梯按钮请求电梯 在指定楼层停下时,按钮指示灯亮;当电梯到达指定 楼层时,指示灯灭。除了大厦的最底层和最高层外, 每层楼都有两个按钮分别指示电梯上行和下行。当这 两个按钮之一被按下时相应的指示灯亮,当电梯到达 此楼层时灯熄灭,电梯向要求的方向移动。当电梯无 升降动作时,关门并停在当前楼层。
形式化方法

关系表示法关系表示法-规则表达式
基本规则: 原子:字母表中的基本符号 基本规则 原子 字母表中的基本符号 递归规则: 递归规则 错列:如果 如果R1,R2是规则表达式 错列 如果 是规则表达式 那么(R1|R2)也是规则表达式 那么 也是规则表达式 字符串集合的并集 合成:如果 是规则表达式, 合成 如果R1,R2是规则表达式 如果 是规则表达式 那么(R1R2)也是规则表达式 那么 也是规则表达式 R2中的串接到 中的串上 中的串接到R1中的串上 中的串接到 形成新串
常见的形式化规格说明方法
1、关系表示法 (relational notations) 、 (1) 固有方程 (implicit equations) (2) 递归关系 (recurrence relation) (3) 代数公理 (algebraic axioms) (4) 规则表达式 2、基于模型的表示方法 、 (1)有限状态机 有限状态机 (2)Petri网 网 (3)Z方法等 方法等
闭包:如果 是规则表达式 那么(R1)*也是规则表 闭包 如果R1是规则表达式 那么 如果 是规则表达式,那么 也是规则表 达式,表示把空串或R1中元素的多个串联 中元素的多个串联。 达式,表示把空串或 中元素的多个串联。 (R1)+ 表 示把R1中元素 中元素1个或多个串联 示把 中元素 个或多个串联
规则表达式有多种解释: 规则表达式有多种解释: 可能表示的意义: 如: (a(b|c))+ 可能表示的意义 数据流: a,b,c 为输入数据 数据流 消息传递: 消息传递 a,b,c 为不同的消息类型 操作序列: 操作序列 a,b,c代表过程 代表过程 资源流: a,b,c表示系统的一个组成部分 资源流 表示系统的一个组成部分
形式化方法

形式化方法
By 周帝
形式化方法的定义
用于开发计算机系统的形式化方法是描述系统 性质的基于数学的技术,这样的形式化方法提供了 一个框架,可以在框架中以系统的而不是特别的方 式刻划、开发和验 证系统。 如果一个方法有良好 的数学基础,那么它就是形式化的,典型地以形式 化规约语言给出。这个基础提供一系列精确定义的 概念,如:一致性和完整性,以及定义规范 的实 现和正确性。 形式化方法的本质是基于数学的方 法来描述目标软件系统属性的一种技术。
形式化方法
By 周帝
目录
1.形式化方法 形式化方法 2.软件中的形式化方法 软件中的形式化方法 2.1非形式化方法的缺点 非形式化方法的缺点 2.2形式化方法的优点 形式化方法的优点 3.形式化方法的举例 形式化方法的举例 4.形式化方法语言 形式化方法语言
形式化方法
By 周帝
形式化转换例子
相信通过对比非形式化, 相信通过对比非形式化,我们能对形式化 方法有一定的了解 下面就想魏老师上课跟我们讲述事物用例 那样一步一步的分析, 那样一步一步的分析,如何讲一个日常的 事情用形式化方法装换
形式化方法
By 周帝
形式化方法的分类
根据说明目标软件系统的方式,形式化方法可 以分为两类: 1)面向模型的形式化方法。面向模型的方法 通过构造一个数学模型来说明系统的行为。 2)面向属性的形式化方法。面向属性的方法 通过描述目标软件系统的各种属性来间接定义 系统行为。
形式化方法
By 周帝
形式化方法的分类
形式化方法
By 周帝
个人认为,这样下的定义太过于抽象,并且不好理解。 举个易懂的例子,如果一个人长的与周帝相同,且内心 想法与周帝一样那么他就是周帝;反之,他就不是周帝。 那么我们就能写成为,如果a, 且b,那么,则ZD;如果非a, 或非b,则非ZD。 我们不难看出这是一个逻辑式,if a and b, then c; if not a or not b, then not c.
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
全称量化是对集合中元素的一种陈述方法,该陈述对 集合中每个元素都成立。全称量化使用符号" ,它的 使用的一个例子如下: " i, j: N · i > j i 2 > j 2 该表达式陈述的是:对在自然数集合中的每一个 值对,如果i 大于j,则i 的平方大于j 的平方。
序列
序列是一种数学结构,用于对元素是有序的这一事实进行 建模。一个序列s 是对的集合,其元素的取值范围从1 到 最大数。例如,
应用形式化方法的准则
应该形式化,但不要过分形式化。通常没有必要对系统 的每个方面都使用形式化方法。 应该进行成本/ 不要放弃传统的开发方法。把形式化方法和结构化方法 或面向对象方法集成起来是可能的,而且由于取长补短 往往能获得很好的效果。
应该建立详尽的文档。建议使用自然语言注释来配合 形式化的规格说明,以帮助读者理解系统
是一个序列。形成对的第一个元素的项总称为序列的定义域,第二个 元素的聚集称为序列的值域。本书中序列用尖括号指明。例如,上面 的序列通常写作: <Jones,Wilson,Shapiro,Estavez>
{(1,Jones),(2,Wilson),(3,Shapiro),(4,Estavez)}
操作的后臵条件定义当操作完成后保证什么为真, 这是通过其对数据的影响来定义的。在增加标识符 到职员标识符符号表操作的例子中,后臵条件将数 学地描述表已经增加了新标识符。
例2:块处理器。
在操作系统中一个更重要的部分是维护由用户创建的文件的 子系统。块处理器是文件子系统中的一部分。文件存储中的 文件由存储设备上的存储块构成,在计算机的操作中,文件 被创建和删除,需要存储块的获取和释放。 为了处理这些,文件子系统维持一个未用块池,并保持对当 前使用块的跟踪。当块从被删除文件释放时,它们通常被加 入到等待进入未用块池的块队列中。
即使使用形式化方法,完整性也是难于达到的。当 创建规格说明时,系统的某些方面可能尚未定义; 某些特征可能被有意省略,以允许设计者在选择实 现方法时具有一定自由度;最后,在一个大型复杂 系统中,不可能考虑每一个操作场景。某些细节可 能是由于错误而被遗漏。
非形式化方法的缺点
使用自然语言描述的系统规格说明, 可能存在矛盾、二义性、含糊性、不完
也就是说,一个系统可能处于多种状态之一,每一 种状态都表示外部可观察到的行为模式。 在Z语言中,对术语状态有不同的定义。在 Z (及 相关的语言)中,一个系统的状态由系统的存储数 据来表示(因此,Z给出了太多的状态来表示每种 可能的数据配臵)。
在符号表程序的例子中使用后面的定义,状态就是 符号表。
{(1,81),(2,64),(3,49),...}
集合运算符
集合中的成员关系:, 集合间关系: , ,∪ ,∩ 空集 , 对应数学中的 0 。空集具有这样的性质: 它是所有其它集合的子集。涉及空集的两个有用 的等式是:对任何集合A, ∪A=A 和 ∩A= 其中,∪被称为并运算符,有时称作“cup”;∩被 称为交运算符,有时称作“cap”。
用于开发计算机系统的形式化方法,是描述系统
性质的基于数学的技术。
Anthony Hall 在其关于形式化方法的介绍性讨论 [Hall90]中说到:
形式化方法是有争议的。支持者声称形式化方法可以 引发软件开发的革命。而批评者认为:这是极端困难的。
同时,对大多数人来说,他们对形式化方法是如此的不熟
软件开发中的数学
数学最有用的性质之一是,它能够简洁、准确地描述物 理现象、对象或动作的结果,因此是理想的建模工具。 在软件开发过程中使用数学的另一个优点是,可以在软 件工程活动之间平滑地过渡。不仅功能规格说明,而且 系统设计也可以用数学表达,当然,程序代码也是一种 数学符号(虽然是一种相当繁琐、冗长的数学符号)。 数学作为软件开发工具的最后一个优点是,它提供了高 层确认的手段。可以使用数学方法证明,设计符合规格 说明,程序代码正确地反映了设计结果。
有三种类型的条件与操作相关联:不变式、 前臵条件和后臵条件。
不变式定义什么保持不变。例如,符号表有一个不 变式表示元素的个数总是小于或等于MaxIds。 前臵条件定义一个特定操作有效的环境。例如,增 加一个名字到职员标识符符号表的前臵条件是有效 的,仅当表中不含有将被加入的名字,而且在表中 只有少于MaxIds 的职员标识符。
P{ 1,2,3}= {,{1},{2},{3},{1,2},{1,3},{2,3},{1,2, 3}}
其中所有元素均是集合{1,2,3}的子集。
逻辑运算符
形式化方法的另一个重要成分是 逻辑 :关于真、 假表达式的代数。和常见的程序设计语言关联的 逻辑运算符是用键盘上已有的符号表示的,和这 些符号等价的数学运算符为: ∧ 与(and) ∨ 或(or) 非(not) 蕴含(implies)
(1)
有两种定义集合的方式:
通过枚举出集合的元素来定义 ( 如上面的集合定 义); 创建一个构造性集合规格说明。集合成员的一般 形式用布尔表达式来指定。因为构造性集合规格 说明可以为大集合提供简洁的定义,所以它优于 枚举方式。它也显式地定义了用于构造集合的规 则。
(2)
考虑下面构造性规格说明的例子:
图2 块处理器
与数据不变式相关联的某些操作是:(1) 将一个块集合加到队 列的末尾; (2) 从队列前面去除一个已用块集合并将其放到未用 块集合中; (3) 检查块队列是否为空。 第一个操作的前置条件是:将被加入的块必须在已用块集合 中;后置条件是:这个块集合现在处于队列的末尾。 第二个操作的前置条件是:队列中必须至少有一项;后置条 件是:块必须被加到未用块集合中。 最后一个操作——检查返回块的队列是否为空——没有前置 条件,这意味着不管状态具有什么值,操作总是有定义的。后 置条件是:如果队列为空,返回true,否则,返回false。
第9章 形式化方法
基本概念 数学预备知识 应用数学符号描述形式化规格说明 形式规格说明语言 Z规格说明语言 有穷状态机 Petri网
基本概念
根据形式化的程度,可以把软件工程方法划分成 非形式化、半形式化和形式化三类。使用自然语 言描述需求规格说明,是典型的非形式化方法。
使用数据流图或实体—关系图等图形符号建立模
{1,2}×{4,5,6}
该表达式的结果为
{(1,4),(1,5),(1,6),(2,4),(2,5),(2,6)}
幂集(powerset),一个集合的幂集是一个其元素是 该集合的子集的集合。本章中用来表示幂集运算符 的符号是 P 。它是一个一元运算符,当应用于某集 合时,得到其操作数的子集的集合。 例如:
最后一个概念是操作,这是在系统中发生的读写数 据的动作。
如果对符号表程序考虑从符号表加入或去除职员名, 则它将关联两个操作: (1)将一个指定名增加到符号表的操作;
(2)从符号表中去除一个现存名的操作。
如果程序提供检查是否某指定名包含在表中的机制, 则将有一个返回某种指示值的操作,这个指示值表 示名字是否在表中。
图2显示了一些部件:未用块池、被操作系统管理的文件 使用的块、以及那些等待被加入到未用块池中的块。等待 块被组织为队列,队列中每个元素包含来自于被删除文件 的一组块。
图2 块处理器
对这个子系统来说,状态是自由块的集合、已用块的集合、以 及返回块的队列。数据不变式用自然语言表达如下:
块未同时被标记为未用和已用。 所有在队列中的块集合将是当前已用块集合的子集。 队列元素未包含相同的块号。 已用块和未用块的集合将是组成文件的块的总集。 在未用块集合中没有重复的块号。 在已用块集合中没有重复的块号。
当集合元素的形式是明显的时候,项可以省略。 例如,上面集合可表示为: { n: N| n < 3} 上述的集合均只含单项元素。集合元素可以是对, 三元组等等,例如,集合规格说明: {x,y:N|x+y=10· (x,y2)} 描述了形为 (x , y2) 的自然数对的集合,这里 x 和 y 之和是10,下面是此集合:
形式化规格说明的期望特性——一致性、完整性及 无歧义性——是所有规格说明方法的目标。形式化 方法的使用增加了这些理想实现的可能性。
规格说明语言的形式化语法使得需求或设计以唯一的方式 被解释,从而排除了读者解释自然语言 ( 例如英语 ) 或图形 表示时经常产生的歧义性; 集合论和逻辑符号的描述便利使得可以清晰地陈述事实 (需 求)。 要达到一致,在规格说明中某地方陈述的事实就不能与其 他地方有矛盾。一致性是通过数学证明将初始事实形式化 地映射 ( 使用推理规则 ) 到规格说明中后面的陈述来保证的。
悉,以至难于判断这些争论。
《The Encyclopedia of Software Engineering》 [MAR94]中对形式化方法的定义如下: 如果一个方法有良好的数学基础,特别地, 是以形式化说明语言描述的,那么它是形式化 的。这种数学基础提供了精确定义诸如一致性 和完整性概念的表示方法,以及更进一步地定 义规格说明、实现和正确性。
{n:N|n< 3· n} 这个规格说明中有三个部分:特征n:N,谓词n<3, 以及项n。 (1) 特征描述在形成集合时考虑的值的范围; (2) 谓词(布尔表达式)定义集合如何被构造; (3) 项给出了集合中项的一般形式。 在上面例子中,N 表示自然数,这样自然数将被考 虑;谓词指出只有小于 3 的自然数被包含在集合 中;项规定集合中每个元素的形式为n。 这样,上面的规格说明定义的集合为: {0 ,1 ,2 }
集合与构造性规格说明
集合是对象或元素的聚集,被用于形式化方法的 基础。集合中包含的元素是唯一的 (即,不允许重 复)。具有少量元素的集合用花括号括起来,元素 间用逗号分开。例如,集合 {C++,Smalltalk,Ada,COBOL,Java} 包含五种程序设计语言的名字。