2. 航空软件与系统级验证需求

在航空机载软件研制中,DO-178C 并不只是一份“软件编码规范”,它真正约束的是从系统需求到软件实现、再到验证证据的完整闭环。很多团队在 HIL 系统级验证阶段遇到困难,根源往往不在测试执行本身,而在于系统级需求没有正确分解到软件层级,或者软件层级与系统层级之间的接口定义不完整,导致验证证据无法回溯到最初的安全目标。本节围绕四个关键问题展开:DO-178C 对系统级验证提出了什么要求、软件层级与系统层级如何接口、需求如何分解与追溯、验证证据链如何构建。

一、DO-178C 对系统级验证的要求

DO-178C 将软件生命周期过程分为软件计划、软件开发、软件验证和软件构型管理等过程,并按照 A 到 E 五个软件等级(DAL)规定不同的目标强度。需要特别注意的是:DO-178C 本身不直接规定系统级验证方法,但它要求软件需求必须可追溯到系统需求,且软件验证必须覆盖系统分配给软件的功能与安全目标。系统级验证(如 HIL 台架试验、铁鸟试验、机上地面试验)承担的是“系统需求是否被满足”的确认,而软件层级验证承担的是“软件是否按软件需求正确实现”。两者通过需求追溯关系连接。

以 DAL A 软件为例,DO-178C 表 A-1 至 A-7 中与验证直接相关的目标包括:软件需求可追溯至系统需求、软件架构可追溯至软件需求、源代码可追溯至软件架构、验证结果可追溯至验证目标。这意味着在 HIL 系统级验证中,每一个测试用例都应当能够回答三个问题:它验证的是哪一条系统需求?该需求分配给了哪个软件配置项?测试结果如何证明该需求被满足?

关键理解:DO-178C 的验证目标不是“测了多少条用例”,而是“每条需求是否有充分、可追溯、可复现的证据证明其被满足”。系统级验证是证据链的上游确认环节,不是替代软件层级验证的手段。

二、软件层级与系统层级的接口

软件层级与系统层级的接口通常体现在三个层面:功能接口、数据接口和时序接口。功能接口描述系统功能如何分配给软件,例如飞行控制律计算、大气数据解算、告警逻辑判断;数据接口描述软件与传感器、作动器、总线之间的数据流,例如 ARINC 429 标签、AFDX 虚拟链路、离散量输入输出;时序接口描述软件周期、采样率、延迟和抖动约束,例如控制律周期 20 ms、传感器采样 50 Hz、端到端延迟不超过 100 ms。

在 HIL 系统级验证中,这些接口通过实时仿真模型和 I/O 板卡被“真实化”。例如,将大气数据计算机的 ARINC 429 输出接入 HIL 仿真机,仿真机按真实标签格式发送高度、空速、迎角等参数,被测软件接收后计算控制指令,再通过模拟量或总线输出到作动器模型。此时,系统级验证观察的是“传感器输入—软件计算—作动器输出”的完整链路,而软件层级验证观察的是软件内部函数、模块和状态机是否正确。

系统层级与软件层级接口及验证证据链 系统层级 系统需求 / 安全目标 功能分配:控制律、告警、导航 接口定义:ARINC 429 / AFDX 时序约束:周期 20 ms / 延迟 100 ms 安全等级:DAL A / B / C 系统级验证:HIL / 铁鸟 / 机上地面 软件层级 软件需求 / 软件架构 高层需求:功能、接口、性能 低层需求:模块、函数、状态机 源代码:C / Ada / 汇编 软件层级验证:单元 / 集成 / 覆盖率 目标:MC/DC、语句、分支覆盖 HIL 系统级验证接口 功能接口:控制律 / 告警逻辑 数据接口:总线标签 / 离散量 时序接口:采样率 / 延迟 / 抖动 实时仿真模型 + I/O 板卡 传感器模拟 → 被测软件 → 作动器模型 观察完整链路行为与接口一致性 分配 实现 需求分解与追溯关系 系统需求 软件高层需求 软件低层需求 源代码 / 目标码 双向追溯:每条需求可向上追溯至系统需求,向下追溯至实现与验证证据 验证证据链 需求评审记录 需求正确性 / 完整性 测试用例与规程 覆盖正常 / 边界 / 异常 HIL 测试结果 数据 / 曲线 / 日志 覆盖率分析 需求 / 结构覆盖率 证据链闭环:需求 → 用例 → 结果 → 覆盖 → 评审签署

