具体实施方式
本发明的嵌入式软件可信属性建模与验证方法,将嵌入式软件建模规范MARTE与Z语言、时间自动机的建模过程相结合,并基于FZMCA算法验证模型的可信性质。方法的具体步骤如下:
步骤1建立半形式化模型根据需求建立UML/MARTE类图和状态图。
步骤2建立可信嵌入式软件模型ZAM将半形式化模型向形式化模型转换,并补充其操作规约和可信约束,主要包括下面3个子步骤:
·将MARTE所定义的时钟类型与实例映射至ZAM时间模型ZMtime中的ClockType与Clock集合元素,所述ClockType集合元素的属性包括时钟性质、单位、是否逻辑时钟和最大值,Clock集合元素的属性包括单位、时钟类型、被参考时钟、分辨率和偏移量;定义相应的时间事件类型集合TimedEvent与时间过程类型集合TimedProcess,所述TimedEvent集合元素的属性包括一个时间点,TimedProcess集合元素的属性包括开始和结束时间点、以及它们之间的持续时间。
·将UML/MARTE类图中的数据类型、全局变量、类、类关联、类操作元素映射至ZAM静态模型ZMstatic中的DataType、GlobalVariable、State、Class、Asso与Operation集合元素;根据软件的可信需求定义可信构造型,所述的可信需求包括安全性、可靠性、实时性与可用性,所述的可信构造型包括用于描述可信需求的属性及其约束,以ZMstatic中State集合元素的形式给出;补充软件的操作规约,描述操作前后软件状态中变量的改变方式及约束,以ZMstatic中Operation集合元素的形式给出。
·将UML/MARTE状态图中的状态节点、转移动作、时钟实例、状态转移元素映射至ZAM动态模型ZMdynamic中的S、Σ、C与T集合元素,将软件操作的前置/后置条件映射至相关状态的转移条件,并在ZMdynamic中添加可信约束,所述的可信约束为ZMtime和ZMstatic中与可信需求相关的谓词约束,包括时间约束与数据约束。
步骤3可信性质的验证对ZAM动态模型ZMdynamic中的可信约束进行验证,主要包括下面2个子步骤:
·根据嵌入式软件的可信需求,给出描述其可信性质的ZMTL时序逻辑公式。
·采用模型检测算法FZMCA,判定ZAMdynamic是否满足,若满足则结束验证,否则给出不满足的状态集合。
所述可信嵌入式软件模型ZAM(Z-tA-Marte)融合Z语言、时间自动机以及MARTE建模规范的要素,提出了针对嵌入式软件结构、行为及其可信约束的描述方式,其中可信约束包括时间约束与数据约束。ZAM模型分为时间模型、静态模型与动态模型三部分。
1、ZAM时间模型
ZAM时间模型可用于描述嵌入式软件的时间类型与时间约束语义,弥补了Z语言在描述软件时序性质方面的不足。ZAM时间模型的建模元素包括:时钟类型、时钟实例、以及时间事件、时间过程的两种时间构造型,分别对应于MARTE时间模型TimeAccesses包中的Clocks与TimeRelatedEntitie包中的TimedEventModels和TimedProcessingModels。ZAM时间模型的元模型如图1所示,左侧以长方形表示的为五种基本时间类型,右侧以圆角长方形表示的是ZAM时间建模元素。下面采用Z语言模板给出ZAM时间模型的定义,并给出嵌入式软件中时间约束的形式化描述方法,以便进行严格的分析与验证。采用Z语言的谓词不变式对建模元素的属性进行约束,能够使建立的时间模型具备一致性,有利于提高软件建模的正确性与效率。
定义1.ZAM的基本时间类型TimeValueType可分为TimeInstantType、TimeDurationType、TimeUnitType、TimeNatureType以及TimeConstraint五种类型,分别用于描述时间点、持续时间、时间单位、时钟性质以及时钟约束,其中:TimeInstantType和TimeDurationType为整数类型;TimeUnitType包括物理时钟单位或自定义的逻辑时钟单位;TimeNatureType包括连续dense和离散discrete;TimeConstraint是关于时间属性的一阶逻辑表达式。因此,提出的ZAM时间模型ZAMtime是一个如式1所示的四元组。
ZAMtime=(ClockType,Clock,TimedEvent,TimedProcess)(式1)
式1中,ClockType代表自定义的时钟类型集合,Clock代表系统中的时钟实例集合,TimedEvent代表自定义的时间事件类型集合,TimedProcess代表自定义的时间过程类型集合。
下面分别给出四元组的具体定义:
(1)时钟类型ClockType
时钟类型是ZAM模型中时钟实例的类型,包括理想时钟类型与自定义时钟类型,其中理想时钟类型IdealClockType是标准的物理时钟类型,下面给出自定义时钟类型的结构。ClockTypeState是自定义时钟类型的状态空间,包含了时钟的性质(nature)、单位(unitType)、是否逻辑时钟(isLogical)等一系列属性,其中isLogical的取值范围为0和1;ClockType集合中的元素是自定义时钟类型<clockTypeName>ClockType,其谓词部分包括对其属性的赋值,以及需要满足的时间约束TCs,TCs是一个TimeConstraint类型的序列。ClockTypeState与<clockTypeName>ClockType的定义方法如下:
上面的模式中,Ξ用于表示声明状态空间,即在<clockTypeName>ClockType模式中包含ClockTypeState的所有变量;<>中的元素为可替换项;表示自然数类型,表示有理数类型,seq表示Z语言中的序列类型。
(2)时钟实例Clock
时钟实例是时间事件与时间行为所参考的具有某一时间类型、单位、频率及约束的时钟。ClockState是时钟实例的状态空间,包含了时钟实例的单位(unitType)、时钟类型(type)、被参考时钟(referToClock)、分辨率(resolution)、偏移量(offset)等属性;自定义时钟实例<clockName>Clock中需要声明时钟实例的状态空间和时钟类型的状态空间,谓词部分还包括时钟实例需要满足的时间约束TCs;将某个时钟实例与类或操作进行绑定,即在相应的类或操作模式中添加声明后,即可在模式内部使用其成员变量。ClockState与<clockName>Clock的定义方法如下:
类似MARTE时间模型,我们定义一个理想时钟类型的实例idealClock,该实例在定义时钟实例时可直接作为参考时钟使用。因此,ZAMtime在建立之前的默认状态可定义为
嵌入式软件的多时钟特性要求不同的软件操作能够参考不同的时钟,并且能够描述时钟之间的关系。在本发明提出的时间模型中,这种特性由时钟模式中的referToClock、resolution与offset三个属性来体现。
(3)时间事件类型TimedEvent
时间事件记录了参考某一个时钟实例的时间值。TimedEventState是时间事件类型的状态空间,包括所参考时钟(clock)、事件发生时间点(timeOccur)两个属性;时间事件类型<teName>TE的定义需要声明所参考时钟,其谓词还包括时间事件需要满足的时间约束TCs。TimedEventState与<teName>TE的定义方法如下:
(4)时间过程类型TimedProcess
时间过程描述了具有开始时间点、结束时间点以及持续时间三个基本属性的时间行为。TimedProcessState是时间过程类型的状态空间,包括所参考时钟(clock)、过程持续时间(timeDuration)两个属性;时间过程类型<tpName>TP中声明了开始时间事件(<teName1>TE1)与结束时间事件(<teName2>TE2),相同的属性名通过添加下标作为区分;谓词部分的约束包括:当时间事件作为时间过程的成员时必须参考同一时钟实例,而持续时间值timeDuration必须等于结束时间点timeOccur2与开始时间点timeOccur1之差。将某一操作与<tpName>TP绑定后,即可在操作的谓词描述中使用其属性。TimedProcessState与<tpName>TP的定义方法如下:
2、ZAM静态模型
ZAM静态模型是一种基于面向对象(Object-Oriented,OO)结构的可信嵌入式软件静态模型,包括UML类图基本元素以及MARTE非功能属性类型,并借助Z语言的“描述性”特征补充模型中的操作规约与可信约束,弥补了现有建模方法在描述嵌入式软件可信属性方面的不足。ZAM静态模型的建模元素包括:数据类型、全局变量、状态空间、类、类关联、操作等,其中状态空间可用于描述类和操作的可信构造型,从而可采用谓词不变式对可信构造型中的属性进行约束。ZAM静态模型的元模型如图2所示,其中以长方形表示的为基本静态建模元素类型,以圆角长方形表示的是ZAM静态建模元素。通过与Object-Z的元模型进行对比可以看到,ZAM可通过声明状态空间来表示类成员对类的继承关系,形成的软件规约结构清晰、简洁、且便于采用成熟的工具进行分析与验证。
定义2.ZAM静态模型的基本类型包括性质Property和约束Constraint,其中Property可分为属性Attribute与参数Parameter,Constraint可分为不变式Invariant与谓词约束Predicate。因此,提出的ZAM静态模型ZAMstatic是一个如式2所示的六元组。
ZAMstatic=(DataType,GlobalVariable,State,Class,Asso,Operation)(式2)
式2中,DataType代表数据类型集合,GlobalVariable代表全局变量集合,State代表状态空间集合,Class代表类集合,Asso代表类关联集合,Operation代表操作集合。下面分别给出六元组的具体定义:
(1)数据类型DataType
数据类型集合中需包含建模过程中使用的全部自定义数据类型,设集合中的每个元素dataType为一个给定集合,则数据类型的定义方法如下:
上面的模式中,中的元素为可选项,带有下标i的元素为可重复项。
(2)全局变量GlobalVariable
全局变量集合中的元素中可包含变量需遵从的约束,这些约束为操作规约中变量的变化规定了范围。全局变量的定义方法如下:
(3)状态空间State
状态空间为类或构造型定义了一系列属性,并可描述属性之间的约束,可避免类模式与操作模式中冗余的声明与约束。状态空间的定义方法如下:
在上面的模式中,表示一组Attribute类型变量的集合。
要描述嵌入式软件中的可信属性约束,首先需要定义可信属性的构造型(dependabilitystereotypes)。在Z-MARTE静态模型中,状态空间模板<stateName>State可根据软件的可信需求扩展为可信构造型。比如:为描述类的安全属性,可采用状态空间模板定义一个可信构造型,并根据具体的安全需求为其定义安全等级、安全权限、安全资源、安全策略等属性。通过在类或操作中声明可信构造型,可以灵活地针对软件可信需求进行可信约束的描述。
(4)类Class
类是面向对象软件模型中的基本结构,描述类结构及其数据约束。类模式的声明部分包含状态空间、属性、操作、关联等基本元素,其中可信构造型状态空间<depNamei>Statei描述了某些可信属性需求的结构。类模式的谓词部分描述了必要的约束条件。类的定义方法如下:
(5)类关联Asso
类关联模式与UML模型中的类关联类似,包括关联端名称、关联类型与多重性等属性。其中关联类型AssoType包括普通关联association、依赖dependency、聚合aggregation、组合composition等类型;多重性属性的类型Multiplicity则定义为一个由正整数与*号组成的集合。类关联可为某些可信属性构造型提供所需要的信息,比如安全性模型中的数据流关系、可靠性模型中冗余模块与修复模块的多重性关系等。类关联的定义方法如下:
(6)操作Operation
操作模式的声明部分除了类状态空间、输入变量与输出变量之外,可声明时间构造型<tpName>TP与可信属性构造型<depNamei>Statei,用于描述操作中必要的时间约束(如操作发生时间与执行时间等)与可信属性约束(如执行该操作的安全权限等);操作模式的谓词部分可分为前置条件与后置条件两个部分,当软件当前状态满足前置条件时该操作才能够执行,并且操作执行完成后的软件状态需满足后置条件。其中preConditions与postConditions为数据约束条件,而preTCs与postTCs为时间约束条件。操作的定义方法如下:
上面的模式中,Δ用于表示同时声明状态空间的前状态与后状态,即状态空间中的每个变量都声明其前状态值与后状态值(在变量后加’表示其后状态值),在谓词约束中以前、后状态值的关系来描述操作前后变量的变化情况;变量后加?表示输入变量,加!表示输出变量。
3、ZAM动态模型
ZAM动态模型可用于描述嵌入式软件行为中的可信约束,解决了现有建模方法中功能模型与非功能模型的融合问题。ZAM动态模型的建模元素包括:状态、转移动作、时钟、状态转移等,我们还给出了这些元素与时间/静态模型所描述的可信约束之间的一组二元关系,用于描述嵌入式软件行为的可信属性。
定义3.假设一个ZAM模式中的变量为x1,...,xn,那么它的谓词部分可以看成是一个n元谓词p。一个ZAM模式schema转换而成的n元谓词约束记为schema→p(x1,...,xn)。特别地,一个ZAM操作模式op中的数据前置条件转换而成的n元谓词约束op→pre(x1,...,xn)记为preop,数据后置条件转换而成的n元谓词约束op→post(x1,...,xn)记为postop;相应地,时间前置/后置条件转换而成的n元谓词约束记为preTop与postTop。操作模式op所参考的时钟记为xop。
定义4.设C是时钟的有限集合,C上的时间约束集合记为Φ(C),时间约束g∈Φ(C)的语法定义如下:
其中x∈C,~∈{<,≤,>,≥},c∈Ν+(Ν+是非负整数的集合),g1,g2∈Φ(C)。
提出的ZAM动态模型ZAMdynamic是一个如式3所示的六元组。
ZAMdynamic=(S,S0,Σ,C,T,Μ)(式3)
其中:
(1)S是状态的有限集合。
(2)S是初始状态的有限集合,并且若S0=φ那么ZAMdynamic就为空。
(3)Σ是转移动作的有限集合。
(4)C是时钟的有限集合。
(5)T是状态转移的集合,一个状态转移(s,a,λ,s′)∈T表示由状态s通过转移动作a转移到s′,且中的时钟被重置为0。其中,若s≠s′,则该状态转移被称为离散转移;若s=s′,则该状态转移被称为延迟转移,即系统在状态s中停留一个时钟单位。对于一个状态转移(s,a,λ,s′)∈T,其可信转移条件由s与s′上的数据约束以及s与a上的时间约束组成,如式4所示。
CS(s)∧FS(s)∧CΣ(a)∧FS(s')(式4)
可信转移条件的映射方法如下:
·由于状态转移是瞬时的,因此我们将对应软件操作的时间前置/后置条件分别映射至源状态与转移动作的时间约束,即满足与
·对应软件操作的数据前置/后置条件分别映射至源状态与目标状态的数据约束,即满足 与
(6)M是状态S、转移动作Σ、时钟C与可信约束之间的一组二元关系,Μ=(CS,CΣ,FS,FΣ,FC),具体定义如下:
·CS是状态与时间约束的二元关系,是S到时间约束集合Φ(C)的一个映射:
CS(s)=gS,其中s∈S,gS∈Φ(C)。
·CΣ是转移动作与时间约束的二元关系,记为Σ到时间约束集合Φ(C)的一个映射:
CΣ(a)=gΣ,其中a∈Σ,gΣ∈Φ(C)。
·FS是状态与数据约束的二元关系,记为S到ZAM状态空间集合State的一个映射:
FS(s)=state,其中s∈S,state∈State;
特别地,每个s∈S0对应于一个初始化状态模式,包含全局变量、构造型或其他变量的初始赋值;FS(s)也可以对应一个空状态。
·FΣ是转移动作与数据约束的二元关系,记为Σ到ZAM操作集合Operation的一个映射:
FΣ(a)=op,其中a∈Σ,op∈Operation。
·FC是时钟与数据约束的二元关系,记为C到ZAM时钟实例集合Clock的一个映射:
FC(x)=clock,其中x∈C,clock∈Clock。
下面对有限域ZAM模型上的自动验证方法进行具体描述:
基于ZAM模型描述的嵌入式软件行为模型及其中的可信约束,采用模型检测技术来进行可信性质的验证。模型检测的基本思想是用状态转移系统(P)表示系统的行为,用模态/时序逻辑公式描述系统的性质,将“系统是否具有所期望的性质”的验证过程转化为数学问题“状态迁移系统P是否满足某个公式记为进一步,需要验证P中的每一个状态都满足某个公式记为在前文定义的ZAM模型的基础上,我们给出了描述嵌入式软件可信性质的时序逻辑公式集合ZMTL,并设计了有限域ZAM动态模型上的模型检测算法。本发明提出的可信验证方法能够支持对软件模型中数据约束和时间约束的验证,从而对嵌入式软件的实时性、安全性、可靠性等性质进行验证。
1、时序逻辑公式ZMTL
ZAM动态模型中在ZAM静态模型的基础上对状态与操作进行了扩展,弥补了现有的自动机模型在静态数据约束描述方面的不足。为了描述嵌入式软件可信性质,我们在ZAM动态模型的基础上给出一个时序逻辑公式集合ZMTL(ZAMTemporalLogic),用于描述ZAM动态模型的安全性、活动性等性质。进一步,我们提出一个模型检测算法来验证状态转移系统ZAMdynamic是否具备所期望的可信性质即验证
为了验证ZAM动态模型是否满足某个ZMTL公式,需要给出ZAM动态模型所描述的软件行为的具体含义。因此我们给出ZAM动态模型中计算与可满足状态的定义:
定义5.计算是状态转移系统的执行过程,ZAM动态模型ZAMdynamic中的一个计算可以表示为一个有限的状态序列π=(s0,s1,...,sn),其相邻状态满足(si,a,λ,si+1)∈T,i∈N,i<n。对于一个计算π=(s0,s1,...,sn),令π[k]=sk,k∈N,k≤n。记∏(s)为ZAMdynamic中所有以状态s为起点的计算的集合,即∏(s)={π|π[0]=s}。将ZAMdynamic中满足ZMTL公式语义的状态s称为的可满足状态,即记为一个ZAMdynamic中公式的可满足状态集合。
在ZAMdynamic的一个计算π中,若某一状态转移(si,a,λ,sj)满足a=λ=φ,则说明由si到sj的转移不需要转移动作且不消耗时间,那么我们可在π中将si与sj合并,记为π[i]=si(sj)。
下面我们给出ZMTL中公式的语法与语义。
定义6.设那么公式集合ZMTL中的公式可以有以下七种形式:
其中,公式是基本形式,以n元谓词p的形式表示,x1,...,xn是变量;公式以否命题的形式表示;公式以两个子公式合取的形式表示;公式表示对于类型为T的任意变量x都成立的公式。这四种形式是ZMTL公式的基本形式,而后三种形式则可用于表达较为复杂的语义。七种ZMTL公式的语义可以通过其可满足状态来定义,具体如下:
根据以上语义定义可知,公式可用于表示状态s的所有后继状态均满足 公式可用于表示对于ZAMdynamic的任一计算π=(s0,s1,...,sn),在区间[π[a],π[b]]内“总是满足”,公式可用于表示对于ZAMdynamic的任一计算π=(s0,s1,...,sn),到达区间[π[a],π[b]]内的某个状态π[i]时“最终满足”并且在状态π[i]之前的所有状态均满足
显然,可通过ZMTL公式中的EG[a,b]与EU[a,b]来描述ZAM动态模型的安全性、活动性等性质,本质上是描述了ZAM动态模型中的嵌入式软件数据约束与时间约束,从而实现对嵌入式软件可信性质的刻画。据此,我们采用ZMTL公式描述待验证软件的可信性质;进一步,我们针对ZAM动态模型中的可信约束提出了相应的模型检测算法,可对嵌入式软件行为进行可信验证。
2、基于有限域ZAM动态模型的模型检测算法FZMCA
针对ZAM动态模型ZAMdynamic的模型检测方法由以下两个步骤组成:首先,根据定义6给出描述可信性质的ZMTL公式第二步,采用模型检测算法FZMCA判定是否成立,若满足则结束验证,否则给出不满足的状态集合。下面我们对FZMCA算法的设计思路进行介绍。
由模型检测的原理可知,在判定的过程中可以通过前驱/后继状态的计算得到ZAM动态模型中的可满足状态集合。前驱/后继状态的计算方法即为前向/后向分析方法,其中前向分析方法由于其可终止性而得到了更多的研究[35]。由于引入了ZAM模式描述的状态与转移动作元素,因此要在ZAMdynamic中进行前驱状态的搜索,首先需要解决状态转移的可信转移条件的验证问题,即一阶逻辑公式的验证问题。
由定义4可知,ZAMdynamic中的可信转移条件与ZAM时间/静态模型中描述嵌入式软件可信性质的谓词约束是对应的,在本发明中可分为数据约束与时间约束。由定义3可知,ZAM状态空间模式FS(s)可以看成一阶逻辑公式FS(s)→p(x1,...,xn)。因此,为了验证某个状态s满足可信转移条件g,必须验证FS(s)→p(x1,...,xn)与g这两个一阶逻辑公式之间的推导关系。由于一阶逻辑公式的不可判定性,因此这样的验证过程是不可能实现的,但是如果只考虑描述逻辑和命题逻辑等可判定的子逻辑,那么就可以在有限的状态空间中实现可信约束的模型检测。因此,我们定义ZAM动态模型的一个可判定的子集,使其每一个状态和动作所对应的模式(schema)中,每个变量的取值都限制在有限多个,称这一类ZAM动态模型为有限域ZAM动态模型。
定义7.如果每一个变量vi只有有限多个值,即每个类型Ti只有有限多个元素,则一个ZAM模式S□[v1:T1;...;vm:Tm|p1;...,pn]是有限域ZAM模式,其中i=1...m。因此,一个ZAM动态模型ZAMdynamic=(S,S0,Σ,C,T,Μ),其中Μ=(CS,CΣ,FS,FΣ,FC),被称作有限域ZAM动态模型,如果下面的条件同时成立:
(1)对每个s∈S,FS(s)是一个有限域ZAM模式;
(2)对每个a∈Σ,FΣ(a)是一个有限域ZAM模式;
(3)对每个x∈C,x的取值范围是N+。
由于我们以确定的软件行为作为基础,那么为了验证软件行为是否满足可信性质首先需要根据软件的输入参数得到有限域ZAMdynamic的一个计算π,其次计算π中的状态是否全部满足由定义4可知,若π=(s0,s1,...,sn)中的一个转移(si,a,λ,si+1)为离散转移,则不消耗时间;若为延迟转移,则消耗某个时钟x的1个时钟单位。因此,我们可将π中延迟转移的状态下标看成离散的时间值。那么,根据ZAMdynamic模型中由可信转移条件所决定的延迟转移状态序列,在ZAMdynamic的每个状态上添加一个离散的时间序列,可以得到ZAMdynamic的一个计算π。若xa是连续的,那么我们需要将其时钟值进行离散化处理。得到计算π之后,我们就可以通过计算π中的可满足状态集合来验证
根据定义6中ZMTL公式的语义,可以得到计算有限域ZAMdynamic中ZMTL公式的可满足状态集合的方法:与可以由定义6直接得到,而以及可采用前向分析方法[35]进行状态搜索,其递归搜索方法由定理1给出。为了便于描述,我们定义前驱状态与子公式这两个辅助算子:
定义8.一个ZAM动态模型P中,状态集合Si∈S的前驱状态集合为:
定义9.一个ZMTL公式的子公式队列为并且如果是的子公式,是的子公式,那么在队列中出现在的前面。
定理1.对于一个给定的有限域ZAM动态模型ZAMdynamic,关于以及三类ZMTL公式的可满足状态集合见式5~式7:
定理1给出了关于三类ZMTL公式可满足状态集合的结论,可利用与其前驱状态集合的递推关系,借助前向分析方法与数学归纳法进行证明。定理1的具体证明过程请见附录。由定理1可知,对于采用EG[a,b]和EU[a,b]算子的ZMTL公式,我们可以通过设计递归搜索算法来计算其可满足状态集合。我们提出的有限域ZAM动态模型上的模型检测算法FZMCA(ModelCheckingAlgorithmonFiniteZAM)的描述如下:
输入:ZAMdynamic=(S,S0,Σ,C,T,Μ),其中Μ=(CS,CΣ,FS,FΣ,FC);
输出:验证通过则输出true,否则输出一个验证不通过的子公式及其不满足状态集合。
对于的子公式队列中的每一个子公式分以下七种情况进行的计算:
情况1
情况2
情况3
情况4
情况5
情况6
情况7
计算完毕后,如果则输出否则输出true。
由嵌入式软件可信属性建模与验证方法所构建的一种嵌入式软件可信属性建模与验证框架,分为UML/MARTE图形层、模型转换层、ZAM模型层与可信验证层四个层次。所述的嵌入式软件可信属性建模与验证框架将半形式化与形式化的建模过程相结合,形成建模过程和语义表达上的互补,并提供形式化的可信性质验证功能。其中:
(1)UML/MARTE图形层由UML/MARTE模型构成;提供嵌入式软件的图形化建模功能,由UML/MARTE的各种元模型库支持;
(2)模型转换层由模型转换器与模型映射规则库构成;可进行UML/MARTE图形层与ZAM模型层的交互与转换;
(3)ZAM模型层由ZAM模型构成;提供嵌入式软件结构、行为及其可信约束的形式化建模功能,由ZAM元模型支持;
(4)形式化验证层由时序逻辑公式ZMTL与模型检测算法FZMCA构成;提供对ZAM动态模型的形式化验证功能。
下面结合实施例对本发明做进一步详细的描述:
以一个简化的飞机指挥控制软件为例,采用ZAM模型建立软件的可信属性模型,并采用基于有限域ZAM动态模型的模型检测算法FZMCA对其可信性质进行验证。
1、示例软件概述及可信需求
示例软件的功能包括:数据收集、计算决策以及执行任务三个阶段,相应的功能模块包括传感器模块、决策模块、任务执行模块以及指控模块,其中传感器模块与任务执行模块为嵌入式设备的软件控制模块。软件的工作流程是:传感器模块采集原始数据发送至决策模块,决策模块对原始数据进行计算,将得到的决策数据发送给任务执行模块执行某项任务,并返回任务结果,同时由指控模块对各模块进行指挥与控制。另外,假设软件用户分为管理员与普通用户两类,管理员拥有最高操作权限,而普通用户仅拥有对原始数据的操作权限。
下面,针对嵌入式软件高可信需求中的实时性与安全性需求,给出示例软件的可信约束:
·时间约束:传感器每2ms发送一次数据;数据计算迭代5次,每次计算过程不超过1ms;任务执行模块的执行时间不超过3ms。
·数据约束:示例软件中的数据保密性等级划分为无密、秘密、机密、绝密四个等级,而软件用户的操作权限也对应的分为这四个等级,对数据执行操作前需要进行用户权限的匹配。
为了方便叙述,假设示例软件的决策计算方法为求和计算、决策数据为原始数据的平均值,并且任务执行模块返回的任务结果为由决策数据所确定的二值结果。
2、建立UML/MARTE模型
示例软件的类图如图4(a)所示,共包括四个类:Sensor、Computer、Device以及Controller。示例软件的数据类型包括三个:传感器原始数据SData、决策数据RData以及任务结果数据FBData。我们以Controller类的视角给出示例软件的状态图,如图4(b)所示。
3、建立ZAM模型
·ZAM时间模型
根据定义1,我们定义示例软件的ZAM时间模型ZAMtime如下:
ZAMtime=({ChronometricClockType},{DCClock},{DCTE},{DCTP})
(1)时钟类型ClockType与时钟实例Clock
我们定义一个离散时钟类型ChronometricClockType,并定义该类型的时钟DCClock作为全局时钟。DCClock参考理想时钟idealClock,单位为秒,分辨率为10-3。具体定义如下:
(2)时间事件类型TimedEvent与时间过程类型TimedProcessing
示例软件中的时间事件与时间过程均参考全局时钟DCClock,可作为软件模型中时间相关变量的基本类型。具体定义如下:
·ZAM静态模型
ZAM静态模型的建立可分为两个阶段:首先,将MARTE类图元素与ZAM静态模型建模元素进行映射,并建立必要的软件非功能结构;其次,补充状态模式与操作模式的谓词约束。根据定义2,我们给出示例软件的ZAM静态模型ZAMstatic如下:
下面给出ZAMstatic中关键模式的定义。
(1)数据类型
示例软件的数据类型包括传感器采集的原始数据SData、决策数据Rdata、二值的任务结果数据FBData、用户User以及安全等级SL,均以给定集合的形式定义。具体定义如下:
[SData,RData,FBData,User,SL]
FBData=SUCCESS|FAIL
User=Admin|Common
(2)全局变量
全局变量iteration代表计算迭代次数;cur_it记录当前迭代次数,初始值为iteration,每进行一次计算操作后减1,cur_it=0是软件计算过程的终止条件;threshold代表决策数据RData的阈值,若高于阈值则任务执行成功,否则任务执行失败。具体定义如下:
(3)状态模式State
Sensor、Computer、Device以及Controller类的状态模式可由UML类图直接得到,下面以Computer类为例给出其状态模式:
除了描述软件类结构的状态模式以外,针对示例软件的安全属性,我们定义一个用户状态模式userState用于描述执行软件操作的实体,其中声明了当前的用户curUser,以及一个用于获取该用户操作权限等级的函数getSL。具体定义如下:
安全等级SL是一个0~3范围内的整数值,代表了从低密级到高密级的四个操作权限等级,可用于在操作执行前进行操作权限的确认。假设原始数据的密级为1、决策数据的密级为2、结果数据的密级为3,则根据示例软件的安全性需求,普通用户的权限值设为1、而管理员用户的权限值设为3,即:
getSL(Admin)=3,getSL(Common)=1
(4)类模式Class
类模式中的主要元素可由UML类图直接得到;如有必要,则需添加可信构造型、谓词约束等其他元素。下面以Computer类为例给出其类模式:
(5)类操作模式Operation
根据示例软件的时间特性需求,具有时间约束的类包括Sensor、Computer与Device。假设相对于数据计算与任务执行的时间,对象间的通信时间可忽略不计,因此示例软件中的时间关键操作包括Sensor类中的GetSDataOp、Computer类中的ComputeOp以及Device类中的GetFBDataOp,其中GetSDataOp操作所需的权限应不小于1、ComputeOp操作所需的权限应不小于2、而GetFBDataOp操作所需的权限应不小于3。由于篇幅有限,这里仅给出ComputeOp与GetFBDataOp操作的定义。具体定义如下:
ComputeOp操作接收原始数据s?后,在满足前置条件“cur_it>0∧getSL(curUser)≥2”的条件下,计算s?与当前决策数据rData的和,并输出更新后的决策数据,同时将cur_it减1;GetFBDataOp操作在满足前置条件“cur_it=0∧getSL(curUser)≥3”的条件下,接收决策数据r?,计算得出原始数据的平均值rData’,并通过比较其与阈值threshold的大小,输出任务执行结果。
·ZAM动态模型
根据定义4,我们给出示例软件的ZAM动态模型ZAMdynamic如下:
ZAMdynamic=(S,S0,Σ,C,T,Μ),Μ=(CS,CΣ,FS,FΣ,FC).
其中:
S={d,c,ac,do,end},S0={d},Σ={s,comp,fb},C={x},
CS={d→x≤2,c→x≤1,do→x≤3},CΣ=φ,
FS={d→SensorState,c→ComputerState,ac→φ,do→DeviceState,end→φ},
FΣ={s→GetSDataOp,comp→ComputeOp,fb→GetFBDataOp},
FC={x→DCClock}
其中d为初始状态,包含全局变量、可信构造型中变量等的初始化信息;ac是一个空状态,用于表示状态转移分支;对于每一个状态转移(s,a,λ,s′)∈T,a≠φ,有λ=C={x},对于其余状态转移则有λ=φ;CS由时间关键操作中的时间约束得出。这里没有以集合形式给出状态转移集合T,而是采用图5中的形式进行直观的表示。
图5所示的ZAM动态模型ZAMdynamic中包含了示例软件的部分时间约束,如操作的时间约束以及时钟的重置集合等,在图中以方括号表示;部分元素中还蕴含着所对应的ZAM模式中的数据约束,如操作的前置条件等,在图中以花括号表示;另外,图5中没有标明示例软件中的全局约束(如数据类型的范围约束)以及由建模元素模板所定义的一致性约束(如时间过程类型及其开始/结束时间事件必须参考同一时钟实例),这些约束有利于保证所建立模型的正确性,同时也简化了模型的一致性验证过程。由于本发明重点是验证模型所体现的可信性质,因此验证模型本身的正确性这部分内容不作详细说明。
4、可信性质的验证
在可信性质的验证阶段,我们考虑示例软件行为的功能需求与可信需求,分析得出影响软件可信性质的数据约束与时间约束,用ZMTL公式进行描述,并采用FZMCA算法对其进行验证。不失一般性,我们假设全局变量iteration初始化为5,而curUser初始化为Admin,否则示例软件的ZAM动态模型将无法进行由状态ac到do的转移。
性质1.存在一条路径在(3iteration)ms后发起任务的执行。我们可采用EU[a,b]算子将该性质表示为:
该公式描述了我们所期望的可信约束,包括数据约束与时间约束,可以非形式化地理解为:在时间区间[0,15]内存在一个状态满足子公式Launch,并且该状态之前的所有状态都满足性质True。其中,Launch表示示例软件进入任务执行状态,满足该子公式的约束条件是任务执行操作GetFBDataOp的前置条件,因此Launch描述了软件中某些状态满足的数据约束。Launch子公式可用如下ZMTL公式表示:
Launch:cur_it=0∧getSL(curUser)≥3
性质1的验证过程如下:
(1)将差分为其子公式的集合{True,Launch,其中True为恒真公式;
(2)为了验证示例软件的时间性质,我们按照ZAMdynamic的转移规则,在每个状态上标记一个参考全局时钟DCClock的离散时间序列,得到一次计算的状态序列,如图6所示。得到的计算π∈Π(d)如下:
π=(d,d,c,d(ac),d,c,d(ac),d,c,d(ac),d,c,d(ac),d,c,do(ac),do,do,end);
(3)计算π中子公式True与Launch的可满足状态集合,可以得到[[True]]=S,[[Launch]]={do,end};
(4)根据计算π以及5.2节定义的FZMCA算法,对图6中时间序列区间[0,15]内的状态集合进行递归运算,得到因此ZAMdynamic满足性质1。
性质2.所有的路径在(3iteration+3)ms内会到达终点。该性质可表示为:
性质2的验证过程如下:
(1)将差分为其子公式的集合
(2)计算π中子公式True与的可满足状态集合,可以得到[[True]]=S,
(3)根据计算π以及5.2节定义的FZMCA算法,对图6中时间序列区间[0,18]内的状态集合进行递归运算,得到因此ZAMdynamic满足性质2。
由上可知,本发明提出的嵌入式软件建模与验证方法将半形式化与形式化的建模过程相结合,比同类形式化方法更具直观性;建立的ZAM模型能够将嵌入式软件行为模型、功能模型及其可信约束紧密耦合,具有很好的可验证性;在模型的验证阶段,ZMTL公式能够精确地描述嵌入式软件的可信性质,而模型检测算法FZMCA能够对其进行严格的推理和验证。因此,本发明的方法能够有效地提高嵌入式软件模型的可信性,从而降低软件开发后期的缺陷修复成本。