鉴源论坛 · 观模丨形式化方法的工业应用:航空领域

news2024/11/17 4:55:18

作者 | 徐奕龙飞 上海控安可信软件创新研究院系统建模组

版块 | 鉴源论坛 · 观模

社群 | 添加微信号“TICPShanghai”加入“上海控安51fusa安全社区”

01

摘 

本文主要探讨了形式化方法在航空领域中的工业应用。航空领域作为安全攸关领域,其机载系统软件的开发有着高度复杂和严格的安全标准要求,以确保其安全可靠性。但是由于机载系统软件功能的增加,软件系统规模增大,系统整体更为复杂,使得传统方法难以满足飞行控制系统的验证需求。为解决航空领域的痛点,形式化方法成为一种有效的解决方案。形式化方法是一种基于数学和形式逻辑的工程方法,可用于系统设计、验证和分析。形式化方法的应用有助于确保飞行安全性、提高飞机性能和优化飞行控制系统。

02

航空领域的应用背景

在航空领域,飞行控制系统软件是核心的组成部分,对整个航空器起着决定性的作用,其安全性和可靠性对航空器的正常运行有着至关重要的作用,一旦软件出现故障,其造成的损失将会十分巨大。然而由于现代飞行控制系统软件非常复杂,涉及到软件和硬件的协同交互,传统的测试方法不仅需要耗费大量的人力资源和时间成本,还难以做到覆盖所有可能的情况,从而彻底规避安全隐患。这就使得在系统软件开发的流程中存在着需求或系统设计出现问题的风险。历史上,由于此类问题而造成的重大损失的灾难事故触目惊心。2007年,美国空军战斗机F-22的飞控软件设计时未考虑时差因素, 在跨越国际日期变更线时飞行员变更系统时间致使飞控系统锁死;2018年和2019年两架飞机由于飞行控制软件中反失速系统机动特性增强系统(MCAS)的缺陷发生了坠机事故导致总共三百余人死亡。

图片

图1 典型软件事故:F-22和波音737-MAX事件(图片源自新闻)

人类航空史上血泪的教训促成了适航审定标准的不断完善。为了更好地保障机载软件的安全性和正确性,航空领域提出了DO-333标准。DO-333标准由RTCA专委会(航空无线电技术委员会)和EUROCAE工作组(欧洲民用航空设备组织)撰写,并已于2011年12月13日由RTCA程序管理委员会(PMC)审定通过,名为"Formal Methods Supplement to DO-178C and DO-278A"。其中DO-178C是航空领域的飞行器软件开发标准,而DO-278A是相关地面系统软件的开发标准。而DO-333是对两者的补充说明,旨在引导航空软件开发团队在软件开发生命周期中应用形式化方法。DO-333中对原有DO-178C中给出的目标、活动、解释性文字以及软件生命周期过程数据进行某些改变与补充。这些更改和补充包括了若干用形式化语言描述的文档,以及建立在这些形式化文档基础之上的形式化验证佐证材料。为此,DO-333专门作出了针对性的增补和调整。DO-333适航标准中将软件开发过程定义为四个环节,分别是软件需求过程,软件设计过程,软件编码过程和软件继承过程。并对各个软件开发过程提出了验证目标,并解释了如何应用形式化方法于软件开发的四个环节之中,阐述了其优劣所在。该标准的提出说明了在安全攸关的航空领域,形式化方法在工程上提升机载软件安全可靠性的能力得到了一定的认可,从而也引发了如何将其更好地应用于机载软件的研发和认证过程之中的探讨。

03

形式化方法的解决方案

形式化方法是建立在严格的数学基础上的针对数字化系统进行规格说明撰写、软件开发、软件验证的技术。形式化的数学基础主要包括形式逻辑、离散数学和机器可识别语言。形式化方法主要研究理念是工程人员希望通过合理的理论和工程方法特别是数学分析手段对软件设计的健壮性和正确性进行严格的分析,找出人力审查难以发掘的软件缺陷,满足人们对高质量软件可信的期望。形式化方法的主要特点是明确、无二义性的描述软件系统的需求,通过软件的形式化表达为软件的一致性、准确性提供严格验证。

形式化方法通常包含两类关键技术,分别是形式化建模和形式化分析。其中两者各自具有多种类型的实现技术。在形式化建模中,可以通过多种方法生成一个由无歧义的数学语法和语义定义的形式化模型,譬如说有形式化的图形模型,这里图的各个组件和他们之间的连接都有着严格的数学定义的语法和语义,比如SCADE工具中的状态机就是典型的形式化图形建模的案例。还有使用形式化建模语言描述的模型,例如Z语言、B方法、BIP。形式化分析方法可以归为3类:1)演绎方法(deductive),如定理证明,2)模型检查,3)抽象解释。