三、需求分解与追溯

需求分解的核心原则是:系统需求不能直接“跳”到源代码,必须经过软件高层需求和软件低层需求两级分解。系统需求描述的是飞机级或系统级功能,例如“当迎角超过失速迎角时,飞行控制计算机应在 100 ms 内输出失速告警并限制俯仰指令”。这条需求分配给软件后,软件高层需求将其分解为“迎角有效性判断”“失速阈值比较”“告警输出逻辑”“俯仰指令限幅”等功能;软件低层需求再进一步分解为具体模块、函数和状态机,例如“迎角有效性判断函数应在 10 ms 内完成,输入范围 -10° 到 +30°,无效时置默认值”。

追溯关系必须是双向的。向上追溯确保每条软件需求都有系统需求来源,不会出现“无源需求”;向下追溯确保每条系统需求都有软件实现和验证证据,不会出现“需求遗漏”。在 HIL 系统级验证中,追溯关系通常以需求追溯矩阵(RTM)的形式维护。一个简化的追溯矩阵示例如下:

系统需求编号 软件高层需求编号 软件低层需求编号 HIL 测试用例编号 验证状态
SYS-FCS-012 HLR-FCS-045 LLR-FCS-101 / 102 HIL-TC-023 通过
SYS-FCS-013 HLR-FCS-046 LLR-FCS-103 HIL-TC-024 通过
SYS-ALERT-007 HLR-ALERT-021 LLR-ALERT-055 HIL-TC-031 待复测

表中“待复测”状态说明该需求尚未形成完整证据链,不能计入验证完成。在 DO-178C 审查中,审查员会随机抽取系统需求,沿追溯链向下检查软件需求、源代码、测试用例和测试结果,确认每一环都存在且一致。

四、验证证据链的构建

验证证据链不是单一文档,而是由需求评审记录、测试用例与规程、测试结果数据、覆盖率分析报告和评审签署记录共同构成的证据集合。在 HIL 系统级验证中,证据链的构建需要注意以下几点:

  • 测试用例必须可追溯到需求:每个 HIL 测试用例应明确标注其验证的系统需求编号和软件需求编号,避免“为测而测”。
  • 测试结果必须可复现:记录 HIL 台架的配置版本、仿真模型版本、被测软件版本、I/O 板卡配置和激励数据,确保任何人在相同配置下能复现结果。
  • 覆盖率分析必须覆盖需求:除了结构覆盖率(语句、分支、MC/DC),还要分析需求覆盖率,确认每条需求至少被一个测试用例验证。
  • 异常结果必须闭环:测试中发现的偏差、失败或未覆盖项,必须记录为问题报告,跟踪至关闭,并在证据链中保留处理记录。
实践建议:在 HIL 系统级验证开始前,先建立“需求—用例—结果”三列追溯表,每执行完一个用例就更新状态。这样在验证结束时,证据链自然完整,不需要事后补记录。
常见误区:把 HIL 系统级验证当作“软件功能测试”的替代。HIL 验证的是系统需求在真实接口和时序条件下的满足情况,软件内部逻辑的覆盖率仍需通过软件层级验证完成。两者证据互补,不能互相替代。

总结来看,DO-178C 对系统级验证的要求可以归纳为:需求可追溯、接口可验证、证据可闭环。在 HIL 系统级验证中,工程师需要同时关注系统层级的功能与安全目标、软件层级的实现细节,以及两者之间的接口一致性。只有把需求分解、追溯关系和证据链三者打通,才能形成经得起审查的验证结论。