CN115687167B - 一种群体智能操作系统的形式化验证方法及装置 - Google Patents
一种群体智能操作系统的形式化验证方法及装置 Download PDFInfo
- Publication number
- CN115687167B CN115687167B CN202310009948.2A CN202310009948A CN115687167B CN 115687167 B CN115687167 B CN 115687167B CN 202310009948 A CN202310009948 A CN 202310009948A CN 115687167 B CN115687167 B CN 115687167B
- Authority
- CN
- China
- Prior art keywords
- layer
- ros
- model
- verification
- function
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Stored Programmes (AREA)
Abstract
本发明公开了一种群体智能操作系统的形式化验证方法及装置,该方法在Isabelle环境下执行,该方法采用Isabelle元语言构造需求层形式化模型包括:对ROS数据结构、ROS接口、ROS日志输出库进行抽象建模;其中,对ROS数据结构进行抽象建模包括:构建ROS节点形式化模型和句柄形式化模型;对ROS接口进行抽象建模包括:对初始化函数、日志输出函数、获取函数、服务绑定函数、服务调用函数进行接口描述;对ROS日志输出库进行抽象建模包括:使用Show方法对将程序的状态或变量转换为字符串输出的操作进行描述。本发明能够保证安全需求在实现阶段得到满足,经过验证的操作系统可以达到CC认证标准。
Description
技术领域
本发明属于计算机软件设计技术领域,具体地,涉及一种嵌入式操作系统的形式化验证方法及系统。
背景技术
移动通信和互联网作为万物互联的桥梁,特别是5G通信技术,推动了群体智能的高速发展。群体智能系统在复杂、开放的环境中能够展现出超越智能个体的能力。各智能体之间协同感知复杂环境,并通过一对多、多对多的人机协同来执行复杂任务。因此,群体智能操作系统不同于传统计算机操作系统,需要支持群体智能的应用。
目前,常用的机器人系统,ROS操作系统可以构建多智能体之间的任务协同,比如多无人机的目标探测任务。ROS操作系统通常由大量节点组成,其中任何一个节点均可以通过发布/订阅的方式与其他节点进行通信。ROS提供开发机器人应用程序时所需的硬件抽象、子设备控制,以及机器人工程中广泛使用的传感、识别、绘图、运动规划等功能。此外ROS还提供进程之间的消息解析、功能包管理、库和丰富的开发及调试工具,其实现方式基于C/C++的中断控制语句和线程切换语句。在这些不同的状态转换中,由于代码实现的复杂性,无法保障其安全性和可靠性,比如会出现条件竞争、资源管理错误等错误。操作系统作为底层核心的系统软件,一旦出现故障,会影响其上层应用的正常执行,从而使得整个群体智能系统失效。对于群体智能操作系统而言,运用形式化的方法对其进行验证可以检测出多状态交互过程中的深层bug。因此,对群体智能操作系统的安全性进行验证是目前研究的重点,特别是对于一些实效性高的关键任务,其安全性显得越发重要。例如,seL4作为第一个通过定理证明的形式化方法完整地验证其安全性的传统操作系统内核,证明了形式化方法在操作系统中的可行性。
尽管目前形式化方法取得了丰硕的研究成果且部分理论已应用到工业实践中,但是受限于软件规模、验证效率和性能支持的约束,对操作系统采用形式化方法进行验证仍存在以下等问题:
(1)验证的程度。目前大部分操作系统形式化验证的研究,只针对个别关键模块进行功能正确性验证或者只在很高的抽象层面对系统安全性进行验证,而非属性端到源码端的整体验证。但是,操作系统的整体安全要求所有组成模块的交互行为不会破坏安全属性,并且要求源码实现与安全属性的一致性。
(2)验证的效率。虽然形式化方法在保证软件安全性、正确性及可靠性方面得到认可,但是受限于其验证效率,至今未能广泛应用于工业界。对于复杂的群体智能操作系统,当前的自动化的形式验证技术无法适应这些系统的规模。比如,seL4微内核虽然只有8000多行代码,但其人力成本高。因此,通过重构系统设计、开发策略库以及构建模块化低耦合的验证框架来降低验证复杂度,是我们需要解决的问题。
发明内容
本发明公开了一种群体智能操作系统的形式化验证方法及装置,形成覆盖多层次、支持功能安全和信息安全性质、符合相关安全标准的验证框架,从而支持基于ROS的群体智能操作系统需求、设计和代码的形式化建模及安全性质验证。
本发明的第1方面,公开了一种群体智能操作系统的形式化验证方法,该方法包括:在Isabelle环境下执行如下操作:
根据所述群体智能操作系统的需求文档,采用Isabelle元语言构造需求层形式化模型,并完成需求层的正确性验证;
根据所述群体智能操作系统的设计文档,采用状态单子语言构造设计层形式化模型,并完成需求层与设计层之间的符合性验证;
根据所述群体智能操作系统的源码文件,采用Simpl语言构造源代码的形式化模型,并完成设计层与源码层之间的符合性验证;
其中,所述采用Isabelle元语言构造需求层形式化模型包括:对ROS数据结构、ROS接口、ROS日志输出库进行抽象建模;其中,对ROS数据结构进行抽象建模包括:构建ROS节点形式化模型和句柄形式化模型;对ROS接口进行抽象建模包括:对初始化函数、日志输出函数、获取函数、服务绑定函数、服务调用函数进行接口描述;对ROS日志输出库进行抽象建模包括:使用Show方法对将程序的状态或变量转换为字符串输出的操作进行描述。
根据所述第1方面的形式化验证方法,所述采用Isabelle元语言构造需求层形式化模型,包括:构建群体智能操作系统的安全模型,将所述安全模型作为安全需求,并通过逻辑公式进行表示。
根据所述第1方面的形式化验证方法,通过状态机模型构建所述安全模型,所述状态机模型包括用于表示状态的状态变量和用以描述状态变量的变化过程的转换函数。
根据所述第1方面的形式化验证方法,所述采用状态单子语言构造设计层形式化模型,包括:对ROS节点进行设计层抽象建模,包括对初始化函数、日志输出函数、获取函数、服务绑定函数、服务调用函数进行描述。
根据所述第1方面的形式化验证方法,所述需求层与设计层之间的符合性验证,包括:
对需求层与设计层中服务概念建模的一致性、服务存储模型概念建模的一致性及需求层与设计层中节点概念建模的一致性进行定义;
展开上述定义并进行化简及分解后生成子目标,对所述子目标进行引理证明以完成一致性验证。
根据所述第1方面的形式化验证方法,根据证明库以及相应的霍尔逻辑验证规则,采用交互式定理证明方式,对源码层函数与设计层函数进行一致性证明,以完成设计层与源码层之间的符合性验证。
本发明的第2方面,公开了一种群体智能操作系统的形式化验证装置,该装置被配置在Isabelle环境下,包括:
正确性验证模块,用于根据所述群体智能操作系统的需求文档,采用Isabelle元语言构造需求层形式化模型,并完成需求层的正确性验证;
第一符合性验证模块,用于根据所述群体智能操作系统的设计文档,采用状态单子语言构造设计层形式化模型,并完成需求层与设计层之间的符合性验证;
第二符合性验证模块,用于根据所述群体智能操作系统的源码文件,采用Simpl语言构造源代码的形式化模型,并完成设计层与源码层之间的符合性验证;
其中,所述采用Isabelle元语言构造需求层形式化模型包括:对ROS数据结构、ROS接口、ROS日志输出库进行抽象建模;其中,对ROS数据结构进行抽象建模包括:构建ROS节点形式化模型和句柄形式化模型;对ROS接口进行抽象建模包括:对初始化函数、日志输出函数、获取函数、服务绑定函数、服务调用函数进行接口描述;对ROS日志输出库进行抽象建模包括:使用Show方法对将程序的状态或变量转换为字符串输出的操作进行描述。
本发明的第3方面,公开了一种群体智能操作系统的形式化验证方法,该方法包括:在Isabelle环境下执行如下操作:
采用Isabelle元语言对所述群体智能操作系统的插件、总线、调度、任务绑定四个子模块及ROS节点模型的功能需求进行描述,并描述所述群体智能操作系统的状态运行模型,以及所述群体智能操作系统正常运行需要满足的一致性安全需求;
对任意时刻所述群体智能操作系统的可达状态进行不变式性质的正确性验证;
使用record定义所述群体智能操作系统的设计层的数据结构和模块状态,使用definition定义状态单子设计规范,以对插件、总线、调度、任务绑定四个子模块及ROS节点模型的设计流程进行描述,得到设计层形式化模型;
定义基于状态单子的正确霍尔逻辑,对所述群体智能操作系统的设计层形式化模型与需求层进行符合性验证,所述符合性验证包括插件、总线、调度、任务绑定、ROS节点模型、Monad函数调用证明;
使用Simpl语言对源代码所编写的插件、总线、调度、任务绑定四个子模块及ROS节点模型的变量、函数、表达式进行形式化描述;
根据证明库以及相应的霍尔逻辑验证规则,对源码层函数与设计层函数进行一致性证明,以完成设计层与源码层之间的符合性验证。
本发明能够保证安全需求在实现阶段得到满足,从而实现了群体智能操作系统的属性的形式化验证。采用本发明验证的操作系统可以达到CC认证标准,并且实现了一定程度的自动化,减少了人力成本投入。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本发明的其他特征、目的和优点将会变得更明显:
图1为根据本发明实施例的群体智能操作系统形式化验证方法流程示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释相关发明,而非对该发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与有关发明相关的部分。
需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本发明。
术语解释:
ROS:是机器人操作系统(Robot Operating System)的英文缩写,是用于编写机器人软件程序的一种具有高度灵活性的软件架构。它包含了大量工具软件、库代码和约定协议,旨在简化跨机器人平台创建复杂、鲁棒的机器人行为这一过程的难度与复杂度。
Isabelle定理证明器:一种支持高阶逻辑(Higher Order Logic,简称HOL)的交互式通用定理证明器,其工具环境的组成包括ML语言实现的底层Pure Isabelle、Isabelle的运行平台和Isar语言,其形式证明资源库包含300多个开源项目,合计150多万行形式规约与证明。
Simpl:Simpl语言是一个顺序命令程序的通用语言模型。
State monad:状态单子,是在函数式编程中的一种基本模型。
SMT:是Satisfiability modulo theories的缩写,表示为约束求解器。
本发明中的群体智能操作系统,尤其指基于ROS的群体智能操作系统,是新一代人工智能发展的重要方向,是支撑群体智能系统发展的基础软件。ROS主要采用C/C++程序设计语言,按照节点层次式架构设计开发,核心模块包括资源管理层和群体行为操控支撑架构层。其中,资源管理层分为物理域(physics domain)资源管理、信息域(informationdomain)资源管理、认知域(cognition domain)资源管理和社会域(social domain)资源管理共4个子模块。群体行为操控支撑架构层分为群体观察支撑框架observe、群体判断支撑框架orient、群体决定支撑框架decide、群体行动支撑框架act共4个子模块。群体智能操作系统软件原型的每一个子模块都基于软件总线和插件进行开发,例如群体行动支撑框架act子模块中包含群体行动软件总线act_softbus和群体行动功能插件库plugins。
根据本发明的一个方面,公开了一种群体智能操作系统的形式化验证方法,该形式化验证方法的实施依赖基于Isabelle元语言搭建的证明支撑平台,该证明支撑平台主要包括以下模块:
底层证明引擎,包括交互证明器、SMT求解器、自动证明器,能够为形式化验证提供底层的证明引擎支撑,完成基本的逻辑推理和自动证明。其中,底层证明引擎集成在Isabelle工具中,输入格式遵循Isabelle工具的标准规范。
Isar证明引擎,通过调用底层证明器,为Isabelle元语言证明提供辅助支撑。
Sate Monad(状态单子)语言模块,基于Isabelle元语言开发,用于完成设计层形式化模型描述,支持数据结构和算法流程描述。
Simpl语言模块,基于Isabelle元语言开发,用于完成源代码层形式化模型描述,支持按照C\C++语言特性,逐条语句建立Simpl形式化模型。
验证模块,包括规约验证模块和源码验证模块。规约验证模块用于需求层和设计层规约形式化验证,源码验证模块用于源码层规约形式化验证。
基于上述证明支撑平台,如图1所示,本发明公开的群体智能操作系统的形式化验证方法包括如下步骤:
步骤100、根据群体智能操作系统的需求文档,采用Isabelle元语言构造需求形式化模型(或形式规范),并完成需求层的正确性验证。
该步骤具体包括:
步骤101、在定理证明工具环境中采用Isabelle元语言对自然语言描述的群体智能操作系统的需求进行描述,生成操作系统的需求形式化模型。
ROS操作系统的基础库模型包括ROS数据结构、ROS接口、日志输出库。
(1)ROS数据结构
在ROS操作系统中,ROS节点类似于进程的概念,通过节点句柄,其可以提供服务的绑定/调用、消息的发布/订阅、参数的上传/获取等功能。
考虑到实际的建模功能范围,对于ROS操作系统中的抽象模型,只需要提供服务绑定/调用功能即可。句柄主要起到传递命名空间的作用,为了避免相互递归问题,因此在句柄成员中将不再持有对ROS节点的引用,转而在句柄的每次功能执行时再传入当前节点状态。因此,将需求层ROS的节点形式化模型定义为Re_RosNode,句柄形式化模型定义为NodeHandle。示例如下:
type_synonym Re_service = "taskbinder => request1 => (taskbinder ×responsel × bool)"
record Re RosNode = name :: string
serviceMap :: "string => Re_service option"
record NodeHandle = handleName :: string
(2)ROS接口
在Isabelle下,对ROS节点进行需求层抽象建模,主要包括初始化函数、日志输出函数、获取函数、服务绑定函数、服务调用函数。
ROS节点的需求层初始化函数(RosInit)被描述为:要求一个String类型的传入参数,作为ROS节点的名字,并将存储服务的Map类型初始化为空。
definition Re_RosInit : "string => Re_RosNode"
where "Re_RosInit nodeName =(Re_RosNode.name = nodeName,Re_RosNode.serviceMap = Map.empty)"
ROS节点的日志输出函数分为五类,按照严重性程度递增顺序分别为DEBUG,INFO,WARN,ERROR,FATAL。ROS节点的日志输出函数接口描述的一个示例如下所示:
definition Ros_DEBUG:: "RosLog = string => RosLog"
where "Ros_DEBUG log infor ≡ log @ ["DEBUG::"' @ infor]"
由于需求层仅是对函数逻辑的抽象,因此不影响功能逻辑的日志输出函数将不会在需求层中,但其可以被设计层与代码层复用。
获取函数(getPath)被描述为根据传入的句柄和节点,获取当前的命名空间,其将参与构建服务存储的key值。该函数接口描述的一个示例如下所示:
definition Re_getPath:: "NodeHandle => Re_RosNode => string =>string"
where "Re getPath nhl rr st ≡ '/' @ (Re RosNode.name rr)@ '/' @(handleName nhl)@ st"
该函数在源代码中并不存在,因此其在需求模型中仅起到辅助函数的作用。
服务绑定函数(Re_advertiseService)被描述为根据传入的句柄、节点与服务名建立服务路径,即存储服务的key值。然后将该key值与传入的服务函数构建映射关系(即key-value关系),存储于节点的serviceMap成员中,使得服务被绑定在Ros节点上。该函数接口描述的一个示例如下所示:
ldefinition Re_advertiseService :: "NodeHandle => Re_RosNode =>string => Re_service => (Re_RosNode × Ros_ServiceServer)"
where "Re_advertiseService nhl ros st ser ≡
let st' = Re_getPath nhl ros st;
node' = ros( serviceMap :=(serviceMap ros)(st' P ser));
ss = ( serviceName = st')
in(node',ss)"
服务调用函数(Re_call),其中,srvMessage是对ROS srv类型文件的抽象,其拥有Request与Response两个字段。Re_call函数根据传入的句柄、节点及服务名构建服务路径,并于节点中获得相应服务。然后,根据传入的taskbinder当前状态与服务请求(即srvMessage下的Request字段)作为服务的传入参数,调用该服务。服务的返回值将被存储于srvMessage下的Response字段,并与新的taskbinder状态一起返回,而返回三元组的最后一个元素是为了标志该服务是否存在。该函数接口描述的一个示例如下所示:
definition Re_call :: "taskbinder => NodeHandLe => Re_RosNode=>string => srvMessage =>(taskbinder × srvMessage × bool)"
where "Re call tb nhl ros st mes ≡
let st' = Re_getPath nhl ros st;
ser = (serviceMap ros) st';
(tb',res ,flag)=(the ser)tb(Request mes)
in
if ser = None
then (tb, mes, False)
else(tb',mes(Response := res),flag)"
(3)日志输出库
日志输出对软件的修复、维护、优化是非常重要的,在xRAM中,ROS库提供了一系列的输出函数来实时报告状态或异常,如ROS_DEBUG、ROS_WARN、ROS_ERROR、ROS_INFO和ROS_FATAL,这些函数通过将程序的状态或某些变量转换为字符串输出作为日志或警告信息等。在使用Isabelle对xRAM建模的过程中,我们也实现了ROS库的一些服务,其中就包括对状态的输出操作。Isabelle并不自带将非char或String类型的变量转换为字符串的操作,所以我们需要使用其他方法实现这个功能。
Show是在Haskell中被实现的一种方法,提供解析字符串的操作,返回可以被转换为字符串的类型的值,如show(2+2),结果是 "4"。同时,为了提升字符串连接的效率,如对树进行遍历,还提供Shows、ShowTree等方法。而Show_Instances则是Show方法在Isabelle下的一种实现,官方的注解为“将任意值转换为可读字符串,是一个类似于Haskell的Show类的类型类,在恒定的时间内连接的字符串。
步骤102、构建群体智能操作系统的安全模型,将所述安全模型作为安全需求,并通过逻辑公式进行表示。
在Isabelle环境下,通过定义状态机来实现安全模型。状态机模型将操作系统内核系统执行模型描述为一个抽象的数学状态机器。在这样的模型里,状态变量表示机器的状态,转换函数或者操作规则用以描述状态变量的变化过程。状态转换函数是可进入操作系统的系统调用的抽象,它们精确地描述了状态可以怎样变化和不可以怎样变化。
状态机模型包含确定模型的要素(变量、函数/操作规则)、安全初始状态、安全策略与安全证明。具体步骤如下:
(1)定义安全相关的状态变量以及抽象的安全策略函数。
(2)定义安全状态的条件,该条件是一个不变式,表示在状态转换期间状态变量的数值始终保持的关系。
(3)定义状态转换函数,用于描述状态变量可能发生的变化。作为操作规则,它们的意图是限制系统可能产生的变化的类型。
(4)检验函数是否维持了安全状态。要求:如果系统在运行之前处于安全状态,那么系统在运行之后仍将保持在安全状态。
(5)定义初始状态,以选择每个状态变量的值。
(6)依据安全目的,形式化定义安全状态所满足安全性质。
(7)安全性证明。证明系统从一个安全状态出发,并且无论调用哪个函数,系统都将保持在安全状态,即:证明初始状态是安全的、证明状态机执行模型的所有安全功能是安全状态。
通过逻辑公式定义安全模型,包含:1)系统状态集合S;2)初始状态s0并且s0∈ S;3)系统有限的动作集合A;4)安全域集合D;5)动作与安全域函数关系:A→D;6)状态转移函数:S×A→S,系统状态经过执行单个动作后到达下一个状态;7)观测值集合O;8)观察函数:D×S→O。
步骤103、利用证明支撑平台,通过交互式证明方式,证明在需求的形式规范上安全需求成立,以证明需求的正确性。
步骤200、根据群体智能操作系统的设计文档,在Isabella环境下,采用状态单子(State Monad)语言构造设计层形式化模型(或形式规范),并完成需求层与设计层符合性验证;
该步骤具体包括:
步骤201、通过状态单子语言对群体智能操作系统的设计模型进行语言语法和语义的形式化描述。
具体包括:在Isabelle下,对ROS节点进行设计层抽象建模,主要包括初始化函数、日志输出函数、获取函数、服务绑定函数、服务调用函数。
日志输出函数:需求层对ROS日志输出函数进行抽象建模,日志输出函数对于函数功能没有实际影响,因此可以在设计层复用。
获取函数:设计层下的getPath函数建模同需求层基本类似,仅是传入的节点类型有所区别。
初始化函数:初始化函数建模将传入的字符串参数作为ROS节点名字,并对设计层剩余两个字段作空初始化。
服务绑定函数:整体逻辑处理与需求层完全一致,但在此处是以状态单子的格式进行定义。
服务调用函数:call函数是服务调用函数。srvMessage是对ROS srv类型文件的抽象,其拥有Request与Response两个字段。Re_call函数根据传入的句柄、节点及服务名构建服务路径,并于节点中获得相应服务。然后,根据传入的taskbinder当前状态与服务请求(即srvMessage下的Request字段)作为服务的传入参数,调用该服务。服务的返回值将被存储于srvMessage下的Response字段,并与标志该服务是否存在的布尔值一同返回。
步骤202、对需求层与设计层之间的符合性进行验证,包括一致性定义、初始化一致性验证、服务调用一致性验证。
所述一致性定义包括需求层与设计层中服务概念建模的一致性定义、服务存储模型概念建模的一致性定义及需求层与设计层中节点概念建模的一致性定义。
例如,Service Equal是对需求层与设计层中服务概念建模的一致性定义,这里也使用了霍尔三元组,即对于任意的前置状态s’与服务请求参数req,分别调用服务,则后置状态与返回值也是相同的。Service Map Equal则是对服务存储模型概念建模的一致性定义,即任意的传入服务名,搜索需求层与设计层的serviceMap,要么均为空(即此处的None),要么均不为空,且为Service Equal关系。rosEqual是对需求层与设计层中节点概念建模的一致性定义,两个ROS节点模型是一致的当且仅当其名字字段相同,且服务存储字段为serviceMapEqual关系。
初始化一致性验证:需求层与设计层的初始化节点是满足rosEqual一致性关系的。req_des_advertiseService是对服务发布概念的一致性证明,即对于一致的需求层ROS节点与设计层ROS节点,如果需求层与设计层的发布函数rs和ds满足ServiceEqual一致性关系,那么调用服务发布函数后的两个节点的新状态也是一致的。通过定义展开相关定义,运用wpsimp方法(Isabelle内置方法)化简,证明通过,表示初始化一致性验证通过。
服务调用一致性验证:首先,直接展开NonDetMonad_call定义;通过wpsimp方法化简与auto方法(Isabelle内置)分解后,产生新的五个子目标;定义3条辅助引理req_des_call_aux1、req_des_call_aux2、req_des_call_aux3,辅助证明过程;引理证明通过后,req_des_call证明通过,表示服务调用一致性验证通过。
步骤300、根据群体智能操作系统的源码文件(例如包括源代码和代码实现说明文档),采用Simpl语言构造源代码的形式化模型(或形式规范),并完成设计层与源码层之间的符合性验证。
示例性地,Simpl抽象语法包括:
Simpl语法类型(s, p, f) com,s是状态空间类型,p是过程名称,f是错误类型,com为关键字。以下c, c_1, c_2是(s, p, f) com类型,布尔条件b和监视条件g是拥有s类型的状态集合。Simpl抽象语法定义如下:
Skip:不进行任何操作;
Basic f:将状态进行更新,f的类型是s ⇒ s;
Seq c_1 c_2:顺序执行c_1 和 c_2;
Cond b c_1 c_2:条件语句,相当于if b then c_1 else c_2;
While b c:循环语句;
Call p:过程调用;
Guard f g c:保护指令,一旦监测到c中的g条件被违反,错误类型f被标记,过程停止;
Throw:模拟各种终止,包括break,continue,return和exceptions;
Catch c_1 c_2:如果c_1被中止,进行操作c_2;
Spec r:定义可能的下一个状态,r的类型是(‘s × ‘s) set;
DymCom c_s:动态指令,c_s的类型是’s ⇒ (‘s, ‘p, ‘f) com,根据当前的状态空间决定执行的指令。
该步骤具体包括:
步骤301、基于Simpl抽象语法及Simpl操作语义对群体智能操作系统的源代码进行逐行转换,形成的源码层形式化模型。
步骤302、对设计层与源码层之间的符合性进行验证。
根据corres_underlying证明库以及相应的Simpl霍尔逻辑验证规则,采用交互式定理证明方式,对源码层函数与设计层函数进行一致性证明,完成设计层与源码层符合性验证。
以下以机器人操作系统ROS作为案例,构建其形式化验证框架,以对上述方法进一步说明。对机器人操作系统ROS采用本发明公开的形式化验证方法进行验证的过程包括:
(1)ROS需求层形式化建模与验证
首先对插件、总线、调度、任务绑定四个子模块及ROS节点模型的功能需求(包括对各子模块主要函数功能需求、模块及系统初始化功能需求和系统接口功能需求)通过Isabelle元语言定义进行描述。
接着描述系统整体的状态运行模型,以及系统正常运行需要满足的一致性安全需求。在系统的运行过程中,各模块状态均可能被修改或调用,定义数据结构的正确性需求。
最后对任意时刻系统可达状态进行不变式性质的正确性验证。
(2)ROS设计层形式化建模与验证
在Isabelle中,设计形式化模型主要使用record定义数据结构和模块状态,使用definition定义State Monad设计规范,清晰地表达源代码的算法流程,包括对插件、总线、调度、任务绑定四个子模块及ROS节点模型的设计流程进行形式化描述。
然后定义基于State Monad的正确霍尔逻辑对ROS的设计层形式化模型与需求层进行符合性验证,包括插件、总线、调度、任务绑定、ROS节点模型、Monad函数调用证明。
(3)ROS源码层形式化建模与验证
在Isabelle中,用Simpl语言对C/C++代码所编写的插件、总线、调度、任务绑定、ROS节点模型的变量、函数、表达式等进行形式化描述。
然后根据corres_underlying证明库以及相应的Simpl霍尔逻辑验证规则,对源码层函数与设计层函数进行一致性证明,完成符合性验证,主要包括数据结构一致性证明、插件模块一致性证明、总线模块一致性证明、调度模块一致性证明、任务绑定模块一致性证明。
根据本发明的另一方面,还公开了一种群体智能操作系统的形式化验证装置,该装置被配置在Isabelle环境下,包括:
正确性验证模块,用于根据群体智能操作系统的需求文档,采用Isabelle元语言构造需求层形式化模型,并完成需求层的正确性验证;
第一符合性验证模块,用于根据群体智能操作系统的设计文档,在Isabelle环境下,采用State Monad语言构造设计层形式化模型,并完成需求层与设计层之间的符合性验证;
第二符合性验证模块,用于根据群体智能操作系统的源码文件,采用Simpl语言构造源代码的形式化模型,并完成设计层与源码层之间的符合性验证;
此外,本发明还公开了一种电子设备,包括:存储器,用于存储计算机程序;处理器,与所述存储器通信耦合,用于在执行所述计算机程序时实现所述的形式化验证方法。
此外,本发明还公开了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现所述的形式化验证方法。
本发明通过需求层建模与正确性验证、设计层和源码层符合性验证,保证了从需求到实现的端到端一致性保持,能够保证安全需求在实现阶段得到满足,从而实现了群体智能操作系统的属性的形式化验证。
本发明公开的群体智能操作系统的形式化验证方法对各类安全关键领域具有通用性和可应用性,可直接应用的领域包括无人车、无人机、航空、航天、轨道交通等领域。采用本发明验证的操作系统可以达到CC认证标准,并且实现了一定程度的自动化,减少了人力成本投入。
虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明发明构思的情况下,可以对本本发明实施例的技术方案进行修改或等同替换都不应脱离本发明实施例的技术方案的精神和范围。
Claims (7)
1.一种群体智能操作系统的形式化验证方法,其特征在于,该方法包括:在Isabelle环境下执行如下操作:
根据所述群体智能操作系统的需求文档,采用Isabelle元语言构造需求层形式化模型,并完成需求层的正确性验证;
根据所述群体智能操作系统的设计文档,采用状态单子语言构造设计层形式化模型,并完成需求层与设计层之间的符合性验证;
根据所述群体智能操作系统的源码文件,采用Simpl语言构造源代码的形式化模型,并完成设计层与源码层之间的符合性验证;
其中,所述采用Isabelle元语言构造需求层形式化模型包括:对ROS数据结构、ROS接口、ROS日志输出库进行抽象建模;其中,对ROS数据结构进行抽象建模包括:构建ROS节点形式化模型和句柄形式化模型;对ROS接口进行抽象建模包括:对初始化函数、日志输出函数、获取函数、服务绑定函数、服务调用函数进行接口描述;对ROS日志输出库进行抽象建模包括:使用Show方法对将程序的状态或变量转换为字符串输出的操作进行描述;
其中,所述需求层与设计层之间的符合性验证,包括:
对需求层与设计层中服务概念建模的一致性、服务存储模型概念建模的一致性及需求层与设计层中节点概念建模的一致性进行定义;
展开上述定义并进行化简及分解后生成子目标,对所述子目标进行引理证明以完成一致性验证。
2.根据权利要求1所述的群体智能操作系统的形式化验证方法,其特征在于,所述采用Isabelle元语言构造需求层形式化模型,包括:构建群体智能操作系统的安全模型,将所述安全模型作为安全需求,并通过逻辑公式进行表示。
3.根据权利要求2所述的群体智能操作系统的形式化验证方法,其特征在于,通过状态机模型构建所述安全模型,所述状态机模型包括用于表示状态的状态变量和用以描述状态变量的变化过程的转换函数。
4.根据权利要求1所述的群体智能操作系统的形式化验证方法,其特征在于,所述采用状态单子语言构造设计层形式化模型,包括:对ROS节点进行设计层抽象建模,包括对初始化函数、日志输出函数、获取函数、服务绑定函数、服务调用函数进行描述。
5.根据权利要求1所述的群体智能操作系统的形式化验证方法,其特征在于,根据证明库以及相应的霍尔逻辑验证规则,采用交互式定理证明方式,对源码层函数与设计层函数进行一致性证明,以完成设计层与源码层之间的符合性验证。
6.一种群体智能操作系统的形式化验证装置,其特征在于,该装置被配置在Isabelle环境下,包括:
正确性验证模块,用于根据所述群体智能操作系统的需求文档,采用Isabelle元语言构造需求层形式化模型,并完成需求层的正确性验证;
第一符合性验证模块,用于根据所述群体智能操作系统的设计文档,采用状态单子语言构造设计层形式化模型,并完成需求层与设计层之间的符合性验证;
第二符合性验证模块,用于根据所述群体智能操作系统的源码文件,采用Simpl语言构造源代码的形式化模型,并完成设计层与源码层之间的符合性验证;
其中,所述采用Isabelle元语言构造需求层形式化模型包括:对ROS数据结构、ROS接口、ROS日志输出库进行抽象建模;其中,对ROS数据结构进行抽象建模包括:构建ROS节点形式化模型和句柄形式化模型;对ROS接口进行抽象建模包括:对初始化函数、日志输出函数、获取函数、服务绑定函数、服务调用函数进行接口描述;对ROS日志输出库进行抽象建模包括:使用Show方法对将程序的状态或变量转换为字符串输出的操作进行描述;
其中,所述需求层与设计层之间的符合性验证,包括:
对需求层与设计层中服务概念建模的一致性、服务存储模型概念建模的一致性及需求层与设计层中节点概念建模的一致性进行定义;
展开上述定义并进行化简及分解后生成子目标,对所述子目标进行引理证明以完成一致性验证。
7.一种群体智能操作系统的形式化验证方法,其特征在于,该方法包括:在Isabelle环境下执行如下操作:
采用Isabelle元语言对所述群体智能操作系统的插件、总线、调度、任务绑定四个子模块及ROS节点模型的功能需求进行描述,并描述所述群体智能操作系统的状态运行模型,以及所述群体智能操作系统正常运行需要满足的一致性安全需求;
对任意时刻所述群体智能操作系统的可达状态进行不变式性质的正确性验证;
使用record定义所述群体智能操作系统的设计层的数据结构和模块状态,使用definition定义状态单子设计规范,以对插件、总线、调度、任务绑定四个子模块及ROS节点模型的设计流程进行描述,得到设计层形式化模型;
定义基于状态单子的正确霍尔逻辑,对所述群体智能操作系统的设计层形式化模型与需求层进行符合性验证,所述符合性验证包括插件、总线、调度、任务绑定、ROS节点模型、Monad函数调用证明;
使用Simpl语言对源代码所编写的插件、总线、调度、任务绑定四个子模块及ROS节点模型的变量、函数、表达式进行形式化描述;
根据证明库以及相应的霍尔逻辑验证规则,对源码层函数与设计层函数进行一致性证明,以完成设计层与源码层之间的符合性验证。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310009948.2A CN115687167B (zh) | 2023-01-05 | 2023-01-05 | 一种群体智能操作系统的形式化验证方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310009948.2A CN115687167B (zh) | 2023-01-05 | 2023-01-05 | 一种群体智能操作系统的形式化验证方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115687167A CN115687167A (zh) | 2023-02-03 |
CN115687167B true CN115687167B (zh) | 2023-04-07 |
Family
ID=85057487
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310009948.2A Active CN115687167B (zh) | 2023-01-05 | 2023-01-05 | 一种群体智能操作系统的形式化验证方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115687167B (zh) |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108985073A (zh) * | 2018-07-18 | 2018-12-11 | 成都链安科技有限公司 | 一种高度自动化的智能合约形式化验证系统及方法 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106708730B (zh) * | 2016-11-22 | 2019-04-09 | 北京控制工程研究所 | 一种针对嵌入式实时操作系统形式化验证方法 |
CN108509336B (zh) * | 2018-03-05 | 2021-05-25 | 华东师范大学 | 一种操作系统规范形式化验证与测试方法 |
CN110968436B (zh) * | 2019-10-31 | 2023-07-14 | 华东师范大学 | 基于Event-B方法的微内核操作系统进程间通信机制的形式化建模和验证方法 |
CN113282492A (zh) * | 2021-05-24 | 2021-08-20 | 湖南大学 | 一种操作系统内核形式化验证方法 |
CN114637220A (zh) * | 2022-01-28 | 2022-06-17 | 中国人民解放军军事科学院国防科技创新研究院 | 一种机器人操作系统应用验证的半实物测试系统与方法 |
CN115242461B (zh) * | 2022-06-30 | 2023-08-25 | 中国人民解放军63891部队 | 一种机器人操作系统ros安全测试系统及方法 |
-
2023
- 2023-01-05 CN CN202310009948.2A patent/CN115687167B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108985073A (zh) * | 2018-07-18 | 2018-12-11 | 成都链安科技有限公司 | 一种高度自动化的智能合约形式化验证系统及方法 |
Also Published As
Publication number | Publication date |
---|---|
CN115687167A (zh) | 2023-02-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7926029B1 (en) | System and method of progressive domain specialization product solutions | |
CN109634600B (zh) | 一种基于安全扩展SysML和AADL模型的代码生成方法 | |
Matsuno et al. | Parameterised argument structure for GSN patterns | |
Borelli et al. | BIoTA: A buildout IoT application language | |
Bruni et al. | Modelling dynamic software architectures using typed graph grammars | |
Sharygina et al. | A formal object-oriented analysis for software reliability: Design for verification | |
Scioni et al. | Hierarchical hypergraph for knowledge-centric robot systems: a composable structural meta model and its domain specific language npc4 | |
Guo | Using category theory to model software component dependencies | |
Miculan et al. | A calculus for attribute-based memory updates | |
CN115687167B (zh) | 一种群体智能操作系统的形式化验证方法及装置 | |
Johnsen et al. | Object-oriented specification and open distributed systems | |
Bressan et al. | A variability modeling and transformation approach for safety-critical systems | |
Adamek et al. | Component reliability extensions for fractal component model | |
Behere et al. | Systems Engineering and Architecting for Intelligent Autonomous Systems | |
Hariche et al. | Embedded systems design using event-b theories | |
Becker et al. | A safety-certified vehicle OS to enable software-defined vehicles | |
Insaurralde et al. | System requirements in industrial automation | |
Lestingi et al. | HRC-Team: A model-driven approach to formal verification and deployment of collaborative robotic applications | |
Dong et al. | rCOS: Defining meanings of component-based software architectures | |
Al Mamun et al. | Towards formalizing assumptions on architectural level: A proof-of-concept | |
Sollfrank et al. | Integration of safety aspects in modeling of Networked Control Systems | |
Hafdi et al. | Formal modeling and validation of redy architecture intended for iot applications | |
Qin et al. | Using SMT engine to generate Symbolic Automata-Extended version | |
Hall et al. | Omml: A behavioural model interchange format | |
CN115687165B (zh) | 一种需求层形式化验证方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |