鉴源论坛 ·观擎丨民机机载软件的开发与验证

news2025/1/18 6:21:01

作者 | 蔡喁 上海控安可信软件创新研究院副院长

版块 | 鉴源论坛 · 观擎

01 机载软件过程保证的目的和背景

民机机载软件研制过程一直是行业内公认的要求最为严苛、开发验证难度最大的软件开发实例之一。由于其高安全以及严格的政府监管特性,使得传统其他领域的软件开发人员往往难以适应。这里有必要分析和解释民用飞机机载软件体系下的语境和对过程的基本要求出发点。

1.1 机载软件的研制过程仅指从严密的系统需求定义到代码实现和集成的过程

由于飞机自身层次化的研发体系存在,以及民用飞机对功能安全的苛刻要求,民用飞机体系下软件研制活动实际上包括传统软件工程的需求收集和系统/产品级验证活动。民机工程中的软件验证过程起自经过确认,完整、准确、无二义性的系统需求。任何系统需求方面的错误和不完善则应退回到上级过程进行,任何软件设计过程中对系统需求的补充,则也不应由软件工程师决定其存在合理性。

产生这一现象的原因在于民机整体研制过程中,非常强调对需求和设计的确认、分析和安全性工作。而几乎所有的确认(确定功能和要求的合理性)以及安全性工作都必须充分结合使用条件和使用场景开展。大家可能还记得本系列第一篇中所描述的民用飞机安全性相关工作介绍。而民用飞机的设计,实际上并不是最求极致的正确,而是根据所能产生的安全影响提出相应的要求。在机载软件设计层次,实际上并不能充分理解其所提供的飞机级功能及其使用场景,因此民机研制者通常将软件定义为只需要按照要求的功能和性能实现软件代码,并确定可执行目标代码能够在预期的目标机环境下正确实现分配给他的功能即可。

1.2 民机机载软件过程及其适航评估关注的软件缺陷种类

在上述这种语境下,机载软件的缺陷很大程度上被理解为是由于人为错误。这种人为错误发生的诱因可能是人的认识水平、理解能力、劳累疲惫、利益考虑等诸多方面。这种诱因可能导致软件需求的问题、软件设计的问题、软件编码的问题、软件质量的问题。这些问题表现出来可能是软件与硬件的不兼容,软件不能满足用户的预期用途,软件在边界输入上不能正确响应,软件结构复杂带来的维护和扩展问题,软件能力不能满足负载和容量压力。这些问题可以列举很多,但归根结底,软件要么对输入没有进行正确的理解,要么技术方案出现了问题,要么自身的研发出现了问题。以上的这些软件缺陷或者错误在软件运行之后其发生的方式或者暴露的原因,不具有偶然性,一定是在满足一定的条件下才能够发生。这种软件的错误不像某些硬件失效那样,会表现为一定的中间状态,软件的错误不会介乎于好与不好之间的无法定性的状态。所以软件的错误在统计学上不呈现任何的规律。

鉴于软件错误的发生一定是满足一定的触发条件才能发生。因此,这种错误的存在可以得到人为的控制而减少。不像硬件的失效,硬件的失效并不因为人为的努力而不会发生,其更多的是一种物理或者化学现象,是一种自然科学上的必然现象。所以硬件的不能满足要求,是一种失效,而非错误。硬件失效则呈现统计规律,统计学上称之为失效概率。软件的错误和硬件的失效在机载系统上的处理截然不同。硬件的失效要求满足失效率的要求,对于可能造成单点失效的硬件,则必须设置相应的冗余、备份手段。软件错误的防范在机载领域则应用过程保证的方法。通过较少引入错误的机会,提高检出错误的能力,来规范软件的质量要求。

1.3 机载软件过程保证的基本出发点

