形式化验证:从混成系统到CPS
形式化验证讲义
形式化求精
形式化求精是Carroll Morgan(现为新南威尔士大学教授) 在1990年提出来的,最初是基于程序设计的概念,但在之 后逐步发展为一种通用的设计理论,也就是逐步细化的方 式。
形式化求精是将自动推理和形式化方法相结合而形成的一 门新技术,它研究从抽象的形式规格推演出具体的面向计 算机的程序代码的全过程。
立的层次或部分,封装并提供清晰接口。如系统开发 的层次模型,模块化技术,面向对象的技术等; 研究有效的程序开发模型及支持技术,设法屏蔽软件 开发中的难点、解决共性问题。如图形用户界面技术, 客户端-服务器模型,中间件技术,Web服务模型等;
软件问题的应对(2)
研究各种构件形式,以利用已有的开发成果,提高开发 层次,降低开发代价:子程序库、类库、组件库等;
20世纪80年代,在硬件设计领域形式化方法的工业应用结 果,掀起了软件形式化开发方法的学术研究和工业应用的 热 潮 , Pnueli 提 出 了 反 应 式 系 统 规 格 和 验 证 的 时 态 逻 辑 (temporal logic,简称TL)方法,Clarke和Emerson提出了 有穷状态并发系统的模型检验(model checking)方法;
是否一致并完整,有无矛盾或遗漏?找出并更正其中的错误 和缺陷;
运行中是否会出现不能容忍的状态(死锁、活锁等)。
认识形式化验证
认识形式化验证 软件开发中⼀般使⽤“测试”来找bug,这种⽅法只能找到bug,不能证明程序没有bug。
形式化验证是⽤逻辑来验证程序的可靠性,就是把⼀段程序⽤逻辑的⽅法证明⼀遍,证明它能得到预期的结果,没有bug。
⼀般这类研究主要应⽤于昂贵的航天器材的操作系统、危险的医疗设备的程序之中。
因为航天器材、医疗设备牵扯到⼈的⽣命,如果操作系统出现错误,那么很危险,⼜不能⽤测试⼀遍⼀遍的测,所以⽤形式化验证来做。
⽐如美国航天局NASA就会雇佣⼤批形式化验证的专家来验证他们操作系统的正确性。
学习这个⽅向,最好有⽐较好的逻辑知识(数理逻辑、拉姆达验算),最好⽐较了解程序(⽐如操作系统的设计、编译器的设计等)。
这个⽅向是⽐较犀利的研究⽅向,但不⼤容易出论⽂,需要长时间积累才能发⼀篇好论⽂。
这个⽅向只是科研⽅向,不适合找⼯作,如果你读完硕⼠打算找⼯作⽽不做研究,这个⽅向不适合。
因为企业没⼈⽤形式化验证来验证程序。
Formal Verification(形式验证) 在计算机硬件(特别是集成电路)和软件系统的设计过程中,形式验证的含义是根据某个或某些形式规范或属性,使⽤数学的⽅法证明其正确性或⾮正确性。
形式验证是⼀个系统性的过程,将使⽤数学推理来验证设计意图(指标)在实现(RTL)中是否得以贯彻。
形式验证可以克服所有3种仿真挑战,由于形式验证能够从算法上穷尽检查所有随时间可能变化的输进值。
形式验证形式验证的出现 由于仿真对于超⼤规模设计来说太耗费时间,形式验证就出现了。
当确认设计的功能仿真是正确的以后,设计实现的每⼀个步骤的结果都可以与上个步骤的结果做形式⽐较,也就是等价检查,如果⼀致就说明设计合理,不必进⾏仿真了。
形式验证主要是进⾏逻辑形式和功能的⼀致性⽐较,是靠⼯具⾃⼰来完成,⽆需开发测试向量。
⽽且由于实现的每个步骤之间逻辑结构变化都不是很⼤,所有逻辑的形式⽐较会⾮常快。
这⽐仿真的时间要少很多。
⼀般要做形式验证的步骤有:RTL和RTL。
形式化验证讲义范文
形式化验证讲义范文形式化验证是通过数学方法来证明一个系统或算法的正确性的过程。
它可以帮助我们在软件开发过程中找到潜在的错误和漏洞,并确保我们的系统在各种情况下都能正常工作。
在这篇讲义中,我们将介绍形式化验证的基本原理和方法,以及一些常用的工具和技术。
一、什么是形式化验证形式化验证是一种通过形式规范和数学证明来验证软件或硬件系统的方法。
它使用数学符号和逻辑推理来描述和证明系统的性质,从而确保系统在不同的输入条件下都能正确运行。
形式化验证可以帮助我们验证系统的正确性、安全性和性能。
二、形式化验证的原理和方法1.系统建模:将系统的行为和性质用数学语言描述出来。
这可以包括使用形式化规范语言(如Z、VDM、B、TLA+等)或编程语言来定义系统的接口、状态和操作。
2.性质定义:明确要验证的系统性质,如安全性、正确性、活性、一致性等,并用数学逻辑表达出来。
常用的逻辑形式包括命题逻辑、一阶逻辑、时态逻辑等。
3.形式化证明:使用数学推理规则和工具来证明系统模型满足所要求的性质。
常见的形式化验证方法有定理证明、模型检测、符号执行等。
其中,定理证明方法通常使用数学逻辑和推理规则来构造证明树,而模型检测方法则通过对系统的状态空间进行穷举来验证性质。
4.反例分析:如果无法证明系统满足所要求的性质,可以通过生成反例来帮助找到问题所在。
反例可以是系统的一个具体执行序列,或是一个导致性质不成立的条件。
三、形式化验证的工具和技术1. 定理证明器:它是一种可以自动验证逻辑公式和数学定理的工具。
常见的定理证明器有Coq、Isabelle、ACL2等。
这些工具提供了一种交互式的证明环境,可以帮助用户构造和验证证明脚本。
2.模型检测工具:它是一种可以对系统的状态空间进行穷尽,并验证性质是否成立的工具。
常见的模型检测工具有SPIN、NuSMV、PRISM等。
这些工具通常基于有限状态机模型和时序逻辑来进行验证。
3.符号执行工具:它是一种可以对程序进行符号执行,并生成或检查路径条件的工具。
混成系统形式化验证
软件学报ISSN 1000-9825, CODEN RUXUEW E-mail: jos@Journal of Software,2014,25(2):219−233 [doi: 10.13328/ki.jos.004535] +86-10-62562563 ©中国科学院软件研究所版权所有. Tel/Fax:∗混成系统形式化验证卜磊1,2, 解定宝1,21(南京大学计算机科学与技术系,江苏南京 210023)2(计算机软件新技术国家重点实验室(南京大学),江苏南京 210023)通讯作者: 卜磊, E-mail: bulei@摘要: 混成系统是实时嵌入式系统的一种重要子类,其行为中广泛存在离散控制逻辑跳转与连续实时行为交织混杂的情况,因此行为复杂,难以掌握与控制.由于此类系统广泛出现在工控、国防、交通等与国计民生密切相关的安全攸关的领域,因此,如何对相关系统进行有效的分析与理解,从而保障系统安全运营,是一项具有重要意义的工作.常规的系统安全性分析手段,如测试、仿真等仅能在一定输入的情况下运行系统来观测系统行为,无法穷尽地检测复杂混成系统在所有可能输入下的行为,因此并不足以保证系统的安全性.区别于测试等方法,形式化方法通过求解系统模型状态取值范围等方法来确认系统模型中一定不会出现相关错误.因此,其对于保障安全攸关混成系统的安全性具有十分重要的意义.形式化方法由形式化规约与形式化验证两个方面构成.因此从以上两个角度分别对形式化规约方向上现有混成系统建模语言、关注性质以及形式化验证方向的混成系统模型检验、定理证明的现有主要技术与方法进行了综述性的回顾与总结.在此基础上,针对现阶段实时嵌入式系统复杂化、网络化的特性,对混成系统形式化验证的重要关注问题与研究方向进行了探索与讨论.关键词: 混成系统;形式化方法;模型检验;定理证明中图法分类号: TP311文献标识码: A中文引用格式: 卜磊,解定宝.混成系统形式化验证.软件学报,2014,25(2):219−233./1000-9825/4535.htm英文引用格式: Bu L, Xie DB. Formal verification of hybrid system. Ruan Jian Xue Bao/Journal of Software, 2014,25(2):219−233 (in Chinese)./1000-9825/4535.htmFormal Verification of Hybrid SystemBU Lei1,2, XIE Ding-Bao1,21(Department of Computer Science and Technology, Nanjing University, Nanjing 210023, China)2(State Key Labotary for Novel Software Technology (Nanjing University), Nanjing 210023, China)Corresponding author: BU Lei, E-mail: bulei@Abstract: Hybrid System is a very important subclass of real time embedded system. The behavior of hybrid system is tangled withdiscrete control mode transformation and continuous real time behavior, therefore very complex and difficult to control. As hybrid systemis widely used in safety-critical areas like industry, defense and transportation system, it is very important to analyze and understand thesystem effectively to guarantee the safe operation of the system. Ordinary techniques like testing and simulation can only observe thebehavior of the system under given input. As they cannot exhaust all the possible inputs and scenarios, they are not enough to guaranteethe safety of the system. In contrast to testing based techniques, formal method can answer questions like if the system will never violatecertain specification by traversing the complete state space of the system. Therefore, it is very important to pursue the direction of formalverification of safety-critical hybrid system. Formal method consists of formal specification and formal verification. This paper reviews∗基金项目: 国家自然科学基金(61100036, 91318301, 61321491); 国家高技术研究发展计划(863)(2012AA011205); 江苏省自然科学基金(BK2011558)收稿时间:2013-05-07; 定稿时间: 2013-09-29220 Journal of Software软件学报 V ol.25, No.2, February 2014the modeling language and specification of hybrid system as well as techniques in model checking and theorem proving. In addition, it discusses the potential future directions in the related area.Key words: hybrid system; formal method; model checking; theorem proving1 混成系统简介在实时嵌入式系统,特别是复杂的实时控制系统中,广泛存在这样一类子系统,它们的行为中离散化的逻辑控制与连续性的时间性行为相互依赖,相互影响,彼此互为依存,息息相关.以列车控制系统为例,典型的列车控制系统一般存在多种不同的控制模式来应对当前的车况、路况以及各种突发事件,而系统中的重要参数,如列车速度、当前位置、与前车距离等等,会随着时间连续变化.列车在运行中会为了满足特定的时间约束或者调整当前参数的取值而调整列控模式,而在不同的列控模式下,列车中重要参数的变化规律完全不同,相应地,对各种事件的响应时间也会有所区别.在这种类似的系统中,逻辑控制与时间性行为并不是孤立的两个部分,而是交错地有机结合在一起,构成了一种非常复杂的系统,而这样的复杂实时系统因为其离散控制与实时连续行为混杂叠加的特性,一般被称为混成系统(hybrid system)[1].混成系统是一种嵌入在物理环境下的实时系统,一般由离散组件和连续组件连接组成,组件之间的行为由计算模型进行控制.对于经典混成系统,其构成体现了计算机科学和控制理论的交叉,一般分为两个层面:离散层与连续层.在连续层,一般通过系统变量对时间的微分方程来描述系统的实际控制操作模型以及系统中参数的演变规律;在离散层,则通过状态机、Petri网等高抽象层次的模型来描述系统的逻辑控制转换过程.在两层之间,通过一定的接口与规则将连续层的信号与离散层的控制模式进行关联与转换.大多数复杂实时控制系统行为都包含了连续变化的物理层与离散变化的决策控制层之间的交互过程,因此,混成系统在工业控制和国防等领域大量存在,特别是安全关键系统,如交通运输、航空航天、医疗卫生、工业控制等等系统.相应地,随着它们在人类生活中的应用面越来越广,重要性越来越高,对相应系统质量,特别是可信性的需求也快速提升,系统失效所造成的灾难也越来越沉重,甚至难以接受.在日常生活方面,车载导航系统的小小失误就可能造成交通事故,而飞机导航系统的失误则可能导致机毁人亡.如果扩展到国防军用领域,对软件系统的错误已经几乎进入了零容忍度的阶段.因此,如何对混成系统进行有效的可信性保障,已成为一个亟待解决的问题.一般而言,测试、仿真[2,3]等技术是研究和保障软件质量的主要方法.然而,这些方法主要以运行系统为发现问题的主要手段,由于人力无法穷尽地遍历系统所有可能的运行输入与场景,也就不足以保证检测的完备性,这也就可能给系统后期运行留下了不安全隐患.因此,在对系统错误零容忍的安全攸关系统领域,采用可证明系统模型正确性的形式化验证理论与技术[4,5]来对系统模型进行安全性验证就显得极为重要,这也成为相关领域近期主要关注的问题.形式化方法(formal method)是对以数学为基础的,用以对系统进行说明、设计和验证的语言、技术和工具的总称,其主要可以分为形式化规约(specification)与形式化验证(formal verification)两个方面.形式化规约就是用形式化语言在不同抽象层次上描述部分或整个系统的行为与性质.一般而言,我们称表示系统性质的语言为规约语言(specification language),比如各种时序逻辑(temporal logic)等;我们称描述系统行为的数学模型为系统刻画语言(system description language),如CSP[6]、状态图[7]等.在我们描述了系统的行为与需要满足的性质之后,就需要采用形式化验证来判定最终的软件产品是否满足这些需求和具备这些特征.通过验证,可以判定系统是否满足某个特定的性质,并在系统不满足性质时给出理由.目前,对软硬件系统的验证主要包括模型检验(model checking)[5]和定理验证(theorem proving)[8,9]两个方面.对应地,在混成系统形式化建模与验证方向的研究也主要在上述方向上展开,例如,如何设计具有足够表达能力的建模语言来描述混成系统中的复杂行为;如何设计有效的模型检验方法、定理证明方法来对大规模复杂系统进行有效的验证,回答系统是否满足特定性质的问题.在近20年的密集投入与研究之后,混成系统的形式化建模与验证已经取得了一系列成果[10].本文将对相关主要研究方向与成果进行概述性的总结与回顾.在此基卜磊 等:混成系统形式化验证 221础上,针对现阶段实时嵌入式系统所呈现的智能化、开放化等特征,本文对混成系统近期的研究热点以及下一阶段重点关注的问题进行了探讨与展望.2 混成系统建模语言针对混成系统行为中离散逻辑跳转与连续时间行为交织的特征,相关科研工作者对状态机、CSP 等建模语言进行了实时变量定义、微分方程连续行为等扩展,提出了包括混成自动机(hybrid automata)[1]、混成CSP [11,12]、混成Petri 网[13]、混成程序[14]等在内的一系列形式化建模语言.尽管以上语言之间各有侧重与不同,但是在如何表达系统中的离散与连续行为交织等特性方面,以上语言的扩展之间存在着大量的共通之处.在上述语言当中,混成自动机得到了最为广泛的认可与应用.下面我们就以混成自动机为例来说明相关建模语言是如何针对混成系统的相关特性进行建模与描述的.混成自动机是在状态机基础上进行实时连续变量扩展所构成的一种建模语言.可以定义混成自动机为多元组H =(X ,Σ,V ,E ,V 0,α,β,γ),其中,• X 是实数值系统变量的有限集合,X 中变量的个数也被称为自动机的维度.• Σ是事件名的有限集合,V 是位置节点的有限集合.• E 是转化关系的集合,E 中的元素e 具有形式(v ,σ,ϕ,ψ,v ′).其中,v ,v ′是V 中的元素;σ∈Σ是转换上的事件名;转换卫式ϕ是一个将E 中的转换e 标注为一组约束的标注函数,表示当系统行为触发转换e 时,相应变量的取值满足此约束;ψ是形为x :=c 的重置动作集合,表示当系统行为触发此转换后,相应变量x 的取值会被重置为c ,以上c ∈R ,x ∈X .• V 0⊆V 是初始位置的集合.• α是一个标注函数,它将每个位置映射到一个节点不变式,表示系统行为停留在相关节点时,相应变量取值满足此约束.• β是一个为V 中每个位置节点添加流条件(微分方程)的标注函数,表示当系统行为停留在相关节点时,相应变量取值变化随着时间增长满足此条件.对任意x ∈X ,有且仅有1个x 的流条件属于β(v ).• γ是一个标注函数,它将初始位置V 0中每个位置映射到一组初始条件,初始条件具有形式x :=a (x ∈X ,a ∈R ).对任意位置v ∈V 0,对任意x ∈X ,有且仅有1个x :=a ∈γ(v ).图1是一个经典的自动温度控制器模型[1],我们用此模型来对混成自动机及其各个组成部件进行一个简要的描述.此模型中,变量x 描述的是系统中实时变化的温度数值.当系统驻留在控制模式off 时,加热器被关闭,环境中的温度按照off 节点上的流条件0.1xx =− 下降(可理解为微分方程d x /d t =−0.1x );而当系统驻留在控制模式on 时,加热器被打开,环境中的温度按照on 节点上的流条件50.1xx =− 上升.系统的初始条件被设定为温度20°C,控制模式为off.转换卫式x <19与x >21表示当系统温度降低到19°C 以下时,控制模式就可以从off 切换到on,从而打开加热器;而当系统温度高于21°C 时,则正好相反,控制模式可以跳转到off 模式,从而关闭加热器.最后,在此模型中分别存在两个不变式:x ≥18与x ≤22,这表明了系统停留在控制模式off 和on 时,其实时变量x 的合法取值范围.Fig.1 Hybrid automata for temperature comtroller图1 温度控制器混成自动机模型显然,如果忽略变量x 以及相关的不变式、转换卫式、流条件等元素,这个混成自动机的结构就是一个基本的状态机图.通过将状态机图中的状态节点概念拓展到位置节点(可理解为控制模式),并在每个位置节点上添加相应的连续变量变化规则,可以描述系统在不同控制模式下的实时参数变化过程,从而描述混成系统的具体off0.1xx =− x ≥18 on 50.1x x =− x ≤22x >21x <19x =20222Journal of Software 软件学报 V ol.25, No.2, February 2014连续行为. 由于混成自动机中连续行为与离散行为共存的特质,混成自动机的行为非常复杂,难以控制与把握.因此,现在相关研究领域主要关注于其中一个比较特别的子类——线性混成自动机(linear hybrid automata).给定一 个变量集合X ,我们称表达式0li i i c x =∑~b 为线性表达式(linear term),其中,c i ∈R ,x i ∈X ,~∈{>,<,=,≤,≥},b ∈R .我们 称一组线性表达式的布尔组合(Boolean combination)为一个线性公式(linear formula).给定一个混成自动机H 满足下列条件,我们称其为线性混成自动机(linear hybrid automata):• 在任意控制转换e ∈E 上,转换卫式ϕ中任一约束均为线性公式;• 对任意控制位置v ∈V ,变量x 在α(v )中的定义均为线性公式;• 流条件是形如[,]xa b ∈ 或者x ~a 的变化率集合,其中,x ∈X ,a ,b ∈R ,a ≤b ,~∈{>,<,=,≤,≥}. 如果将图1中的温度控制器模型的流条件进行简单的转换,我们就可以获得一个线性混成自动机版本的温度控制器模型,如图2所示. Fig.2 Linear hybrid automata for temperature comtroller图2 温度控制器线性混成自动机模型线性混成自动机是混成自动机中的一种比较重要的子类.众所周知,线性系统的复杂度远低于非线性系统,并且现有数学技术在线性系统领域已经颇为成熟,可以处理相当大规模的问题空间;而在非线性系统上,现有的数学技术可以处理的问题空间非常有限,远远达不到实际应用的需求.因此,通过线性表达式来描述流条件、不变式、跳转条件等部件,可以大幅度降低系统的复杂度,并且使设计者更容易把握系统的行为,保证系统的正确性.尽管实际应用中的主要系统大部分需要使用非线性控制,特别是流条件部分,无法直接应用线性混成自动机来对系统建模或者描述,但是设计者可以通过抽象(abstraction)的方法拆分原系统的行为,使用一个包含更多控制节点的线性混成自动机模型来逼近非线性自动机的行为,并逐步逼近直到该线性混成自动机的精度可以在最大程度上拟合原非线性系统,从而通过对该线性混成自动机进行分析的方法达到分析原系统的目的[15].事实上,通过在标准线性混成自动机的基础上进一步添加相应的约束与限制,我们可以将其转化成一些非常重要的子类乃至于读者相对更加熟悉的建模语言,如下所示[16]:• 如果对任意控制位置v ∈V ,变量x 在β(v )的定义中均形如0,x= 即,变量x 在所有节点上的变化率均为0,则称x 为一个离散变量(discrete variable).如果一个线性混成自动机中所有变量均为离散变量,则称此自动机为离散系统(discrete system).• 如果对任意控制转换e ∈E ,离散变量x ∈X 在ψ中均形如x :=0或者x :=1,即,变量x 在系统触发每个跳转之后的新取值必为0或者1,则称此变量为一个命题(proposition).如果一个线性混成自动机中所有变量均为命题,则称此自动机为一个有穷状态系统(finite-state system).• 如果对任意控制位置v ∈V ,变量x 在β(v )的定义中均形如1x= ,即,变量x 在所有节点上的变化率均为1;并且如果对任意控制转换e ∈E ,离散变量x ∈X 在ψ中均形如x :=0或者x :=x ,即,系统触发每个跳转之后会将变量x 的值赋值为0或者不变,则称变量x 为一个时钟(clock).如果一个线性混成自动机中所有变量均是命题或者时钟,并且系统内所有线性公式均为形如x~c 或者x −y~c 的线性表达式的布尔组合,其中,x ,y ∈X ,~∈{>,<,=,≤,≥},c ∈Z ≥0,则称此线性混成自动机为时间自动机(timed automata)[17].• 如果存在非零整数k ∈Z ,并且对任意位置节点v ∈V ,变量x 在β(v )的定义中均形如xk = ,与上类似,如果对任意控制转换e ∈E ,变量x ∈X 在ψ中均形如x :=0或者x :=x ,则称变量x 为一个倾斜时钟(skewed clock),即,此变量在每个节点都按照一个不为1的固定变化率进行变化.如果一个线性混成自动机中每个变量均为命题或者倾斜时钟,则称此自动机为多级时间系统(multirate timed system).如果一个多级时间off2x=− x ≥18 on 4x = x ≤22x >21x <19x =20卜磊 等:混成系统形式化验证223系统中变量的变化率共有n 种,则称此系统为n 级时间系统(n -rate timed system). • 如果对任意位置v ∈V ,变量x 在β(v )的定义中均形如0x= 或者1x = ,即,变量x 在所有节点上的变化率不是0就是1;并且如果对任意控制转换e ∈E ,变量x ∈X 在ψ中均形如x :=0或者x :=x ,则称x 为一个积分器(integrator).如果一个线性混成自动机中所有变量均为命题或者积分器,则称此自动机为积分器系统(integrator system).3 混成系统模型检验模型检验是通过穷尽遍历待验证软件系统模型的状态空间来检验系统的行为是否具备预期性质的一种自动验证方法.自20世纪80年代被提出以来,模型检验技术得到了学术界、工业界的广泛重视,并在芯片设计等领域得到了广泛应用.如上文所述,混成自动机是混成系统最主流建模语言.目前,学术界对混成自动机模型检验研究主要集中在混成自动机的安全性性质(safety)[18,19]检验上.安全的直观概念解读为系统运行中不会发生不好的行为.安全性检验即检验从给定的初始条件出发,系统运行中是否会出现违背规约或者不安全的行为.由于混成自动机的运行既包含状态的离散变化,又包含状态的连续变化,其相应的模型检验问题十分困难.因此,目前对混成自动机的模型检验主要集中在安全性的一个子集——可达性问题(reachability)上.对于混成自动机H ,它的可达性规约由H 中的一个位置节点v 和一个变量约束集φ组成,我们通过符号R (v ,φ)来表示.H 满足R (v ,ϕ)可定义为:H 存在一个具体的实时行为可进入节点v ,并且当系统停留在节点v 中一段时间后,系统中实时变量x 取值可满足ϕ中的所有变量约束.可达性问题与安全性问题的关系在于,将系统不安全的行为构建成一个独立的离散“坏”状态,然后检验此“坏”状态是否可达:如可达,则系统中可能发生不安全行为;反之,则系统行为安全.因此,检验系统安全性的问题就变成了计算系统可达空间的问题.也就是说,我们要计算出系统的所有可达状态,并判定这些状态中是否有状态可以使规约R (v ,φ)成真.由于混成自动机中连续行为的存在,混成自动机拥有极为庞大的无限状态空间,所以我们不能像一般模型检验方法一样通过直接枚举遍历的方法来计算出整个可达集,而是必须通过符号化的方法来计算.目前,主流方法是通过一定的约束集来描述系统初始状态集合,并称其为系统初始可达空间.然后,基于系统的流条件、不变式、转换卫式等元素定义相应自动机上的Post 操作,以计算系统在当前状态集下后续可达状态集区间.将计算得到的状态集并入已有可达状态集空间并重复上述过程,直到系统可达状态空间集收敛,即,从当前所有可达状态空间上基于系统规定的连续/离散演变规则不再能抵达新的状态.此时,称所计算得到的状态空间为系统完整可达状态空间集,并进行判断计算所得系统完整可达状态空间集中是否有状态满足规约R (v ,ϕ):如有,则称系统满足相应可达性规约;否则称系统不满足相应规约.上述方法的可行性、有效性等等,与能否在任意的系统状态集上针对给定的微分方程等元素进行数值计算与推演从而生成后续可达状态集密切相关.众所周知,在任意形态数值状态域上进行任意形式的非线性微分方程计算复杂度极高,目前,数学领域还没有有效的方法来解决相应大规模问题.因此,针对一般混成自动机,目前可达集计算的主流方法为将系统的状态域用一种特定的数学形态来过抽象(over-approximation).目前常用的数学形态包括凸多面体(convex polyhedra)[20,21]、分段仿射系统(piecewise affine system)[22,23]、椭圆体(ellipsoidal)[24,25]等等.在使用以上数学形态对可达域进行标识之后,使用相关领域的成熟数学计算方法来求取从当前形态开始后继形态的演变范围及过程.但是,这类方法仍然存在很多问题:首先,过抽象带来的问题是状态域的表达不够精确;其次,此过程无法保证收敛,很可能一直循环而无法停止;最后,以上过抽象方法中数学计算复杂度很高,对系统资源消耗极大,从而无法对高维度复杂系统进行分析.实际上,即使是针对混成自动机中相对简单的子类,线性混成自动机,其可达性问题也已被证明是不可判定的[1,16,26,27].由于以上原因,相关方法在一般性非线性混成自动机上表现并不如人意.特别是由于非线性计算的高度复杂度,目前已有相关工具可验证非线性混成自动机模型的规模非常有限,文献[28]在对主流工具进行整体评估后得出结论为,现有工具很难验证超过5个变量的系统.由于线性数值域计算方法远成熟于非线性计算,复杂度224 Journal of Software 软件学报 V ol.25, No.2, February 2014也能得到较好的控制,因此基于上述理念,相关研究人员以多面体作为线性混成自动机基本状态域的数值表现形式,开发了一系列线性混成自动机模型检验工具,如HyTech [29],PHAVer [30]等,并成功地验证了飞机防撞系统等典型混成自动机案例.值得注意的是,上述线性混成自动机特指前文中所描述的流条件形如[,]xa b ∈ 的自动机形式,称其为线性混成自动机是因为相应流条件积分展开后可以得到变量x 的取值是与时间t 相关的线性函数.在相关研究中,存在另一类类似的混成自动机被称为线性混成系统(linear hybrid system),其流条件形如xAx b =+ ,相关研究者(特别是控制领域)普遍称其为线性混成系统是因为其流条件表现为x 的线性方程,但是其积分展开后会成为包含e t 的非线性方程,所以其并不是线性混成自动机.针对相应的自动机,也有大量相关工具被开发出来,其中较著名的包括来自美国卡耐基梅隆大学的Checkmate [31]、来自法国Verimag 实验室的d/d t [20]等等.目前,相关领域科研工作者在非线性混成自动机模型检验上投入了大量的精力并取得了一定的进展,特别是泰勒模型(Taylor model)、Support Function 等数学模型被应用到了混成系统状态域的表达与计算当中,近年出现的工具flow*[32]就是一个成功应用泰勒模型对非线性混成系统进行验证的示例.flow*要求混成自动机的流条件必须由多项式微分方程描述.用户给定初始区间与一个固定的基本时间步之后,可利用泰勒模型来分析其可达区间.事实上,泰勒模型很适合连续状态的计算,但是当进行离散跳转时,需要和转换卫式做相交操作,而这个操作的复杂度很高.与flow*不同,SpaceEx [33]可处理的系统是对线性混成系统,即,流条件为,xAx b =+ 进行一定放宽后的非线性自动机.SpaceEx 允许系统中的不变式、迁移卫式等元素为凸函数.同样地,在给定一个基本时间步之后,可以利用support function 来计算在此时间步之后的系统状态域.相关工具目前已经在部分非线性系统上进行了验证,但如何扩展可验证系统种类与规模,仍然是一项值得关注的问题.另一方面,反例制导的抽象精化(counter example guided abstraction refinement,简称CEGAR)[34]是一种非常有效的复杂系统形式化验证方法.其基本思想在于:在原系统因过于复杂而难以验证的情况下,对原系统进行抽象后,在简化系统上进行验证.由于系统抽象会引入一些原系统所不包含的行为,因此当进行安全性/可达性检查时,若抽象系统不满足相应规约,则原系统必然也不满足相应规约.然而当抽象系统满足相应规约时,满足此规约的可疑行为可能是由于抽象所带入,因此需要将相应的可疑行为在原系统上进行确认:若此行为在原系统上也满足,则验证结束;否则,分析此行为在抽象前后系统上的区别,从而指导下一轮精化后抽象的展开.通过循环迭代此步骤,可以有效地缩减每次待验证系统规模,从而对复杂系统进行分析.CEGAR 思想同样也在混成系统模型检验上得到了应用.Clarke [35],Alur [36]等人提出了大量混成系统CEGAR 验证方法来处理大规模复杂系统.相关方法提出,将状态谓词作用与混成系统状态空间上进行抽象.然而,此类方法在谓词精化中经常需要对系统状态空间进行拆分,从而大幅度增加了待验证系统的结构,难以对复杂系统开展验证.同样使用CEGAR 思想,针对线性混成自动机,Clarke 等人提出了一种称为迭代式松弛抽象(iterative relaxation abstraction,简称IRA)的CEGAR 框架[37].此方法的主要思路在于:每次抽象时,选取系统中部分实时变量进行丢弃,从而保持系统图形结构,但是对系统变量空间进行降维处理.在降维后的系统上采用PHAVer 等现有工具进行验证,若降维后系统上存在路径可满足相应可达性约束,则将此路径上的变量还原,采用南京大学团队提出的面向路径可达性验证方法[38]对原路径进行编码并验证其是否可行.若此路径在原系统中不可行,则抽取导致此路径在原系统中不可行的约束集,并基于此约束集中的变量修正下一轮系统抽象时所抛弃的变量集合的内容.此方法在典型案例上的性能明显优异于现有工具,如PHAVer 等等,但是由于此方法中仍然依赖于PHAVer 对抽象后系统进行验证,因此当抽象后系统仍然维度较高时,此方法也难以进行处理. 4 混成系统有界模型检验近年来,作为基于BDD(binary decision diagram)的符号化模型检验[39]的一种补充方法,有界模型检验(bounded model checking,简称BMC)技术[40]被提出并得到了广泛的应用.其基本思想是:将模型行为步数通过正整数k 来限制,将系统k 步内行为采用布尔约束编码,然后利用SAT 方法来寻找此布尔约束集的可行解,从而判定系统在k 步内行为是否有不满足规约的情况.文献[40]发现,虽然BMC 方法因为只能验证有限步数内系统。
形式化验证操作系统
形式化验证操作系统形式化验证操作系统是指使用数学和逻辑推理的方法来验证操作系统的正确性和可信性。
这种验证方法通过形式化规范和精确的证明来检查操作系统设计和实现中可能存在的错误和安全漏洞。
下面将介绍形式化验证操作系统的背景、方法和应用。
背景:操作系统是一个复杂的软件系统,负责管理计算机的硬件资源和提供服务。
操作系统的正确性至关重要,因为操作系统中的错误和漏洞可能导致系统崩溃、数据丢失、安全漏洞等严重后果。
传统的测试方法对于操作系统的验证来说是不够的,因为测试只能覆盖有限的场景,而操作系统的功能和交互非常复杂。
形式化验证通过形式化规范和证明来检查操作系统的设计和实现是否满足预期的性质,能够提供更严谨和全面的验证。
方法:1.型检查:使用类型系统对操作系统的源代码进行静态检查,识别类型错误和不合理的操作。
2.模型检查:将操作系统的设计和实现抽象为一个有限状态机或其他形式的模型,然后使用模型检查工具来自动验证这个模型是否满足预期的性质。
3.定理证明:将操作系统的设计和实现表示为一组数学公理和规则,然后使用定理证明工具来证明这些公理和规则,以及预期的性质是否成立。
4.符号执行:通过对操作系统的源代码进行符号执行,自动生成可能的执行路径,并使用约束求解器来判断这些路径是否满足预期的性质。
5.静态分析:对操作系统的源代码进行静态分析,通过检查代码中的约束、不变量和错误模式来发现潜在的错误和漏洞。
应用:1. seL4操作系统:seL4是一个基于L4微内核的开源操作系统,使用形式化验证的方法对其进行了验证。
seL4的正确性和安全性已经由严格的数学证明证明。
2. CertiKOS:CertiKOS是一个基于Coq证明助手的操作系统,能够提供严格和可信的正确性证明。
CertiKOS被广泛应用于关键系统的开发和安全性验证。
3. Linux核心验证项目:Linux核心验证项目使用Coq证明助手对Linux核心模块的功能和安全性进行了验证,并发布了一系列的验证结果和工具。
形式化验证笔记
形式化验证笔记2.2 形式化方法简介形式化方法是一类基于数学的用于精确化规范说明、开发和验证软件和硬件系统的多种方法的总称[28]。
对软件和硬件设计使用形式化方法是为了通过利用适当的数学分析方法,来保证设计的正确性、可靠性和健壮性。
形式化方法一般可以分为形式化规范说明(Formal Specification)和形式化验证(Formal Verification)两大类。
其中形式化验证又可分为定理证明(Theorem Proving)、模型检测(Model Checking)和自动测试用例生成(Automated Test Case Generation)三类。
其中定理证明也称演绎验证(Deductive Verification)。
本文中采用的形式化验证方法属于定理证明的范畴。
下面简要介绍一下这三种形式化验证技术:, 模型检测:模型检测是一种通过对目标系统建立一个有限的模型,并在模型发生改变时,检测某系统属性(如安全性和活性)在该模型中是否保持的技术。
从本质上讲,模型检测技术就是穷尽地对状态空间搜索,并通过模型的有限性来保证该搜索过程一定会终止。
最初模型检测应用在硬件和协议验证领域,大为成功,后来在软件系统的验证上也得到了广泛应用。
, 定理证明:定理证明是一种用某种数学逻辑公式来表达系统及其属性的技术,该数学逻辑公式被定义为一个形式化系统,包含一系列系统公理、已证明的定理及其推论,定理证明的本质就是基于该形式化系统,找到某属性的一个证明的过程。
定理证明通常被应用于对软硬件系统重要属性的机械化验证。
与模型检测的不同是,定理证明一般是需要人辅助来交互地完成证明的,而模型检测可以达到完全的自动化。
由于使用了结构归纳(Structural Induction)等技术,定理证明可以处理无限的状态空间,这一点是模型检测难以做到的。
但由于需要人的参与,定理证明一般较慢且易出错,这一点上模型检测则做得更好。
, 自动测试用例生成:自动测试用例生成是一种通过形式化地分析系统规范说明以及代码,并且通过机械推理技术来实现自动化地给出完全覆盖的测试用例算法的技术。
形式化验证方法浅析
形式化验证方法浅析形式化验证是一种计算机辅助验证的方法,它通过数学逻辑和形式化规范来证明一个系统或软件的正确性、安全性和性能等属性。
相比传统的测试和代码审查方式,形式化验证可以检测到更深层次的问题,并能够提供数学证明的保证,为软件和系统的开发提供了一种全新的验证方法。
形式化验证方法的基本步骤包括问题建模、规范化、验证、分析和优化等过程。
比如一个安全系统的形式化验证一般可以分为以下几个步骤:1.问题建模:将安全系统分解成一个个模块,每个模块分别进行形式化建模,确定模块的功能和属性。
2.规范化:将模块的功能和属性用形式化语言规范化,用数学符号、公式描述模块的预期行为,构建主从模型。
3.验证:利用模型检验器验证模型的正确性和安全性,找出模型中存在的问题,如死锁、数据竞争等并给予修正。
4.分析:对模型中存在的问题进行分析和对比,总结出问题的原因和解决方法。
5.优化:对模型进行优化,提高系统性能和效率,消除错误。
形式化验证方法具有以下几个优点:1.提供了严格的数学证明,保证了系统的正确性和安全性。
2.能够检测到更多的问题,如死锁、数据竞争等,避免了测试和代码审查的漏洞。
3.能够提高系统的性能和效率,在软件和系统的开发过程中有较高的价值。
但形式化验证方法也存在一些限制:1.建模和规范化需要掌握一定的数学和逻辑知识,需要专业人员才能完成。
2.建模和规范化的精度和效率决定了验证的结果和效果。
3.形式化验证方法不能完全取代传统的测试和代码审查方法,两种方法应该相互结合使用。
总之,形式化验证方法是一种有效的计算机辅助验证方法,可以在软件和系统的开发过程中提高开发效率,保证系统正确性和安全性。
但需要专业人员的支持,才能发挥更大的价值。
关于混成系统形式验证几个问题的探讨
关于混成系统形式验证几个问题的探讨摘要:本文系统地介绍了混成系统及形式验证的概念,在验证模型的基础上,给出了两种形式验证方法,并重点阐述了这两种方法的算法步骤和不足,简单地介绍了验证工具。
最后总结了目前混成系统形式验证研究应用的现状和发展方向。
关键词:混成系统形式验证可达性可决定性近年来,包含离散动态子系统和连续动态子系统的混成系统被广泛研究。
它体现了计算机科学和控制理论的交叉。
对混成系统的建模,分析,设计,综合及应用是目前混成系统研究的几大热点,其中混成系统形式验证是混成系统研究的一个重要领域。
为了满足更高的控制要求及构建更复杂的系统混成系统本身的正确性和可靠性尤为重要。
现在已有一些方法和工具用来验证混成控制系统,验证工具和方法多为形式化技术中的形式语言和时态逻辑、面向状态转换图的证明规则、行为时态逻辑方法等。
1、混成系统在自然界中,“混成系统(hybridsystem,简称为HS)”指的是一类其行为由不同特性的进程或实体来定义的系统,在本文中,“混成系统”则可以理解为连续变量过程和离散事件过程并存且相互交换信息的动态系统。
混成系统的特点可以概括为:①系统内存在着性质不同的连续和离散两类变量;②时间和事件共同驱动系统的状态演化;③连续变量穿越阈值使状态使能或失能;④离散状态的变化改变连续变量遵循的变化速率;⑤离散事件发生在离散时刻,具有顺序、选择、并发等特色;⑥状态呈阶段性、间歇性跳跃变化,动态特征显著;⑦对系统的控制表现为对连续状态和离散状态的集成控制;⑧对系统的优化表现为在定性,定量双重指标下的集成优化。
这类系统近十年来受到控制和计算机理论界的广泛关注,是因为无论从应用角度还是理论研究上都具有重要价值。
2、形式验证计算机科学和离散事件系统共同发展了形式验证技术。
形式验证方法一般来说是基于以下三个因素:①系统分析所基于的形式模型;②系统所期望达到的属性的规范说明;③验证算法。
系统期望达到的属性规范依赖于所使用的验证方法,通常有三种属性:①安全性(safetyproperties)是指该自动机的迹(可简单理解为运行路径或者状态轨线)不包含不好的状态,或者是不好的状态对于该自动机是不可达的;②活性(livenessproperties)是指该自动机包含好的状态无限多次;③合时性(timelinessproperties)是指在最小或最大的时间内强制分离某些特有的事件或状态。
形式化验证方法浅析
形式化验证方法浅析形式化验证是一种通过逻辑推理和数学建模来验证系统设计或软件程序的正确性的方法。
它是一种基于形式化规约和数学技术的验证方法,可以用于验证一个系统或软件程序是否满足给定的规范,从而帮助开发者找出设计或实现中的错误和缺陷。
在这篇文章中,我们将对形式化验证方法进行浅析,探讨其原理、应用领域以及优缺点。
形式化验证的原理是基于数学理论和逻辑推理的,它通过建立数学模型和逻辑规约来验证系统或软件程序是否满足特定的性质。
在形式化验证中,我们首先需要对系统或软件进行抽象化建模,将其行为描述成数学模型或逻辑表达式,然后使用数学和逻辑推理的方法来验证这些表达式是否满足给定的规范。
形式化验证的关键在于建立精确的数学模型和逻辑规约,以及使用严格的数学和逻辑方法进行推理和验证。
形式化验证方法适用于对系统或软件的功能性和安全性进行验证,特别是对于关键性系统的验证更为重要。
在航空航天、铁路交通、医疗器械等领域,形式化验证方法被广泛应用于对系统的正确性和安全性进行验证。
在软件开发领域,形式化验证也可以帮助开发者找出设计或实现中的错误和缺陷,从而提高软件的质量和可靠性。
形式化验证方法的优点在于其严密的逻辑和数学基础,能够提供严格的证明和验证过程,确保验证结果的精确性和可靠性。
形式化验证方法可以在设计阶段和实现阶段对系统或软件进行验证,帮助开发者尽早发现和修复错误和缺陷,从而降低开发成本和提高系统的质量。
形式化验证方法还可以帮助开发者对系统的复杂性进行分析和理解,提高系统的可维护性和可扩展性。
形式化验证方法也存在一些局限性和挑战。
形式化验证需要开发者具备一定的数学和逻辑知识,对于一般的软件开发人员来说,学习和掌握形式化验证方法需要一定的时间和精力。
形式化验证方法在实际应用中可能会受到规模和复杂度的限制,对于大规模和复杂的系统或软件,形式化验证可能需要耗费大量的时间和资源。
形式化验证方法还需要开发者编写和维护形式化规约和数学模型,这也需要一定的技术和经验。
古典密码学 形式化验证
古典密码学是指在计算机出现之前使用的一些加密技术,包括凯撒密码、替换密码、移位密码等。
这些加密技术都是基于一定的数学原理和算法,但是随着计算机技术的发展,这些加密技术已经逐渐被现代密码学所取代。
而在现代密码学中,形式化验证是一种重要的技术手段,用于验证密码算法的正确性和安全性。
以下是形式化验证的详细阐述:
一、形式化验证的概念
形式化验证是一种通过数学方法和计算机技术来验证密码算法正确性和安全性的技术手段。
它可以通过数学证明和计算机模拟,检验密码算法的正确性和安全性,从而保证密码算法的可靠性。
二、形式化验证的方法
形式化验证的方法主要包括以下几种:
形式化规约:将密码算法的规范和要求形式化地描述出来,以便于后续的形式化验证。
形式化证明:通过数学方法和逻辑推理,证明密码算法的正确性和安全性。
模型检测:通过计算机模拟,对密码算法进行检测和验证。
符号执行:通过对密码算法进行符号计算,检验算法的正确性和安全性。
三、形式化验证的应用
形式化验证在密码学领域中得到了广泛的应用,例如对称加密算法、非对称加密算法、哈希算法等都可以通过形式化验证来保证其正确性和安全性。
同时,形式化验证也可以用于验证密码协议、安全协议等。
总之,形式化验证是一种重要的技术手段,可以有效地保证密码算法的正确性和安全性,提高密码算法的可靠性和安全性。
形式化验证方法浅析
形式化验证方法浅析
本文将介绍形式化验证方法,首先给出其定义:形式化验证是指应用数学推理和计算
机科学方法对系统进行精确、严密的分析和验证,以确保系统的正确性和可靠性。
简单来说,就是通过数学和计算机科学手段来证明一个系统是否正确。
形式化验证方法主要有以下几种:
1.模型检查法:将系统的行为描述成状态图,通过计算机对状态图进行搜索,以验证
系统的正确性。
2.定理证明法:用逻辑公式描述系统的规则,利用数学证明方法证明这些规则的正确性。
3.符号执行法:通过对程序的语句进行符号执行,推导出其行为,以验证程序的正确性。
4.静态分析法:对程序进行静态分析,发现其中可能出现的错误,以预防错误的发生。
以上方法各有优点和局限性,需要根据具体情况选择合适的方法进行验证。
1.能够发现系统中的潜在问题,避免在使用系统时出现故障。
2.能够对系统进行全面的测试,避免遗漏某些测试用例。
3.可以提高系统的可维护性和可重用性,避免重复的工作。
4.可以提高系统的安全性和可靠性,预防安全漏洞和故障的发生。
但是,形式化验证方法也存在一些局限性:
1.难度较大,需要专业的数学和计算机科学知识。
2.需要投入较大的时间和精力,不适用于软件开发周期较短的项目。
3.验证结果可能存在不确定性,需要结合其他测试方法进行综合评估。
综上所述,形式化验证方法是一种有效的测试手段,可以提高系统的正确性和可靠性。
在软件开发中,可以选择合适的方法进行验证,结合其他测试方法进行综合评估,以确保
系统的质量和稳定性。
形式验证基本原理
形式验证基本原理
嘿,大家好呀!今天咱来唠唠形式验证的基本原理。
你想啊,形式验证就像是给一个复杂的系统做一次超级全面的“体检”。
比如说,咱盖一座大楼,那不得好好检查检查每个部分是不是都稳稳当当的呀!形式验证就是这样,它要确保我们设计的那些电路呀、软件呀,都能按照我们期望的那样准确无误地工作。
比如说吧,你设计了一个智能机器人。
那它的各种动作、反应都是通过
程序和电路来控制的。
形式验证就是要检查这些控制部分有没有问题,就好像给这个机器人做了一次细致到每一个螺丝的“健康检查”!要是没做好形式验证,哎呀,那机器人说不定就会乱套啦,会做出一些奇奇怪怪的动作呢!
再比如,你开发了一款超级厉害的游戏。
那游戏里的各种规则、逻辑都
得靠代码来实现吧。
形式验证就能帮你看看这些代码有没有漏洞,是不是会导致游戏玩着玩着就出问题。
这多重要呀,不然玩家正玩得起劲呢,突然卡壳了,那多扫兴呀!
其实形式验证的基本原理也不难理解啦。
它主要就是通过一些特定的方法和工具,对我们设计的东西进行详细的分析和验证。
就像老师批改作业一样,一个一个细节地去检查,不放过任何一个小错误。
咱生活里到处都需要形式验证呀!没有它,那些高科技产品怎么能让我们放心使用呢?怎么能给我们带来便利和乐趣呢?所以呀,形式验证真的超级重要的!咱可得重视起来,让它为我们的生活保驾护航呀!大家说对不对?。
形式化验证操作系统
形式化验证操作系统在当今数字化的时代,操作系统作为计算机系统的核心,其稳定性、安全性和可靠性至关重要。
为了确保操作系统能够正确无误地运行,满足各种复杂的需求,形式化验证这一技术逐渐崭露头角。
那么,什么是形式化验证呢?简单来说,形式化验证就是使用严格的数学方法和逻辑推理,来证明一个系统(在这里就是操作系统)是否满足特定的性质和要求。
这可不是像我们平常测试软件那样,通过运行一些案例看看会不会出错。
形式化验证是从根本上、理论上证明系统的正确性。
想象一下,操作系统就像是一个巨大的、复杂的机器,里面有成千上万的零部件在协同工作。
每个零部件都有自己的功能和职责,它们之间的交互和协作必须精确无误,否则整个机器就可能会出现故障。
传统的测试方法可能会漏掉一些隐藏很深的问题,而形式化验证则试图把这个巨大的机器完全拆解,从每一个螺丝钉、每一个齿轮的角度去检查,确保它们的设计和工作方式都是正确的。
形式化验证操作系统的过程可以说是一项极其艰巨的任务。
首先,需要对操作系统的各种功能和行为进行精确的数学建模。
这就要求我们对操作系统的内部结构、工作原理有着非常深入的理解。
比如说,进程调度、内存管理、文件系统等这些核心模块,都要被转化为数学公式和逻辑表达式。
这可不是一件容易的事情,因为操作系统的复杂性超乎想象。
一旦完成了建模,接下来就是运用各种形式化验证的工具和技术来进行推理和证明。
这些工具通常基于复杂的数学理论和算法,能够自动地检查模型是否满足我们设定的性质和要求。
如果在验证过程中发现了问题,那就需要回过头去重新审视模型,找出错误的根源,并进行修正。
形式化验证的好处是显而易见的。
它可以帮助我们发现那些在传统测试中难以发现的微妙错误和潜在的漏洞。
比如说,一些边界情况、并发情况下的竞争条件等等。
通过在设计阶段就发现并解决这些问题,可以大大提高操作系统的质量和可靠性,减少后期出现故障和安全漏洞的风险。
然而,形式化验证也并非一帆风顺。
形式验证综述
形式验证综述形式验证是一种有效的验证技术,是一种对系统或产品的验证技术,用于确定所有部件、模块、系统及其无缝集成交互情况。
本文将从以下几个方面就形式验证技术进行综述:一、形式验证技术定义形式验证技术是一种分析技术,是为了确保系统或产品设计中的所有部件、模块、系统协调一致而对其进行验证的技术。
它是一种通用的技术,可以用来验证任何设计中的性能要求,包括基于数学的验证、系统模型的检测和验证、功能性验证等。
二、形式验证的基本步骤形式验证的基本步骤包括:设计说明书的分析,定义和验证模型,编写模型,运行模型,收集和分析结果,以及评估可用性,性能和可靠性。
1、设计说明书的分析:在开始进行形式验证之前,需要仔细阅读系统设计文档,理解设计中涉及的各个模块的功能关系,以及它们之间的交互关系。
2、定义和验证模型:定义和验证模型是形式验证的核心步骤,用于确定系统设计要求是否被满足。
通常,可以使用不同类型的模型,如数学模型、抽象模型、图形模型等,根据设计要求定义不同的模型,并且进行验证。
3、编写模型:定义好模型之后,下一步就是编写模型。
编写模型可以通过实现自动化设计、测试和数据分析等技术来完成,以确保模型的准确性和可用性。
4、运行模型:编写好模型之后,就可以运行模型进行验证测试了。
有时为了证明系统设计中的性能,需要设计可复用的测试系统,用于对实验结果进行重现性测试。
5、收集和分析结果:当模型运行完成之后,会得到各种测试结果。
接下来,需要对测试结果进行收集和分析,以确定系统设计中的性能要求是否达到要求。
6、评估可用性、性能和可靠性:最后,需要评估系统设计中的可用性、性能和可靠性,看是否满足客户和用户的需求。
三、形式验证在产品开发中的作用原来,产品开发中的验证技术主要是基于实施的。
但现在,形式验证技术的出现,用于提高产品质量,降低开发时间和成本的同时,还可以提高验证效率和可靠性。
它可以用于在产品开发中对非功能需求、质量和可靠性等进行部分验证,以确保产品满足用户的需求。
形式化验证讲义课件-PPT
形式化求精
形式化求精是Carroll Morgan(现为新南威尔士大学教授) 在1990年提出来的,最初是基于程序设计的概念,但在之 后逐步发展为一种通用的设计理论,也就是逐步细化的方 式。
形式化求精是将自动推理和形式化方法相结合而形成的一 门新技术,它研究从抽象的形式规格推演出具体的面向计 算机的程序代码的全过程。
含糊性等情况; 利用有限自动机,通过执行一些原子动作进行状态间的变迁
同如时果, 需软要 件多质次软量投得入件到硬了币生很?大命的提高周,软期件的模故障型率仅将为0. 整个软件开发过程分解为一系列 的阶段,并为每个阶段赋予明确的任务。虽然在不同 基于严格定义的数学概念和语言。
事实:软件开发正在从朴素的、非形式的设计方法,向着更加严格、更加形式化的方向转变
文档是非形式化的,只能由人阅读和理解,难以严格 分析和推理;
形式化的程序有严格的形式和语义。程序的所有静态
和动态性质都蕴藏在程序正文中。但程序包含过多 语言细节和实现细节,进行验证的成本极高;
需求和设计以及最终实现的程序的一致性难以判定; 测试不可能完全,发现问题的能力很有限,不能成为
评判标准。 因此,需要把前期的设计过程也形式化。
形式化验证讲义
主要内容
软件开发过程和问题 形式化方法简介 形式化方法历史 主要的形式化证明工具 形式化方法的应用举例 结论
软件开发过程
一般来说,软件开发的主要步骤大致如下:
提出问题并进行需求分析; 设计:包括功能和结构设计; 编码和构建; 调试; 发布,维护和升级。
常用的开发模型:如传统的瀑布模型,较 新近的快速原型、迭代式开发模型等等
它的基本思想是用一个抽象程度低、过程性强的程序去代 替一个抽象程度高、过程性弱的程序,并保持它们之间功 能的一致。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
卜 磊南京大学形式化验证:从混成系统到CPS关键词:形式化验证 混成系统 CPS混成系统是一种嵌入在物理环境下的实时系统,一般由离散组件和连续组件连接组成,组件之间的行为由计算模型控制。
经典混成系统一般分为离散层和连续层,其构成体现了计算机科学和控制理论的交叉。
在连续层,通过系统变量对时间的微分方程来描述系统的实际控制操作模型以及系统中参数的演变规律。
而在离散层,则通过状态机、佩特里网等高抽象层次模型来描述系统的逻辑控制转换过程。
在两层之间通过一定的接口和规则将连续层的信号与离散层的控制模式进行关联和转换。
大多数复杂实时控制系统,都包含连续变化的物理层与离散变化的决策控制层之间的交互过程,因此混成系统在工业控制和国防等领域大量存在,特别是安全系统,如交通运输、航空航天、医疗卫生、工业控制等。
随着在人们生活中的应用越来越广,重要性越来越高,人们对相应系统的质量特别是可信性的需求快速提升,系统失效所带来的灾难也越来越大。
在交通运输方面,车载导航系统的小小失误就可能造成交通事故,而飞机导航系统的失误则可能导致机毁人亡。
在国防领域,对软件系统的错误已经进入零容忍度阶段。
因此,如何对混成系统进行有效的可信性保障成为一个亟待解决的问题。
一般而言,测试、仿真[2,3]等技术是研究和保障软件质量的主要方法。
这些方法主要以运行系统为发现问题的主要手段。
由于人力无法穷尽地遍历系统所有可能的运行输入和场景,也就不足以保证检测的完备性,这可能会给系统后期运行留下安全隐患。
因此,在对系统错误零容忍的安全攸关的系统领域,采用可证明系统模型正确性的形式化验证理论和技术[4,5]来对系统模型进行安全性验证就显得极为重要,这也成为了相关领域近期的主要关注点。
混成系统形式化验证形式化方法形式化方法(formal method)混成系统实时嵌入式系统,特别是复杂的实时控制系统,广泛存在着这样一类子系统:它们行为中的离散化逻辑控制与连续性的时间行为相互依赖,相互影响,彼此互为依存,息息相关。
以列车控制系统为例,典型的列车控制系统一般存在多种不同的控制模式以应对当前的车况、路况以及各种突发事件,而系统中的重要参数如列车速度、当前位置、与前车距离等都会随着时间连续发生变化。
列车在运行中为了满足特定的时间约束或者调整当前参数的取值而调整列车控制模式。
在不同的列车控制模式下,列车中重要参数的变化规律完全不同,对各种事件的响应时间也会有所区别。
在类似的这种系统中,逻辑控制与时间行为并不是孤立的两个部分,而是交错地有机结合在一起,构成了一种非常复杂的系统。
这种复杂实时系统因其离散控制与实时连续行为混杂叠加的特性,一般被称为混成系统(hybrid system)[1]。
是对以数学为基础的对系统进行说明、设计和验证的语言、技术和工具的总称,主要分为形式化规约与形式化验证。
形式化规约就是用形式化语言在不同抽象层次上描述部分或整个系统的行为与性质。
一般而言,我们将表示系统性质的语言称为规约语言,如各种时序逻辑等,将描述系统行为的数学模型称为系统刻画语言,如通信顺序进程(communicating sequential process, CSP)[43]和状态图[44]等。
在描述了系统的行为与需要满足的性质之后,就需要采用形式化验证来判定最终的软件产品是否满足这些需求和具备这些特征。
通过验证,可以判定系统是否满足某个特定的性质,并在系统不满足性质时给出理由。
目前对软件系统的验证主要包括模型检验(model checking)[5]和定理证明(theorem proving)[45, 46]。
模型检验模型检验是通过穷尽遍历待验证软件系统模型的状态空间来检验系统的行为是否具备预期性质的一种自动验证方法。
混成自动机[1]是混成系统最主流的建模语言。
目前学术界对混成自动机模型检验的研究主要集中在混成自动机的安全性[6, 7]检验上。
安全性检验是指从给定的初始条件出发,检验系统运行中是否会出现违背规约或者不安全的行为。
由于混成自动机的运行既包含状态的离散变化,又包含状态的连续变化,因此其相应的模型检验十分困难。
目前对混成自动机的模型检验主要集中在安全性的子集——可达性问题上。
所谓可达性问题是指将系统不安全的行为构建成一个独立的离散“坏”状态,然后检验此“坏”状态是否可达。
目前,主流的混成系统的可达集计算方法是将系统的状态域用一种数学形态进行过抽象(over-approximation)。
常用的数学形态有凸多面体(convex poly-hedra)[8, 9]、分段仿射系统(piece-wise affine system)[10, 11]和椭圆体(ellipsoidal)[12, 13]等。
在使用数学形态对可达域进行标识之后,使用相关数学计算方法来求取从当前形态开始的后继形态的演变范围及过程。
运算结果趋近收敛并最终固定时的形态范围为该混成系统的可达状态范围。
依据上述方法,相关研究人员开发了一系列相关工具,如HyTech[17],PHAVer[18], SpaceEx[19], d/dt[20]等,并成功验证了飞机防撞等典型混成自动机案例。
但是,这类方法仍然存在很多问题。
首先,状态域的表达不够精确;其次,此过程无法保证收敛,很可能一直循环而无法停止;最后,以上数学形态上的计算过程对系统资源消耗极大,无法对高维度复杂系统进行分析。
实际上,即使针对混成自动机中的一个相对简单的子类——线性混成自动机,其可达性问题已经证明是不可判定的[1, 14~16]。
近年来,作为基于二叉决策图(binary decision diagram,BDD)的符号化模型检验[21]的补充方法,有界模型检验(boundedmodel checking, BMC)技术[22]被提出并得到了广泛应用。
它的基本思想是在模型状态空间规模超过经典模型检验方法可检验范围的情况下,通过限定被检验状态空间范围的方法,来高效发现限定范围内系统的问题。
有界模型检验思想同样被应用到混成自动机的可达性检验工作中。
在线性混成自动机领域,目前主要方法是通过可满足性模理论(satisfi-ability modulo theories, SMT)技术对混成自动机在有限步数内行为编码并求解。
文献[24~27]的研究者对时间自动机与线性混成自动机的有界可达性问题进行了大量的实验与分析。
但是由于此方法需要在检验前将系统k步内所有离散跳转与实时连续行为统一编码成一个可满足性模理论约束集,当问题规模,如给定步长大小、系统变量数目、自动机组合内成员数目等增长后,约束集大小将快速增长,导致相应内存需求急剧上升,进而限制了可解决问题的规模。
为有效控制混成系统有界模型检验的复杂度,我们提出了面向路径可达性验证方法,限制单次仅验证自动机图形结构上单次路径的可达性[28]。
相关问题可线性编码成一组线性不等式的可满足性问题,从而用线性规划技术高效判定。
在此基础上,可通过深度优先遍历、可满足性问题求解等多种技术进行阈值内可疑路径枚举,从而对每条可疑路径采用上述面向路径可达性验证进行判定,来实现自动机的有界模型检验[29]。
显然,如何有效减少需要检查的路径数目对整个方法的效率有着很大影响。
针对此问题,我们提出了前后向并行深度优先遍历方法[33],基于IIS技术的不满足路径分析与精化[34]等系列技术来对待检验路径进行剪枝,从而加速相应遍历与验证过程。
在此基础上,我们进一步提出了面向组合系统路径组的新型同步语义——浅同步语义[31],并给出了组合系统路径组可达性的线性约束编码方法[30],以实现相关问题的高效判定。
以此为基础,提出共享事件序列指导的深度优先遍历方法,可自动枚举所有可疑路径组,以实现组合系统有界可达性验证[32]。
基于上述思想,我们还开发了线性混成自动机有界可达性验证工具集BACH[29]。
该工具在国际公认案例集上性能表现优异,无论是在可验证问题的规模,还是在同样问题的验证效率等方面,都体现出特有的优势,例如,BACH在1小时时限内成功验证了一个300多个成员的大规模组合系统[32]。
目前BACH已发展成集线性混成自动机图形编辑器、带参混成系统编辑器、面向路径可达性验证器、有界可达性验证器、Eclipse插件版本、Web建模验证服务、命令行调用应用程序接口以及在线实时建模验证器等多个分支与版本的工具集,并在线发布以供下载1。
定理证明模型检验主要通过遍历状态空间来证明性质不同,定理证明主要解决如何利用逻辑和数学推理验证软件的关键性质。
经过多年研究,定理证明已经取得了一系列进展,提出了一系列相关方法,例如,顺序程序的公理化理论[35]、通信顺序进程、通信系统演算(calculus of communicatingsystem, CCS)[47]等等。
该方法需要有经验的用户提供大量的公理、前提条件及系统的其他相关信息,如不变式等等,再使用逻辑推理方法对其证明,如著名的霍尔(Hoare)三元组{P}S{Q}[35]。
这种三元组描述了一段代码的执行如何改变计算的状态,其中S为执行的程序命令,而P与Q为系统状态断言,分别描述S执行前与执行后的前置与后置条件。
整个三元组可以解读为只要在执行S前P成立,则在执行S后Q也成立。
以此三元组为中心,霍尔为顺序程序的正确性构造了公理和推理规则[35],基于此公理系统可以对程序进行推理证明。
在霍尔逻辑基础上,科研人员为并发、指针等复杂程序上建立了相关逻辑系统,并开发实现了一系列工具,如Isabelle[48], PVS[49]和HOL[50]等。
目前,相关工具已经在大量领域得到了应用。
霍尔逻辑同样被扩展应用于混成系统的定理证明中。
为了对混成系统进行推理证明,需要描述混成系统实时行为及相互间交互的混成系统建模语言,并且需要建立在其基础上的可对混成系统实时微分行为进行推理的逻辑系统。
何积丰等在CSP基础上提出了混成CSP语言[36, 37],用于描述组合混成系统。
在此基础上,周巢尘等对霍尔逻辑进行扩展,建立了能够验证混成系统的逻辑[38, 39],并使用混成CSP对包括国产列孔系统CTCS-3在内的大量关键场景进行描述并成功进行了定理证明。
最近,美国卡耐基梅隆大学的普拉泽(Platzer)等人基于定理证明提出了一种可以验证含有复杂动态行为的混成系统的可靠符号验证算法[40~42],这是混成系统验证领域的重大突破性进展。
其主要思想是不去求解微分方程,而是寻找这些微分方程的微分不变式,从而避免了求解微分方程可能导致的不可控计算量。
他们还提出了一种混成系统的验证逻辑——微分动态逻辑(dL)[40],并通过不动点来计算微分不变式[41]。
在微分动态逻辑中,整个系统可以分解为多个子系统,并计算出各个子系统的子不变式,然后将这些子不变式重1 /BACH/。