1)演绎方法:涉及数学推理,即通过数学方法证明形式模型性质。性质的数学证明为软件性质的正确性提供了严格证据。数学证明通常借助自动或交互式的定理证明系统。在一些情况下,即使借助定理证明系统,构建数学证明也会很困难,甚至无法构建。不过,一旦证明能构建成功,自动检查证明的正确性将会变得很容易。

2)模型检查:探索形式模型所有可能行为,从而判定指定性质是否成立。当性质不成立,模型检查算法自动生成一个反例,以确定该性质在何处不成立以及不成立的原因。在一些情况下,模型检查工具可能无法判定给定的性质是否成立。

3)抽象解释:是一种构建程序语言语义的保守表示(conservative)的理论(保守表示以确保可靠性)。实践中,该技术针对无限状态系统设计基于程序语义的分析算法,能静态、自动及可靠地分析系统动态性质。借助相应的工具 ,抽象解释为具体的性质产生形式模型。该技术可以看作部分地执行计算机程序,在无需实际操作所有计算任务的同时,确定程序间的重要影响关系(如控制流结构,信息流,堆栈大小,时钟周期的数目等)。

04

应用案例

本应用案例来源于" Formal methods case studies for DO-333.", 该资料分享了形式化方法在航空航天领域中的案例研究。为了检查系统规约是否满足特定性质和要求,应用模型检查来验证飞行导引系统(FGS)单侧模式逻辑的正确性。模式逻辑是飞行控制系统中的关键组成部分,它决定了飞机的导航和自动驾驶行为,其正确性对于确保飞行安全至关重要。在FGS中,模式逻辑相对复杂,但输入和输出仅有布尔值组成,这使得它适合使用模型检查进行形式化验证。

4.1 模式逻辑概述

模式指的是系统行为的互斥集合,对于FGS系统而言,模式对应于单个(或一组)FGS行为的系统配置,更贴切地说,FGS的模式就是其飞行控制法则的抽象,其模式逻辑主要包括三种不同类型的模式。

1. 非布防模式(Non-Arming Mode):该模式只有CLEARED和SELECTED两个实际状态。如果由飞行机组手动请求或由FMS等子系统自动请求,模式被认为是SELECTED状态,否则被认为是CLEARED状态。

图片

图2  Non-Arming Mode

2. 布防模式(Arming Mode):该模式有三个状态:ARMED、ACTIVE和SELECTED。ARMED和ACTIVE是SELECTED状态的子状态,即当模式处于ARMED或ACTIVE状态时,它同时也处于SELECTED状态。

图片

图3  Arming Mode

3. 捕获/跟踪模式(Capture/Track Mode):该模式相比前一模式在ACTIVE中区分了捕获和跟踪状态。CAPTURE和TRACK状态都是ACTIVE状态的子状态,并且模式的飞行控制法则在这两种状态下都处于ACTIVE状态,即为飞行导引和自动驾驶系统生成指令。

图片

图4  Capture/Track Mode

4.2 模型检查案例目标

本案例的目标是对FGS单侧的模式逻辑进行形式化验证,以确保它满足规约中的要求和飞行控制法则。使用模型检查来执行与软件设计过程的输出相关的验证活动,重点关注 DO-178C 中表 A-4 和 DO-333 中表 FM.A-4 的目标。这些验证活动的目的是检测软件设计过程中可能引入的任何错误(DO-178C 第 5.2 节)。具体来说,本案例将验证FGS一侧模式逻辑的低层软件需求,并表明软件架构和低层软件需求符合高层软件需求。其详细验证目标如表1所示。

图片

表1 软件验证目标

4.3 模型检查工具和方法

在本案例中,使用了两种主要的模型检查器:隐式状态BDD模型检查器(如NuSMV)和SMT模型检查器(如Kind)。这两种模型检查器分别适用于不同类型的规约和验证需求。

验证流程

1. 首先,将FGS的模式逻辑描述转化为模型检查器可接受的形式,例如Lustre形式的规范语言。

2. 确定并规定模式逻辑的各种状态和状态转换。

3. 编写规约和性质规范,涵盖所有目标验证要求。

4. 使用模型检查器对规约和性质进行验证,以查找可能的错误和反例。

验证结果:

通过模型检查器的验证,得到模式逻辑是否满足规约和飞行控制法则的结果。如果模型检查器找到了错误或反例,开发团队可以进行修正,重新验证,直到所有目标都得到满足。最终使用Kind模型检查器验证FGS模型的模态逻辑时,发现了共十六个错误。

模型检查发现的错误示例:

下面我们详细阐述如何使用模型检查工具发现错误的过程,图5是一个非常简单但是常见的命名错误,在退出ACTIVE模式时,输出变量LGA_Active(正确情况应该是VGA_Active)被设置为false。通过Kind模型检查器检测到了这个错误。Kind模型检查器产生的反例如图6所示。