过程保证以层次化方法为核心,通过划分软件的研发层次,以不同的视角和角色开发软件生命周期数据。软件的开发不能一蹴而就,必然是从系统视角到软件视角,软件视角是一种以审视软件轮廓和外部行为的黑盒角度。软件黑盒被进一步打开,软件模块及框架和逻辑被明确出来。当软件框架和框架内部子模块的行为被充分细化,此时才可走向编程语言及编译链接。简单来讲,是一种外部-内部-实现-可执行的层次化框架。这种层次化方法,避免编码人员的自由发挥,通过软件架构和低级需求的设计,表面软件代码行为与外部要求的不一致;这种层次化方法,通过设置软件高级需求,对软件的预期和利益人意见进行汇总和权衡,避免了软件实现与软件预期的不匹配。因此,机载软件为了保证软件本身与系统或设备需求的一致性,设置了目前呈现出来的研发层次。

1.4 设计的颗粒度、层次依据和界面原则

过程保证以界面原则作为特定层次颗粒度/模块化定义的依据。拿一个通常算账使用的简单计算器来举例讲,划分输入模块、处理模块、输出模块是一种颗粒度,划分机械键盘、防抖模块、计算模块、存储模块、电源模块、显示处理和液晶模块等也是一种颗粒度的定义方式。其实这种颗粒度的不同定位,就是一种何为内何为外的界面划分。对于软件高级需求来说这种界面可以按照不同的业务流程划分,也可以按照不同的任务系统进行划分,也可以按照面向外部交互角色进行划分。对于软件低级需求来讲,这种界面可以按照数据流向进行划分、可以按照更为细致的服务或者功能进行划分,可以按照业务步骤进行划分。这种界面决定了颗粒度的大小。界面原则可以保证需求、设计、代码各层次内部组合和解耦的合理性,也对该层次抽象程度的合理性进行定义。

过程保证以内外关联为界面原则的依赖性策划依据。内外关联的原则是将那些牢固的不易变化的界面关系明确为模块间的外部耦合关系,将那些内部可灵活处置的关系内化为内部耦合。外部耦合宜松,内部耦合宜紧。模块功能内聚,则不会失去聚焦,不会偏离模块的中心任务;模块间关联松散,则模块间的开发与维护都相对便捷,不会有过多顾虑。对于每个层次的内部需求/设计之间的关联关系,有不同的划分方法,正如同统一建模语(Unified Modeling Language,UML)将类间关系划分为关联、泛化、聚合和组合一般,依据这种关联原则的定义,将上下游、同层间的需求设计关系进行梳理和净化,进一步将需求和设计的形式与内容进行雕琢。

02 机载软件的开发过程

在软件开发过程中,DO-178C定义了如下四个子过程:

(1)软件需求过程:该过程的输入是分配给软件的系统需求,主要输出是软件系统的高级需求(HLR)。它包含了软件的功能需求、性能需求、软硬件接口和安全相关需求等内容。

(2)软件设计过程:该过程的输入是软件高级需求、软件开发计划和软件设计标准,主要输出是设计描述,包括软件架构和低级需求(LLR)。

(3)软件编码过程:这一过程根据软件低级需求和软件架构编写软件的源代码。过程的主要输出结果是源码和目标码。

(4)软件集成过程:该过程对源码和目标码进行编译、链接,并加载到机载系统或设备中。该过程应包含软件集成和软/硬件集成两个子过程。

下图给出了DO-178C标准中系统需求和软件开发四个过程之间的关系。

图1 DO-178C开发过程

