软件工程的形式化方法第六讲
形式化方法
两个用于转换的输入函数,用由位置指向转换的 箭头表示,它们是: I(t1)={P2,P4} I(t2)={P2} 两个用于转换的输出函数,用由转换指向位置的
箭头表示,它们是:
O(t1)={P1} O(t2)={P3,P3} 注意,输出函数O(t2)中有两个P3,是因为有两个 箭头由t2指向P3。
5.3.1 基本概念 Petri网包含4种元素:一组位置P、一组转换T、 输入函数I以及输出函数O。图5.5举例说明了Petri网 的组成。 其中, 一组位置P为{P1,P2,P3,P4},在图中用圆圈 代表位置。 一组转换T为{t1,t2},在图中用短直线表示转 换。
图5.5 Petri网的组成
数学作为软件开发工具的最后一个优点是,它提 供了高层确认的手段。可以使用数学方法证明,设计 符合规格说明,程序代码正确地反映了设计结果。
5.1.3
应用形式化方法的准则
为了更好地发挥这种方法的长处,下面给出应用 形式化方法的几条准则,供读者在实际工作中使用。 · 选择适用于当前项目的符号系统。 · 应该形式化,但不要过分形式化。通常没有必 要对系统的每个方面都使用形式化方法。 · 应该进行成本/效益分析。 · 需要有形式化方法的顾问。
6元组,其中每个谓词都是系统全局状态Y的函数。转
换函数T现在是一个从(J-F)×K×P到J的函数。现在的 转换规则形式如下: 当前状态〔菜单〕+事件〔所选择的项〕+谓词 下个状态。
5.2.2
电梯问题
为了说明在实际工作中怎样使用形式化的方法, 现在我们用有穷状态机技术给出电梯问题的规格说明。
果t2也被激发了,则令牌从P2中移出,两个新令牌被
J是一个有穷的非空状态集;
K是一个有穷的非空输入集; T是一个从(J-F)×K到J的转换函数; S∈J,是一个初始状态; FJ,是终态集。
形式化方法
形式化方法
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.
软件工程导论第6章
70年代初N.Wirth在Pascal语言中设置支持“顺序 结构”、“IF-THEN-ELSE选择结构”、“DO-WHILE 重复结构”或“DO-UNTIL重复结构”三种基本控制 结构语句。
25
3种基本控制结构
(1) 顺序型
A B
(2) 选择型
F P A B T
(2) 多情况选择型(case)
T T
P=1 F P=2 F P=n F
…
A1 A2
T
An
(3) 先判定型循环
后判定型循环
(do-while)
F
(do-until)
P T S
S P F
T
例1、某模块有两个输入a和b,一 个输出c,当满足条件(a>0)and(b<2) 时,c=a+b,否则c=a-b。画出该模 块的程序流程图。
a b
第6章 详细设计
6.1 结构程序设计 6.2 人机界面设计 6.3 过程设计的工具 6.4 面向数据结构的设计方法 6.5 程序复杂程度的定量度量 6.6 小结 习题
1
详细设计阶段的根本目标:确定应该怎样具体地 实现所要求的系统。 为软件结构图中的每一个模块确定使用的算法和 块内数据结构,并用某种选定的表达工具给出清晰 的描述。
100 110
120
130 140
Eq:等于 ne:不等于 gt:大于 lt:小于 ge:大于等于 le:小于等于
例:打印A、B、C三数中最小者的程序 if (A.LT.B .AND. A.LT.C)then write(6,*) A else if (A.GE.B .AND. B.LT.C) then write(6,*) B else write(6,*) C endif endif
软件工程中的形式化方法研究
软件工程中的形式化方法研究早期软件系统规模较小,20世纪60年代之前,对软件系统的开发一直通过“手工”方式,具有个人化及技艺化的开发特点。
60年代中期,计算机的容量和速度有了显著提升,软件系统规模越来越大,软件开发生产率不再能满足现状,软件危机开始爆发。
60年代后期,针对“软件危机”提出两类解决办法:一是将工程化应用于软件的开发过程,即“软件工程”的出现和发展;二是建立严格的理论基础,采用形式化方法来指导软件开发过程。
经过近半个世纪的探索和应用,形式化方法这一领域已经取得了大量的研究成果。
1形式化方法1.1形式化方法软件工程中的形式化方法就是通过严格的符号系统和数学模型来描述和验证一个目标软件系统的行为和特性,包括需求规格、设计和实现等。
形式化方法所使用的是严格的数学语言,其语法和语义都是无二义的、精确的。
1.2主要研究内容形式化方法的研究主要集中在形式规约(FormalSpecification)和建立在形式规约基础上的形式验证(FormalVerification)两个方面。
形式规约是指通过具有精确语义的形式语言对程序功能进行描述。
描述结果将作为程序设计和验证的重要依据。
形式验证是对现有的程序系统进行验证,检查其是否符合规约的要求。
传统的验证方式是通过实验对系统进行查错,包括模拟(simulation)和测试(testing)。
1.3形式化方法的分类根据描述方式,可将形式化方法归为两类:(1)模型描述的形式化方法。
通过构造一个数学模型来直接描述系统或程序。
(2)性质描述的形式化方法。
通过对目标软件系统中不同性质的描述来间接描述系统或程序。
根据表达能力,可将形式化方法大概分为五类[Barroca*1992]:(1)模型方法——对系统状态和改变系统状态的动作直接给出抽象定义,并进行显式描述。
该方法的缺陷是不能显式地表示并发。
(2)代数方法——通过定义不同操作的关系,隐式地描述操作。
与模型方法相同,代数方法也不能显式地表示并发。
软件工程形式化方法 z 语言
软件工程形式化方法 z 语言软件工程是一个复杂而庞大的领域,要确保软件系统的正确性和可靠性,需要采用各种形式化方法。
形式化方法是一种严格、精确的描述和分析系统的方法,其中最著名的是Z语言。
1. 什么是形式化方法形式化方法是一种使用数学符号和形式化规范来描述和分析软件系统的方法。
它能够捕捉系统的各个方面,从而确保系统的正确性和可靠性。
形式化方法可以消除歧义和模糊性,提供严格的语法和语义定义,并进行可靠的推理和验证。
2. Z语言的引入和发展Z语言是一种基于数学集合论和一阶谓词逻辑的形式化规范语言。
它于20世纪70年代由牛津大学的J.R.阿兰·特拉弗斯和J.B.斯托拉兹提出,并继续在软件工程领域的学术界和实践中得到广泛应用。
3. Z语言的特点和优势- 精确性:Z语言使用严格的数学符号和形式化规范,可以精确地描述系统的各个方面,避免了自然语言的歧义和模糊性。
- 可读性:尽管Z语言使用了数学符号,但其符号系统和语法规则都经过严格定义,使得Z规范可以被可靠地解释和理解。
- 可验证性:Z语言规范的严格性使得系统的正确性验证变得可行。
通过形式化推理和模型检测等技术,可以对规范进行自动验证和分析。
- 模块化:Z语言支持模块化规范,可以将系统的不同部分进行独立的规范和验证,从而提高开发过程的灵活性和可重用性。
4. Z语言在软件工程中的应用- 需求分析和规约:Z语言可以用于对软件系统的需求进行精确描述和形式化规约,从而帮助开发人员和用户准确理解和交流需求。
- 设计规约和验证:Z语言可以用于对软件系统的设计进行精确描述和形式化规约,并进行验证和验证。
通过验证,可以发现设计冲突和错误,提高系统的可靠性。
- 系统建模和仿真:Z语言可以用于对软件系统进行形式化的建模和仿真。
通过建立形式化模型,可以进行系统行为的精确分析和评估,从而帮助设计和优化系统。
- 代码生成和自动化工具支持:Z语言可以作为设计工具中的一部分,与代码生成和其他自动化工具集成,从而提高开发效率和系统质量。
第六讲-动态视图
应知应会
案例导入
项目实战
职场体验
2.2 生命线
生命线是一条垂直的虚线,表示时序图中的对象 在一段时间内的存在.每个对象的底部中心的位 置都带有生命线. 生命线是一个时间线,从时序图的顶部一直延伸 到底部,所用的时间取决于交互持续的时间. 对象与生命线结合在一起称为对象的生命线,对 象的生命线包含矩形的对象图标以及图标下面的 生命线.
学以致用,立足岗位成才 版权所有 All Rights Reserved 2008-2012
应知应会
案例导入
项目实战
职场体验
1.概述 1.概述
时序图示例:
学以致用,立足岗位成才 版权所有 All Rights Reserved 2008-2012
应知应会
案例导入
项目实战
职场体验
2. 时序图的组成
学以致用,立足岗位成才
图定义 一组类,接口, 一组类,接口,协作及它们的关系 一组对象及它们的关系 一组用例, 一组用例,参与者及它们的关系 一个交互, 一个交互,强调消息的时间顺序
一个状态机, 活动图 一个状态机,强调从活动到活动的流动
构件图 一组构件及关系 配置图 一组接点及它们的关系 (实施图 实施图) 实施图
版权所有 All Rights Reserv例导入
项目实战
职场体验
动态视图
交互图
时序图 协作图
行为图
状态图 活动图
学以致用,立足岗位成才 版权所有 All Rights Reserved 2008-2012
应知应会
案例导入
项目实战
职场体验
软件工程 第六讲 结构化分析方法
什么是GOTO语句?
ห้องสมุดไป่ตู้
在以前的程序设计课程中,老师说 goto语句很重要,为什么在这里说不 那么重要呢?
简单明确的概述什么是自顶向下、逐步求 精的思想,它和自底向上的分析方法有什 么不同??
结构化设计程序的方法在软件工程提出后产生, 主要是提出取消“GOTO“语句的使用。我想问的 是在结构化中的模块之间的接口不就算是 “GOTO”语句吗? 问题一:书中104在讲到结构化程序设计(SP)中 提到的“只要三种控制结构(顺序、选择、重复) 就是能表达用一个入口和一个出口的流程图所能 表达的任何程序逻辑”该做如何理解? 问题二:该如何来理解结构化方法的指导思想 (自顶向下、逐步求精)与两个基本原则(抽象、 分解)的联系?
问题六:基本加工是靠自己的经验来确定的,还 是有一定的标准?
返回
数据流
表示数据的流向。 数据流由一组数据项组成。 命名规则和注意事项:
数据流的名字用名词或名词词组 应尽量使用现实系统中已有的名字 把现实环境中传递的一组数据中最重要的那个数据的名字作为数 据流的名字 不要把控制流作为数据流 不要使用意义空洞的名词作为数据流名,如”数据“、“信息 “等。 如果在命名时遇到困难,说明你可能对数据流的分解不恰当,应 进行重新分解。 对流进或流出文件的数据流不需标注名字。
问题P110 怎样准确的判断出父图与子图的平 衡?
父图 与子 图平 衡吗?
父图 与子 图平 衡吗?
问题
110页图8.6为什么平衡不清楚。 P110 对父图与子图的平衡的理解:图8.6中如果 不存在图8.4的情况下,那么这个父图与子图就不 符合自图的平衡了,对吗? 画数据流图中,父图与子图怎样保持平衡? P110:第(6)个注意事项第二段第一句:有时考 虑平衡可忽略一些枝节性的数据流。我对本句中 的“枝节性的数据流”不太理解,不知道什么叫 “枝节性的数据流”,枝节性的数据流有何特点?
形式化方法
即使使用形式化方法,完整性也是难于达到的。当 创建规格说明时,系统的某些方面可能尚未定义; 某些特征可能被有意省略,以允许设计者在选择实 现方法时具有一定自由度;最后,在一个大型复杂 系统中,不可能考虑每一个操作场景。某些细节可 能是由于错误而被遗漏。
非形式化方法的缺点
使用自然语言描述的系统规格说明, 可能存在矛盾、二义性、含糊性、不完
➢例2:块处理器。
在操作系统中一个更重要的部分是维护由用户创建的文件的 子系统。块处理器是文件子系统中的一部分。文件存储中的 文件由存储设备上的存储块构成,在计算机的操作中,文件 被创建和删除,需要存储块的获取和释放。
为了处理这些,文件子系统维持一个未用块池,并保持对当 前使用块的跟踪。当块从被删除文件释放时,它们通常被加 入到等待进入未用块池的块队列中。
软件开发中的数学
数学最有用的性质之一是,它能够简洁、准确地描述物理 现象、对象或动作的结果,因此是理想的建模工具。 在软件开发过程中使用数学的另一个优点是,可以在软件 工程活动之间平滑地过渡。不仅功能规格说明,而且系统 设计也可以用数学表达,当然,程序代码也是一种数学符 号(虽然是一种相当繁琐、冗长了高层 确认的手段。可以使用数学方法证明,设计符合规格说明, 程序代码正确地反映了设计结果。
➢不变式定义什么保持不变。例如,符号表有一个不 变式表示元素的个数总是小于或等于MaxIds。
➢前置条件定义一个特定操作有效的环境。例如,增 加一个名字到职员标识符符号表的前置条件是有效的, 仅当表中不含有将被加入的名字,而且在表中只有少 于MaxIds 的职员标识符。
➢操作的后置条件定义当操作完成后保证什么为真, 这是通过其对数据的影响来定义的。在增加标识符到 职员标识符符号表操作的例子中,后置条件将数学地 描述表已经增加了新标识符。
软件开发中的形式化方法
3、导出检测报告:将验证结果以报告的形式导出,指出软件系统中的缺陷 和漏洞。
4、修复缺陷:根据报告指出的缺陷和漏洞,对软件系统进行修复和优化。
软件自适应UML建模和形式化验证方法具有以下优点:
1、提高开发效率:通过自动化映射和自动化更新,减少开发人员的工作量, 提高开发效率。
2、增强软件质量:通过形式化验证方法,可以有效地发现软件系统中的缺 陷和漏洞,提高软件质量。
软件开发中的形式化方法
目录
01 一、形式化方法的定 义和作用
03
三、常见的形式化方 法
02
二、实际项目中的运 用
04 参考内容
在软件开发中,形式化方法是一种通过严格定义、规范和证明来保证软件质 量和可靠性的方法。这种方法通过对软件开发全生命周期的各个环节进行形式化 描述和验证,以实现软件开发的规范化和标准化。本次演示将介绍形式化方法的 概念、实际应用以及常见的形式化方法。
参考内容
随着信息技术的快速发展,软件安全问题越来越受到人们的。安全软件体系 结构作为保障软件安全的关键因素,其设计和开发过程的重要性不言而喻。形式 化方法是一种基于数学模型的软件开发方法,可以将需求、设计、验证等软件开 发环节形式化地表达出来,提高软件开发的严谨性和可靠性。因此,研究安全软 件体系结构的形式化方法具有重要意义和应用价值。
软件工程方法的特点主要表现在以下几个方面:
1、过程管理:软件工程方法提供了一套完整的开发流程,从需求分析到设 计、编码、测试和维护,每个阶段都有明确的任务和目标。
2、需求分析:软件工程方法要求在需求分析阶段充分了解用户需求,确保 开发出的软件能够满足用户需求。
3、设计模式:软件工程方法注重设计模式的运用,针对不同的问题和需求, 采用合适的设计模式可以使代码更加清晰、易于维护。
第六讲 软件工程的方法
第六讲软件工程的形式化说明技术软件工程使用的描述技术有三类:非形式化技术、半形式化技术和形式化技术。
所谓非形式化技术的代表方法是用自然语言描述的需求规格说明;所谓半形式化技术的代表方法有数据流图、E-R图和UML等;所谓形式化技术的方法有很多,其中具有代表性的方法包括有:时序逻辑语言、有穷状态机、Petri网系统和Z语言等;所谓形式化规格说明语言的关键思想是把软件开发过程中的需求规格说明阶段和软件设计说明阶段分开,在需求规格说明阶段精确地描述软件“做什么”,而不涉及“怎么做”。
编写规格说明与编写计算机程序的不同之处在于规格说明是对目标软件系统的功能描述,而计算机系统则是实现目标软件系统功能的过程描述。
形式化和非形式化描述方法各有优缺点形式化描述的优点:1.使用形式化方法可以严格准确地描述出系统对象;2.使用形式化方法描述的系统可以向任意具体系统进行映射转换;3.可以对形式化描述的系统进行严格的数学证明分析;形式化描述的缺点:1.形式化描述方法难以使用;2.使用形式化描述一个庞大的实际系统存在许多困难,在实际应用中有许多问题本身就是模糊或非确定的无法使用严格的形式化方法进行描述;3.形式化描述的模型对于那些没有经过专门的训练用户来说很难理解;4.形式化说明的正确性证明费时费力;5.尚未出现支持形式化风格全过程的软件环境;非形式化方法的优点:1.描述的模型直观,容易理解;2.非形式的描述技术比较简单,容易学习;3.许多的应用只能使用非形式化的方法描述;非形式化方法的缺点:1.非形式化的描述可能存在矛盾、二意性和含糊性等问题;2.难以进行严格的证明工作;3.对于高可靠性的系统,使用该方法描述存在潜在的问题;本文介绍三种形式化方法:有穷状态机、Petri网、Z语言有穷状态机:使用一个六元组来准确地描述系统状态的变化的一种形式化方法。
当前状态+事件+谓词=>下一个状态Petri 网:Petri的背景:Petri网的首次提出是由德国科学家Petri于1962年在他的博士论文《用自动机通讯》中提出的使用网状结构模拟通讯系统。
形式化方法
形式化方法的分类
(1) 面向模型的方法:也称为基于状态的形式方法 面向模型的方法: 利用一些已知特性的数学抽象( 元组、集合、 利用一些已知特性的数学抽象(域、元组、集合、 序列、 映射等) 序列、包、映射等)来为目标软件的状态特征和行为 特征构造模型, 特征构造模型,如Z (2) 代数方法:通过分析不同操作间的行为关系给出操 代数方法: 作的隐式定义,而不定义状态 而不定义状态, 作的隐式定义 而不定义状态,支持描述结构化 代数方法仅使用一阶逻辑表示, 代数方法仅使用一阶逻辑表示,而不引入通常的数 学对象, 学对象,如:OBJ,CLEAR等语言 等语言
安全性质
实例
R是一非共享资源 个用户进程使用分配器 管理对资源 是一非共享资源,N个用户进程使用分配器 是一非共享资源 个用户进程使用分配器AR管理对资源 R的存取 的存取 用户进程Ui使用资源 使用资源R前 向 发出请求 发出请求,当 可自由存取 用户进程 使用资源 前,向AR发出请求 当R可自由存取 时,AR作反应标志 作反应标志 用户进程Ui使用完 使用完R时 向 发出信号释放 发出信号释放R 用户进程 使用完 时,向AR发出信号释放 在请求资源到获悉分配到资源间任意时刻, 在请求资源到获悉分配到资源间任意时刻,用户进程可取 消请求
形式化方法
哈尔滨工业大学计算机学院 唐好选 Email:tanghx@
基本概念
形式化方法( 形式化方法(Formal Method)的基本含义是借助数 )的基本含义是借助数 学的方法来研究计算机科学中的有关问题 学的方法来研究计算机科学中的有关问题 形式化方法提供了一个框架, 形式化方法提供了一个框架,在框架中可以用数学 的方式开发和验证系统。换句话说, 的方式开发和验证系统。换句话说,在软件开发的 全过程中,凡是采用严格的数学语言, 全过程中,凡是采用严格的数学语言,具有精确的 数学语义的方法, 数学语义的方法,都可称为形式化的方法
软件工程中的形式化方法研究综述
软件工程中的形式化方法研究综述随着软件复杂度和规模的不断增长,传统的软件开发方法已经不能满足软件开发的需求。
为了提高软件开发的可靠性和效率,人们开始思考如何使用形式化方法对软件开发进行改进。
形式化方法一般指使用一些严格的数学描述和理论来验证软件系统的正确性。
在本文中,我们将对软件工程中的形式化方法进行研究综述。
一、形式化方法的概念和原理形式化方法是一种使用严格的逻辑和数学语言来描述和验证软件系统的方法。
它通过使用形式语言来表示软件系统的规范和要求,采用严格的数学推理和证明方法来验证软件系统的正确性。
形式化方法可以被看作一个理论框架,其中包括用于建模、验证和证明软件系统行为的各种技术和工具。
形式化方法的核心原理基于数学和逻辑思维的严密性。
其主要思想是将软件行为和要求形式化为数学形式,然后使用严格的数学推理和证明方法来验证软件系统的正确性。
形式化方法使用精确的语言和符号来描述软件系统的规范和要求,有效地避免了自然语言描述中的歧义和模糊性。
在使用形式化方法进行软件开发时,程序员需要将要求和规范转化为数学符号和逻辑公式,这有助于程序员更准确地理解系统的行为和需求。
形式化方法的基本步骤包括建立模型、定义规范、进行验证和证明。
建立模型是指将软件系统的行为形式化为一种数学模型。
定义规范是指将软件系统的要求和约束形式化为一种逻辑公式。
验证和证明是指使用数学推理和证明方法来证明软件系统符合规范和要求。
二、形式化方法在软件工程中的应用形式化方法在软件工程中的应用可以提高软件开发的可靠性、正确性和效率。
下面我们将讨论形式化方法在软件工程中的应用。
1. 需求分析在软件开发过程中,需求分析是非常重要的一个环节。
使用形式化方法可以帮助程序员更加准确地理解和描述系统的需求和约束。
通过使用数学符号和逻辑公式,程序员可以更加准确地定义和描述系统的需求,有助于程序员更好地掌握系统的行为和要求。
2. 设计在软件开发过程中,设计是一个非常关键的步骤。
软件开发中的形式化方法
软件开发中的形式化方法郑红军张乃孝(北京大学计算机科学技术系,北京 100871)摘要本文基于研究的角度,首先讨论了在软件开发过程各阶段使用形式化方法的可能及困难,进而研究了形式化方法在理论上和应用上的能力、局限性及其产生原因,以及由此产生的对形式化方法的讨论。
最后,综合上述讨论,从形式化方法的实质出发,在方法上,对形式化方法的研究提出了几点建议,以及基于这些建议所能看到的形式化方法研究可能的一些发展方向。
关键词形式化方法软件开发1 形式化方法随着软件系统复杂度的不断增长,开发正确、可靠的软件,成为一个急待解决的问题。
解决此问题的一个有前途、有希望的技术是形式化方法的应用。
形式化方法建立在严格的数学基础上,其目标是希望能使系统具有较高的可信度和正确性,并能使系统具有良好的结构,使其易维护,关键是能较好地满足用户需求。
“形式化方法”一词虽然一直被广泛地应用,但在不同程度上,因理解不同,使其具有了不同的含义。
一般说来,形式化方法是指具有坚实数学基础的方法,它是数学上的综合、分析技术的应用,用于开发计算机控制的系统,经常有推理工具的支持,它可提供一个用于模型设计和分析的一个严格而有效的途径。
从形式系统和复杂问题的本质来看,还未有一个适于全面描述和分析一个复杂系统的形式系统。
所以,可以说,一个“形式化方法”并不是系统设计者开发系统时可能选择使用的方法,而只是设计者在此过程中希望利用的一种工具之一[Wood* 1988]。
总体上,形式化方法大致可分为五类[Barroca* 1992]:(1)基于模型的方法—给出系统(程序)状态和状态变换操作的显式但亦是抽象的定义,但对于并发没有显式的表示,如:Z和VDM[Jones 1990]。
(2)代数方法—通过联系不同操作间的行为关系而给出操作的隐式定义,而不定义状态,同样,它亦未给出并发的显式表示,如:OBJ、CLEAR。
(3)过程代数方法—给出并发过程的一个显式模型,并通过过程间允许的可观察的通讯上的限制(约束)来表示行为,如:CSP、CCS。
软件形式化方法
演示
• 形式化规约和验证工具PAT(Process Analysis Toolkit)演示
– 哲学家吃饭问题 – Sliding Game – Shunting Game
.sg/PAT/wp-source/resources/pat3_5_1/PAT3.Setup.3.5.1.msi
经典案例及应用
• Praxis公司于1992年交付给英国民航局的信息显示 系统是伦敦机场新空中交通管理系统的一部分。 在该系统的需求分析阶段,形式化描述和非形式 结构化的需求概念相结合;在系统规格阶段,采 用了抽象的VDM模型;在设计阶段,抽象VDM细 化为更为具体的规格。项目开发的生产效率和采 用非形式化技术相当,甚至更好。同时,软件质 量得到了很大的提高,软件的故障率仅为0.75每 千行代码,大大低于采用非形式化技术所提供的 软件的故障率(约为2~20每千行代码)。
24
形式化方法的主要内容
• 形式化开发过程的任务分为:模型获取、模型验证、模型 变换
模型获取:从现实世界向模型表示转换,对应软件生命周期中的 需求分析、规格、设计活动; 模型验证:是否满足需求及具有所期望的特性; 模型变换:从模型表示向计算机系统变换的过程。
• 这些任务对应三方面的活动:形式化规约、形式化验证、 程序求精
25
形式化方法的发展
• 20世纪60年代:程序正确性证明研究
• 20世纪80年代:硬件电路设计的形式化方法应用
(时序逻辑和模型检验的诞生)
• 20世纪90年代:通信协议和智能控制系统中的形式
化方法应用(工业界应用高速发展) • 本世纪:交互式并发软件系统的形式化方法应用
26
经典案例及应用
• 牛津大学和Hursley实验室于20世纪80年代 合作将Z语言用于IBM商用信息控制系统。 IBM对整个开发进行的测试表明,Z语言的 应用明显地改善了产品质量、大量减少了 错误和早期诊断错误。IBM估计使总体开发 成本降低9%。这一成果获皇家技术成就奖。
形式化方法
P{ 1,2,3}= {,{1},{2},{3},{1,2},{1,3},{2,3},{1,2, 3}}
其中所有元素均是集合{1,2,3}的子集。
逻辑运算符
形式化方法的另一个重要成分是 逻辑 :关于真、 假表达式的代数。和常见的程序设计语言关联的 逻辑运算符是用键盘上已有的符号表示的,和这 些符号等价的数学运算符为: ∧ 与(and) ∨ 或(or) 非(not) 蕴含(implies)
{(1,81),(2,64),(3,49),...}
集合运算符
集合中的成员关系:, 集合间关系: , ,∪ ,∩ 空集 , 对应数学中的 0 。空集具有这样的性质: 它是所有其它集合的子集。涉及空集的两个有用 的等式是:对任何集合A, ∪A=A 和 ∩A= 其中,∪被称为并运算符,有时称作“cup”;∩被 称为交运算符,有时称作“cap”。
当集合元素的形式是明显的时候,项可以省略。 例如,上面集合可表示为: { n: N| n < 3} 上述的集合均只含单项元素。集合元素可以是对, 三元组等等,例如,集合规格说明: {x,y:N|x+y=10· (x,y2)} 描述了形为 (x , y2) 的自然数对的集合,这里 x 和 y 之和是10,下面是此集合:
也就是说,一个系统可能处于多种状态之一,每一 种状态都表示外部可观察到的行为模式。 在Z语言中,对术语状态有不同的定义。在 Z (及 相关的语言)中,一个系统的状态由系统的存储数 据来表示(因此,Z给出了太多的状态来表示每种 可能的数据配臵)。
在符号表程序的例子中使用后面的定义,状态就是 符号表。
图2显示了一些部件:未用块池、被操作系统管理的文件 使用的块、以及那些等待被加入到未用块池中的块。等待 块被组织为队列,队列中每个元素包含来自于被删除文件 的一组块。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第六讲
软件工程的形式 化方法
本节从软件形式化描述的基本概念入手。 在理解应用软件形式化技术的意义的基 础之上,重点介绍软件的Z语言规格说明 技术和Petri。
软件教研室
第一节 形式化技术概述
什么是形式化方法?
——从广义上讲,形式化方法是指将离散数学的方法用于解决 软件工程领域的问题,主要包括建立精确的数学模型以及对模 型的分析活动。 ——狭义的讲,形式化方法是运用形式化语言,进行形式化的 规格描述、模型推理和验证的方法。 ——就形式化建模而言,形式化表示必须包含一组定义其语法 语义的形式化规则。这些规则可用于分析给定的表达式是否符 合语法规定,或证明该表达式具有某种性质。
软件教研室
形式验证
一致性分析与类型检查 –该形式模型的表示是否规范? 验证 –针对小型示例的模型模拟 –形式化挑战 –针对给定情况的提问 –状态爆炸 –检查应用程序性质 证明设计的逐级求精是正确的 –设计是否满足需求?
软件教研室
第二节 现有形式化方法概述
所谓形式化规格说明语言的关键思想是把软件开发 过程中的需求规格说明阶段和软件设计说明阶段分 开,在需求规格说明阶段精确地描述软件“做什么”, 而不涉及“怎么做”。编写规格说明与编写计算机 程序的不同之处在于规格说明是对目标软件系统的 功能描述,而计算机系统则是实现目标软件系统功 能的过程描述。
软件教研室
形式化语言的基础
一阶命题逻辑中的表达式
表达式的取值可以为真或为假 (x>y ∧y>z) →x>z x=y ≡y=x . x,y,z((x>y ∧y>z)) -> x>z
x+1 < x-1 x(.y(y=x+z)) x>3 ∨x<-6
开表达式与闭表达式 –如果一个变量是受量词约束的,则称之为限定变量,否则 称之为自由变量 –若公式中所有变量均为限定变量,则称该公式为闭表达式 –闭表达式的值非真即假
软件教研室
形式规约语言
源自程序证明技术 派生出许多通用的规约语言 –适合描述程序单元的行为 –核心技术:类型检查,定理证明 在需求工程中的适用性较差 –无抽象及结构化机制 –与程序语义密切相关 举例:Larch, Z, VDM
软件教研室
并发/反应式系统建模旨在表 Nhomakorabea程序行为的动态性
重点研究并发与反应式系统(如实时、嵌入式系统) –支持对安全性、活性与性能的推理 –提供一种精确的规格描述语言 –核心技术:一致性检查,模型检测 在需求工程中的适用性较差 –建模语言专为需求工程设计 举例:Statecharts, RSML, Parnas-tables, SCR, …
软件教研室
形式化方法的优点?
用数学语言能够解决规格说明的二义性问题,提高其精确性; 数学提供了确认手段,使得证明和验证软件程序满足用户和系 统的需求成为可能; 针对需求和设计模型进行自动的分析和推理; –分析模型性质 –推导模型逻辑结果
模拟/执行模型,有助于可视化及验证;
软件的设计过程就是一个形式化的过程; –软件设计的最终产物是程序,它可看作是一种可执行的 形式规约,用于解决非形式化的问题。
软件教研室
各种形式化方法的区别
本体不同 –固定本体:状态,事件,动作–状态图,状态机 –可扩充本体:定义新概念的元语言 数学基础不同 –基于逻辑的方法:一阶谓词逻辑,时序命题逻辑 –基于代数的方法:代数语言,集合语言 –基于图的方法:状态图、Petri 网等 对时间的处理不同 – 状态/ 事件模型:将时间表示为事件序列;将时间表示为 量化的区间 –将时间作为一级类对象来处理
形式化方法仅被用于无关紧要的系统,且缺少工具支持;
软件教研室
关于形式化方法:乐观者的角度
运用形式化方法将开发出完美的软件;
形式化方法可以替换传统的软件工程方法;
软件教研室
形式化方法在软件工程中的作用
软件教研室
软件的正确性
将形式化方法运用于软件工程实践当中的主要目的是保证软件 的正确性。 正确性证明的两个标准 –运行在机器上的程序满足规格说明
软件教研室
为什么不采用形式化?
形式化方法需要作出更大的努力 –延缓项目进展 –需要更多的数学训练
–回报也并非立竿见影
许多项目均不适合运用形式化方法
软件教研室
三类不同的模型?
软件教研室
模型类型
自然语言 –很强的表达能力及适应性 –不易于表示模型的语义 –适于需求获取及为模型加标注,便于通信 半形式化的表示 –便于表示结构及语义 –可推理、一致性检查、模拟等(如图、表、结构化英语等) –通常是可视化的,以便在多个干系人间通信 形式化表示 –具有精确的语义定义,可能进行广泛的推理 –距离应用领域较远
软件教研室
形式化语言的基础
一阶命题逻辑:
一阶命题逻辑提供以下机制 –一组构造表达式的原子公式 变量,数值常量,括号 –一组逻辑连接符 and (∧), or (∨), not(.), implies(→), logical equality (=) 与, 或, 非, 蕴含, 逻辑等价 –量词 :“for all”全称量词 :“there exists”存在量词
–规格说明在给定的领域性质之下满足需求
软件教研室
软件的完整性
完整性证明的两个标准 –是否已发现所有重要需求 –是否已发现所有重要领域性质
软件教研室
形式化方法可应用于何处?
形式化需求规约 –作为程序验证的基准 –规约语言Z,VDM,Larch –作为程序行为的模型,与需求相对照 形式化领域知识 –以便就以下问题进行推理 .领域知识是否完整;对未来的系统有何影响 –形式化有助于直接精确地刻画环境 需求的形式化 –以便进行需求模拟 –以便测试逻辑一致性 –以便测试完整性(依据底层的数学模型)
软件教研室
关于形式化方法:悲观者的角度
形式化方法是为数学家准备的; 形式化方法仅供从事形式化研究的人使用; 从事形式化研究的人仅使用形式化方法;
软件教研室
关于形式化方法:悲观者的角度
形式化方法的运用将延缓软件开发进度;
形式化方法的运用将提高软件开发成本;
软件教研室
关于形式化方法:悲观者的角度
形式化方法仅应用于开发安全要求极高的系统;
软件教研室
为什么不采用形式化?
形式化方法比其他技术的抽象级别要低 –容易陷入细节 –需提早确定系统边界
形式化方法通常限于正确一致的模型
–但绝大多数情况下,模型都并非绝对正确、一致、完整 不知使用哪个工具合适 –要描述的是程序行为还是需求? –形式化方法的鼓吹者常常过于依赖某一种工具
–常常对研究原型的规模有着过高的期盼