图片

图5  模型检查得到的错误示例

图片

图6  模型检查得到的反例

该反例共有3个步长,显示了每一步的相关输入和输出的值。未发生变化的值用灰色文本显示。灰色背景标出了最重要的值,以帮助读者理解反例。在初始步骤中,ROLL_Active模式如预期一样处于活动状态。在第二步中,按下GA开关,激活了LGA模式。这同时激活了VGA模式。在第三步中,VS_Pitch_Wheel_Rotated激活,清除VGA模式,即从ACTIVE转变为CLEARED状态,但是,实际上在第三步中并没有清除LGA模式,但由于命名错误,输出变量LGA_Active却被错误地设置为false。

综上,形式化方法在航空领域已经开始受到越来越多的重视,并逐渐进入相关评审流程中。通过工业界实际的应用,形式化方法展现出了其在提高机载软件系统安全性和可靠性方面的价值。通过形式化方法,我们可以在软件开发生命周期的不同阶段,精确地定义系统规范和性质,并自动化地验证系统的正确性。形式化方法的发展将持续推动航空领域软件开发的创新和进步,为飞行安全提供更加可靠的保障。通过不断深入研究和实践,形式化方法将在航空领域继续发挥重要作用,为飞行控制系统的安全性和可靠性提供持续支持。未来,我们将继续介绍更多形式化方法的技术细节和更多的应用案例。

主要参考文献:

1. RTCA DO-333, Formal Methods Supplement to DO-178C and DO-278A (December 2011)

2. Cofer D, Miller S P. Formal methods case studies for DO-333[R]. 2014.

3. Platzer A, Quesel J D. European Train Control System: A case study in formal verification[C]//International Conference on Formal Engineering Methods. Berlin, Heidelberg: Springer Berlin Heidelberg, 2009: 246-265.

4. Clarke E M. Model checking[C]//Foundations of Software Technology and Theoretical Computer Science: 17th Conference Kharagpur, India, December 18–20, 1997 Proceedings 17. Springer Berlin Heidelberg, 1997: 54-56.

5. Cousot P, Cousot R. Abstract interpretation: a unified lattice model for static analysis of programs by construction or approximation of fixpoints[C]//Proceedings of the 4th ACM SIGACT-SIGPLAN symposium on Principles of programming languages. 1977: 238-252.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/906682.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Unity 实用工具篇】✨ | 二维像素角色创作工具 2D Pixel Unit Maker

前言【Unity 实用工具篇 】 | 二维像素角色创作工具 2D Pixel Unit Maker一、介绍1.1 相关链接1.2 效果展示二、快速使用方法2.1 导入插件2.2 打开动画场景,完成初始化2.3 配置自己想要的二维像素角色三、导出角色动画序列帧四、导入新项目使用4.1 切割序列帧动画4.2 配置角色…

jvm-虚拟机栈

1.栈的存储单位 栈是运行时单位,而堆是存储的单位 栈解决程序的运行问题,即程序如何执行,或者说如何处理数据。堆解决的是数据存储问题,即数据怎么放,放在哪儿 java虚拟机栈 早期也叫java栈,每个线程在创…

电商数据采集和数据分析

不管是做渠道价格的治理,还是做窜货、假货的打击,都需要品牌对线上数据尽数掌握,准确的数据是驱动服务的关键,所以做好电商数据的采集和分析非常重要。 当线上链接较多,品牌又需要监测线上数据时,单靠人工肯…

华为手机怎么录屏?看这里,小白也能学会

“华为手机怎么录屏呀,新买的华为P30,还没怎么用过,今天看直播的时候突然想录屏,却找不到录屏按钮,我记得是有录屏功能的呀,有人会吗?教教我。” 华为手机作为一款领先的智能手机品牌&#xff…

docker 04(docker 应用部署)

一、部署Mysql 需求: 在Docker容器中部署MySQL,并通过外部mysql客户端操作MySQLServer。 二、部署tomcat 三、部署nginx 四、部署redis

[ MySQL ] — 复合查询和内外连接的使用

目录 复合查询 多表查询 自连接 子查询 单行子查询 多行子查询 多列子查询 在from子句中使用子查询 合并查询 union union all 表的内连接和外连接 内连接 外连接 左外连接 右外连接 复合查询 多表查询 实际开发中往往数据来自不同的表,所以需要多表查…

opencv进阶14-Harris角点检测-cv2.cornerHarris

类似于人的眼睛和大脑,OpenCV可以检测图像的主要特征并将这 些特征提取到所谓的图像描述符中。然后,可以将这些特征作为数据 库,支持基于图像的搜索。此外,我们可以使用关键点将图像拼接起 来,组成更大的图像。&#x…