软件开发过程在DO-178C中分为四个阶段,这四个子阶段的划分要求保证软件行为的整体性、内在模块之间的协调性、内部耦合之间的正确性、内部异常与错误之间的隔离性、上级功能与下层资源分配之间的合理性和适当裕度,同时还要兼顾到软件的效率。这四个子阶段的划分可以从软件行为到结构,再到编程语言的转换,也可以是从软件能力到软件规格,再到软件实现的转换,也可以是去粗求精、去伪存真的不断迭代过程,还可以是更为复杂的从外在到多视角描述肢解系统需求的过程。但是不管怎样,这是一个从整体出发到各个部分,然后再到整体的一个开发过程。层次化的步进是为了顺利完成视角的转换。每个层次的切割和分配是功能聚焦和开发人员关注点聚焦的现实需要。在这个过程中,复杂度随着模块、组件、单元的降维,开发难度不断降低,但是软件整体的行为却变得越来越不受控。在软件开发不断的开发过程中,仍然有一种总体的行为变得尤为重要,仍有一个角色在以总体的责任性视角审视各个实体的综合行为。所以在这四个子阶段的实施过程中,要么前期规划非常明确,各个部分的定义在顶层需求中已经框定,要么在演进过程中,总是有一个全局考虑的机制在发挥作用。否则局面将变得不可收拾。

03 机载软件的综合过程

在软件综合过程中,DO-178C又包含如下四个过程:

(1)软件验证过程

该过程由软件验证计划定义,用于检测和报告在软件开发过程中可能引入的错误,而错误的消除属于软件开发过程的活动;

(2)软件构型管理过程

该过程由软件构型管理计划定义,与其它软件生命周期过程协同执行,其主要功能包括:

● 用于在软件生命周期中提供确定的、可控的软件构型;

● 提供可执行目标代码的复制能力,当需要检查和修改时可快速复制;

● 在软件生命周期中提供过程输入/输出控制能力,保证过程活动的一致性和可重复性;

● 通过控制构型项、建立构型基础,提供用于走查、状态判断、修改控制的节点;

● 提供控制,保证所有问题都被处理,所有修改都被记录、提交和实现;

● 通过控制软件生命过程的输出提供软件的证明;

● 辅助判断软件产品与需求是否兼容;

● 保证构型项维护了加密、恢复和控制数据等;

(3)软件质量保证过程

该过程由软件质量保证计划定义,用于审核软件的生命周期过程及其输出,确保其目标被实现,错误被检测、评估、跟踪和解决,以及保证其它软件生命周期数据能够满足软件需求。软件质量保证过程用于提供相关证据来表明经过软件生命周期生产的软件产品与需求相一致,保证这些过程的执行与软件计划和标准一致。

(4)审定联络过程

该过程用于在整个软件生命周期中建立应用程序与证明授权之间的通讯和理解,辅助软件的证明过程。

在机载软件开发过程中,软件综合过程与软件开发过程是并行执行的。在整个软件生命周期中,以软件开发过程为主线,在其各个子过程中实施相应的软件综合过程,其执行根据独立性要求等可由两个以上的不同团队来完成,实现软件开发与软件综合的分离。软件生命周期中各个过程的关系可用下图表示,图中软件计划过程是所有过程的起始点,根据软件计划过程制定的各种软件计划执行相应的软件生命周期活动。

图2 DO-178C软件生命周期方阵

综合过程也称之为整体过程,预示其长期性和伴生性。这种综合性还体现在其支持性,其是保证在日复一日的开发过程中的软件中间产品的质量特性、清晰的数据变化路径、过程和产品的监督监理。综合过程的设置不但适用于软件,对于其它层级甚至其它行业都是非常必要的,其是现代工业活动长期实施过程中的宝贵经验总结。

笔者在这里想到丰田的精益管理,其中蕴含的思路也对综合过程的设置给出了一些提示和指导。例如透明的信息与数字看板,软件项目研制中的构型管理和质量保证其实就为实现这一目的,提供了良好的手段。通过构型管理和质量保证,可以为管理层提供诊断、监控、管理的依据。管理层要实施有效的管理,总是离不开管控范围、问题定位、解决措施、效果统计等这些俗套的环节或者要素。软件综合过程的这些项目可以系统性的提供这种手段,如构型项的梳理、构型项状态的管控、问题报告机制和构型变更管理机制等,为项目的范围状态,人力时间资源的投入等提供决策依据。精而有益、由精益而形成良好循环,最终质变。

