模块化和可组合性是软件中的流行语,适用于从企业计算到裸机应用程序的所有内容。对于安全关键型嵌入式系统,这些概念通过允许针对不同用例以不同的组合使用现有软件组件来定义软件重用的目标。
虽然正式模块化开发的大部分推动力来自航空航天和国防领域,但它提供的好处与安全关键部门相关。了解模块化可组合性为何以及如何融入安全关键型开发,是利用软件重用优势同时满足当今功能安全标准的苛刻目标的关键。
模块化可组合性的概述和挑战
模块化解决了设计具有明确定义的接口的子系统(模块)的问题,这些接口可用于各种上下文。可组合性要求模块之间的关系,以便它们可以以解决多个问题的方式组合在一起。特温特大学的Ansgar Fehnker对这两个概念如何协同工作给出了这样的定义:
“如果一种设计方法有利于生产软件元素,那么它就满足了模块化可组合性,这些软件元素可以自由地相互组合以产生新系统,可能与最初开发它们的环境完全不同。
简而言之,模块化可组合性意味着跨系统的可移植性和可重用性,就像乐高积木从街景到航天器一样。
像乐高一样,模块化有一个实际的限制。乐高是一个特定品牌的建筑玩具,不能轻易与斯蒂克尔积木或麦卡诺连接。这同样适用于模块化软件,因为一旦组件投入生产,在不同的环境中重用它通常会受到约束和警告。
一个真实而臭名昭著的例子是阿丽亚娜5发射失败。根据欧洲航天局的报告,损失“是由于惯性参考系统软件的规格和设计错误。在阿丽亚娜5号开发计划期间进行的广泛审查和测试不包括对惯性参考系统或整个飞行控制系统的充分分析和测试,这些系统本可以检测到潜在的故障。虽然该软件实际上与阿丽亚娜4中成功使用的软件相同,但它受到新环境环境的影响。
安全关键标准如何反映模块化可组合性
许多行业标准都引用了与安全可重用性相关的过程和目标,如以下各节所述。
软件项目隔离:IEC 62304:2006+AMD1:2015
国际电工委员会 (IEC) 62304:2006+AMD1:2015 医疗器械标准允许将软件项目分开,目的是将尽可能少的系统放置在安全关键性较高的类别中(例如,C 类软件“在考虑软件系统外部的风险控制措施后,可能导致危险情况,从而导致不可接受的风险, 由此可能造成的伤害是死亡或重伤“):
“软件架构应促进安全操作所需的软件项的隔离,并应描述用于确保有效隔离这些软件项的方法”
图 1 说明了安全影响较少的软件项目(第 X 项)和具有高安全关键影响的软件项(Y 项和 Z 项)的分离。由于存在高度安全的关键项目,整个软件系统被指定为C类。
图 1:根据 IEC 62304:2006 +AMD1:2015 对软件项目进行分区的示例 图 B.18(来源:IEC)
提高开发效率:FAA AC 20-148
美国联邦航空管理局 (FAA) 咨询通告 AC 20-148 为可重用软件组件 (RSC) 的开发提供了指导,例如软件库、操作系统和通信协议。RSC 与其他组件的不同之处在于,所需的文档和指南远远超出了通常提供的软件工件。
咨询通告有明确的指导方针,以确保每个接口(包括应用程序代码和目标硬件)都由开发人员以 RSC 提供商规定的方式完全定义。这种高度指定的模块化意味着RSC在很大程度上可以被视为“黑匣子”,因为无论目标应用程序的目的如何,RSC都可以被假定为以明确定义的方式运行。
这意味着在符合 DO-178 标准的系统中部署 RSC 可以节省大量认证时间。如果没有 RSC,FAA 要求每次重用时重新生成、重新提交和重新审查认证工件,包括对现有安装进行的软件更改。
促进重用:开放集团未来机载能力环境
开放集团未来机载能力环境 (FACE) 联盟通过可负担性、速度、敏捷性和卓越改进目标,建立了一条在航空中重用软件的途径。FACE技术战略和标准概述了几个关键原则,包括:
建立一个软件环境,使FACE应用程序从一架国防部飞机或作战平台重新利用到另一架国防部飞机或作战平台,只需最少的软件修订。
采用增强软件可移植性的设计原则 - 例如,为每个便携式 FACE 应用程序提供一组通用接口。
限制使用某些 API 调用并要求其他调用的编码标准 - 例如,遵守 POSIX API 的特定部分,以确保 FACE 可移植性单元 (UoP) 的功能签名在语法上正确,并强制正确使用关键语言结构。
自动化在实现模块化可组合性目标方面的价值
无论标准或方法如何,模块化可组合性原则往往会在时间和金钱方面对安全关键型开发过程产生巨大影响。乍一看,这似乎是一个昂贵的提议,但如今的自动化工具(可重用组件可用于各种工具链)简化了验证的不同方面,如图 2 所示。
图 2:支持确认重用代码适用性的自动化需求可追溯性和回归测试示例(来源:LDRA)
需求可追溯性
软件生命周期中劳动密集型和易出错元素的自动化在最大限度地减少模块化可组合性的开发影响方面发挥着关键作用。识别需求和证明履行可能是一个苛刻的过程,特别是当功能需求必须与 DO-178 等标准一起验证时。
自动化可追溯性可缓解潜在的项目管理难题。通过自动化,可以在初始模块开发和不同环境中的每次未来部署之间使用相同的机制来管理和跟踪需求。模块需求的确认可以通过自动化和链接回归测试来实现,包括单元测试、针对编码标准的静态分析检查和其他措施。
单元测试
尽管它们的统称,称为“单元测试”工具的自动化工具通常同时支持单元测试和集成测试。这些工具的价值在于使用相同的机制来测试单个可重用单元和多个集成单元作为一个整体。测试本身不需要更改函数是单独测试还是作为调用树的顶部进行测试。在前一种情况下,自动生成的存根可以处理超出范围的代码。
这种自动化方法有助于将模块集成到初始项目和未来项目中。每当在新环境中调用模块时,例如部署到不同的目标硬件时,都可以简单地回归原始测试。通过在新项目的上下文中调用模块的 API,可以验证其适用性。
为您的项目带来模块化可组合性
可重用性是安全关键型应用程序开发人员的圣杯,但模块化可组合性为实现其目标提供了一种可行、现实的机制。虽然有关于软件重用的恐怖故事和许多讨论模块化和可组合性原则的标准,但自动化为任何项目提供了安全重用的有效途径。
自动化减少了在不同环境中管理、跟踪和测试组件重用所需的时间和精力。生命周期平台(如LDRA 工具套件)可确保重用模块适合其环境,具有从需求可追溯性到静态分析再到单元和集成测试的功能。这些功能使安全和安保关键软件开发团队能够根据严格的行业标准获得可重复使用组件的认证和批准。
审核编辑:郭婷
全部0条评论
快来发表一下你的评论吧 !