云上社群系统部分接口设计详解与测试

目录 一、项目简介 1. 使用统一返回格式+全局错误信息定义处理前后端交互时的返回结果 2.使用ControllerAdviceExceptionHandler实现全局异常处理 3.使用拦截器实现用户登录校验 4. 使用MybatisGeneratorConfig生成常的增删改查方法 5. …

SVF——C/C++指针分析/(数据)依赖分析框架

这篇文章包括: SVF介绍SVF源码解读SVF优势与不足如何扩展改进 文章包括一些个人观点,若觉得有误请留言纠正,感谢🙏 在这篇文章之前强烈推荐看我公众号之前推的一篇文章:CG0’2011 “Flow-sensitive pointer analysis f…

追踪工时和控制成本 如何选对工具

研发工作中的工时管理软件是一种用于追踪、记录和分析团队成员在项目中所花费的工作时间的工具。它有助于组织、监控和优化研发项目的进展,确保资源得到有效利用,项目按时完成,并提供数据支持用于决策制定和资源规划。 能够记录团队成员的工…

高忆管理:“降息”了!1年期下调10个基点,5年期为何“按兵不动”?有何影响?

1年期LPR利率年内再度下调,5年期以上LPR利率按兵不动。 8月21日,新一期借款商场报价利率(LPR)公布。其间,1年期借款商场报价利率(LPR)报3.45%,上月为3.55%;5年期以上LPR报…

5种做法实现table表格中的斜线表头效果(HTML+CSS+JS+Canvas+SVG)

table表格,这个东西大家肯定都不陌生,代码中我们时常都能碰到,那么给table加一个斜线的表头有时是很有必要的,但是到底该怎么实现这种效果呢? 我总结了以下几种方法: 1、最最最简单的做法 直接去找公司的…

电脑图纸怎么加密?图纸加密软件有哪些?

对于企业来说,图纸的重要性是不言而喻的,为了避免图纸泄露,我们需要将图纸加密保护。那么电脑图纸该怎么加密呢?下面我们就来看一下。 图纸加密会带来哪些好处? 保护企业利益 为图纸加密可以有效地保护知识产权&…

Openlayers 教程 - 以单位米为半径,绘制圆形图形要素

Openlayers 教程 - 以单位米为半径,绘制圆形图形要素 核心代码完整代码:在线示例 在以往的项目维护中,出现一个问题,使用最新高清底图发现,设置地图最大等级(21级)之后,地图虽然可以…

Steam搬砖项目:最长久稳定的副业!

项目应该大家都有听说话,但是细节问题,如何操作可能有些不是很清楚,今天在这里简单分享一下。 这个Steam搬砖项目主要赚钱汇率差和价值差,是一个细分领取的小项目。 不用引流,时间也是比较自由的,你可以兼…

vue 可拖拽可缩放 vue-draggable-resizable 组件常用总结

特征 没有依赖 使用可拖动,可调整大小或两者兼备定义用于调整大小的句柄限制大小和移动到父元素或自定义选择器将元素捕捉到自定义网格将拖动限制为垂直或水平轴保持纵横比启用触控功能使用自己的样式为句柄提供自己的样式 安装和基本用法 npm install --save vue-d…

【BASH】回顾与知识点梳理(三十七)

【BASH】回顾与知识点梳理 三十七 三十七. 基础系统设定与备份策略37.1 系统基本设定网络设定 (手动设定与 DHCP 自动取得)手动设定 IP 网络参数(nmcli)自动取得 IP 参数(dhcp)修改主机名(hostnamectl) 37.2 日期与时间设定时区的显示与设定时间的调整用 ntpdate 手动网络校时 …

Istio入门体验系列——基于Istio的灰度发布实践

导言:灰度发布是指在项目迭代的过程中用平滑过渡的方式进行发布。灰度发布可以保证整体系统的稳定性,在初始发布的时候就可以发现、调整问题,以保证其影响度。作为Istio体验系列的第一站,本文基于Istio的流量治理机制,…

MyBatis的基本入门及Idea搭建MyBatis坏境且如何实现简单的增删改查(CRUD)---详细介绍

一,MaBatis是什么? 首先是一个开源的Java持久化框架,它可以帮助开发人员简化数据库访问的过程并提供了一种将SQL语句与Java代码进行解耦的方式,使得开发人员可以更加灵活地进行数据库操作。 1.1 Mabatis 受欢迎的点 MyBatis不仅是…

玄而又玄——我亲历的三大总线

总线是计算机系统中的桥梁和公路。对于要学习计算机系统的人来说,如果不理解总线,那么很多认知就没办法落到实处,想不清两样东西是如何连接起来,数据是如何从一点到另一点的。 最近两三年,做了比较多的底层开发&#x…