当然,软件适航本身坚持的更多是一种底线思维。如果软件研制企业想在人力、进度、成本上取得进一步的收益,还必须在流程优化、技术视野、管理与激励机制上做出更广阔层面上的革新。

参考资料:

[1]《机载软件适航符合性教程》,2022,ISBN:9787313241344,上海交通大学出版社.

[2] Software Considerations in Airborne Systems and Equipment Certification(DO-178C),RTCA,2011. 

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

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

相关文章

1. 用Qt开发的十大理由

用Qt的十大理由 原因最主要的是很多大公司都在用,有钱景。 先来看看各大公司的评价: 奔驰:们用 Qt 开发了绝大部分的UI体验和软件,包括屏幕动画,屏幕间的过渡和小组件。 FORMLABS:凭借Qt的快速迭代&…

记录一下slf4j2打印一直不成功

整理一个之前的老项目问题,发现日志一直打印不出来,本地启动发现了第一个问题日志如下:此处可发现,jar包冲突问题,去掉冲突的jar包即可,此处不做过多赘述。然后发现了重新启动项目,发现jar包冲突…

工业废水的种类及其处理工艺简析

随着工业的迅速发展,工业废水的种类和数量随之增加,对水体的污染也日趋严重,威胁人类的健康和正常生活。所以工业废水的处理对于环保至关重要。 保护生态环境、更好地做好工业废水的处理,了解工业废水及其种类与处理非常必要。 工…

国内chatgpt 在VRAR上的应用场景

人工智能不鸣则已,一鸣惊人! 近日OpenAI发布了聊天AI ChatGPT,短短几天,其用户量直冲百万级,甚至服务器一度被注册用户挤爆了。 这种被网友惊叹“超越谷歌搜索”的神器究竟是怎么做到的? ChatGPT 简而言之:ChatGPT是一…

三行按键扫描详细解析

三行按键扫描基础 核心算法: unsigned char trg; unsigned char cont; void KeyRead( void ) {unsigned char readDate P3^0xff; // 第一行trg readDate & (ReadData ^ cont); // 第二行cont readDate; // 第三行 }用定时器每隔10ms执行一次按键扫描读取函…

C++:类和对象(上)

文章目录1 面向过程与面向对象的初步认识2 类的引入3 类的定义4 类的访问限定符及封装4.1 访问限定符4.2 封装5 类的实例化6 类对象模型6.1 如何计算类的大小6.2 类对象的存储方式猜测7 this指针7.1 this指针的引出7.2 this指针的特性8 C语言和C栈(Stack&#xff09…

J-Tech Talk|如何使用Grafana Cloud Alert进行实时监控

J-Tech Talk由 Jina AI 社区为大家带来的技术分享围绕 Python 的相关话题工程师们将深入细节地讲解具体的问题分享 Jina AI 在开发过程中所积累的经验在新一代基于云原生的微服务架构中,不管是业务还是基础设施,服务的可观测性 至关重要!它涵…

git、gitee、github关系梳理及ssh不对称加密大白话解释

温馨提示:本文不会讲解如何下载、安装git,也不会讲解如何注册、使用gitee或GitHub,这些内容网上一大把,B站上的入门课程也很多,自己看看就好了。 本文仅对 git、gitee、github的关系梳理及ssh公钥私钥授权原理用白话讲…

whistle 一个神奇的前端调试工具(抓包\代理工具)

在进行前端开发过程中,我们常常需要对一些接口进行处理,以及当后端接口没有弄好需要我们mock一些假数据,针对这些场景,我们就可以使用whistle 来解决。首先,我们要知道能满足我们需求的工具有很多,例如&…

第十五章 栅格数据重分类、栅格计算器、插值分析

文章目录第十五章 栅格数据分析第一章 栅格数据重分类第一节 栅格数据重分类第二节 栅格重分类的使用第三节 重分类的使用中的空值使用第四节 重分类的案例:分类统计面积第五节 坡度矢量分级图生成第二章 栅格计算器第一节 栅格计算器介绍第二节 栅格计算器使用第三…

操作系统题目收录(六)

1、某系统采用基于优先权的非抢占式进程调度策略,完成一次进程调度和进程切换的系统时间开销为1us。在T时刻就绪队列中有3个进程P1P_1P1​、P2P_2P2​和P3P_3P3​,其在就绪队列中的等待时间、需要的CPU时间和优先权如下表所示。若优先权值大的进程优先获…

Revit怎么生成电线和电器配件,管道附件?

一、Revit中如何自动生成电线 首先框选所有的照明设备,使用过滤器命令,只选中照明设备,如图1所示。 框选之后会出现创建电力系统的界面,选择如图2所示电力的命令。 出现图3中所示选择弧形导线或者带倒角导线,即可以自动…

【数字孪生百科】每周认识一个数字孪生要素 —— 玫瑰图(Rose Diagram)

简介玫瑰图(Rose Diagram),也称之为南丁格尔玫瑰图,极坐标区域图,鸡冠花图,是一种圆形的直方图,是由弗罗伦斯・南丁格尔所发明,用以表达军医院季节性的死亡率的一种图表。由于半径和…

零入门kubernetes网络实战-12->基于DNAT技术使得外网可以访问本宿主机上veth-pair链接的内部网络

视频地址(稍后上传) 本篇文章测试如何让veth pair链接的内网网络可以被本局域网的其他宿主机访问到? 1、测试环境介绍 一台centos虚拟机 # 查看操作系统版本 cat /etc/centos-release # 内核版本 uname -a uname -r # 查看网卡信息 ip a s eth02、网络拓扑 3、操…

银行零售如何更贴近客户?是时候升级你的客户旅程平台了

随着数字化战略推进,各大银行持续加大对线上多渠道的建设投入,客户触达也愈发移动化、智能化。与此同时,手机银行飞速发展产生并累积了大量客户行为数据,呈多样化、海量化等特点,将在用户体验、客户经营、手机银行运营…

SaaS的阴暗面:网络攻击武器化、平民化

你不一定懂编程,甚至都看不懂几行代码,但依然能成为杀伤力十足的黑客,这就是现阶段不少网络攻击的特点:不需要掌握娴熟的技术或代码,仅仅利用成熟的武器化工具,就能通过简单的“一键操作”,对目…

【Java基础】018 -- 面向对象阶段项目上(拼图小游戏)

目录 拼图小游戏(GUI) 一、主界面分析 1、练习一:创建主界面1 2、练习二:创建主界面2(JFrame) 3、练习三:在游戏界面中添加菜单(JMenuBar) ①、菜单的制作 4、添加图片&a…

传奇开服架设要具备什么条件

传奇开服架设要具备什么条件 新手如果想开服的话因具备哪些条件?我来为您解答 1.传奇SF开服的话你要清楚 具体的有哪些步骤 需要的哪些东西 自己一定要先了解清楚!因为这行的话 PZ比我们IDC服务器商都还要多。 {开服的话一定要了解清楚开传奇的一个具…

python(15)--函数设计

前言 函数是可重用的程序代码块。 函数的作用,不仅可以实现代码的复用,还可以保证修改函数的代码时,所有调用该函数的地方都能得到体现。目前我已知函数的作用是:对代码实现了封装、函数调用、传递参数、返回计算结果等。 正文 …

可控硅原理(单向可控硅和双向可控硅)

晶闸管(Thyristor)又叫可控硅,按照其工作特性又可分单向可控硅(SCR)、双向可控硅(TRIAC)。其中双向可控硅又分四象限双向可控硅和三象限双向可控硅。同时可控硅又有绝缘与非绝缘两大类,如ST的可控硅用BT名称后的“A”、与“B”来区分绝缘与非绝缘。 …