一、DO-178C概述:软件级别划分、目标与产出物、结构覆盖在适航中的角色

各位工程师朋友,大家好。今天我们来聊聊DO-178C的开篇内容。说实话,我接触这个标准快十五年了,每次回头看都觉得有些新体会。咱们先从最基础的软件级别说起。

1.1 软件级别划分——说白了就是“出事后果有多严重”

DO-178C把软件分成五个级别,从A到E。这个分级不是拍脑袋定的,它完全取决于软件失效后对飞机安全的影响程度。我个人习惯用一个比喻来理解:

  • Level A:软件失效会导致灾难性事故。比如飞控系统、发动机控制系统。说白了,这玩意儿坏了飞机就没了。
  • Level B:失效会导致严重危险,但飞机还能勉强飞回来。比如部分导航系统。
  • Level C:失效会造成较大影响,但机组还能处理。比如客舱压力控制系统。
  • Level D:失效会引起轻微不便。比如机上娱乐系统。
  • Level E:对安全没影响。比如一些维护用的地面软件。

关键点:级别越高,审查越严,需要的证据越多。Level A的代码覆盖率要求是100%的MC/DC覆盖,而Level D可能只需要语句覆盖就够了。

我在项目中遇到过一件事:有个团队把某个Level C的模块当成了Level D来做,结果到了适航审查阶段,发现缺少分支覆盖数据,硬生生补了三个月。嗯,这里要注意——级别划分必须在项目启动时就定清楚,不然后面全是坑。

1.2 目标与产出物——适航审查到底要看什么

DO-178C定义了66个目标(Objectives),这些目标分布在软件开发的不同阶段。你想想看,适航局方的人不可能把每一行代码都看一遍,他们看的是你有没有按照标准流程走,有没有留下足够的证据。

我整理了一下主要产出物,大家看看:

阶段 主要产出物 我个人的经验
计划阶段 PSAC(软件适航计划)、SDP(软件开发计划)、SVP(软件验证计划) PSAC是门面,写不好后面全白干
需求阶段 软件需求规格、需求评审记录 需求要可测试,不然覆盖分析没法做
设计阶段 软件设计说明、设计评审记录 架构设计直接影响结构覆盖的难度
编码阶段 源代码、编码标准检查记录 代码风格统一,工具分析才省心
测试阶段 测试用例、测试结果、覆盖分析报告 覆盖数据是适航审查的重头戏
集成阶段 集成测试报告、硬件/软件集成报告 别忘了做接口覆盖

小提示:产出物不是越多越好,关键是每个产出物都要能回答一个问题——“这个证据能证明软件是安全的吗?”

1.3 结构覆盖在适航中的角色——为什么它这么重要?

结构覆盖分析,说白了就是检查你的测试到底测了哪些代码路径。适航局方为什么盯着这个不放?因为光靠功能测试,你根本不知道有没有漏掉某些代码分支。

我曾经见过一个案例:某飞控系统功能测试全部通过,但结构覆盖分析发现有一段异常处理代码从来没被执行过。后来一查,那段代码里有个逻辑错误,如果真触发了异常,飞机会直接进入不可控状态。你想想看,如果没有结构覆盖分析,这个问题可能到飞机交付都发现不了。

DO-178C对结构覆盖的要求分三个层次:

  • 语句覆盖:每行代码至少执行一次。这是最基础的,Level D就够用。
  • 分支覆盖:每个判断的真假分支都要走到。Level C必须做。
  • MC/DC覆盖:每个布尔条件的独立影响都要验证。Level A和B的硬性要求。

这里我画了一张图,帮大家理清结构覆盖在整个适航体系中的位置:

DO-178C 结构覆盖在适航中的角色 适航目标:证明软件是安全的 验证手段:需求测试 + 结构覆盖分析 + 评审 结构覆盖分析:检查测试是否覆盖了所有代码路径 语句覆盖 (Level D) 分支覆盖 (Level C) MC/DC覆盖 (Level A/B) 级别越高,覆盖要求越严格,审查证据越详细

警告:结构覆盖分析不是万能的。它只能告诉你“测了哪些代码”,不能告诉你“测得对不对”。功能正确性还是要靠需求测试来保证。两者是互补关系,不是替代关系。

最后说一句,结构覆盖分析在适航审查中扮演的角色,就像安检在机场的角色——它不能保证绝对安全,但能大幅降低风险。我曾经参与过一个项目,就因为MC/DC覆盖差了一个条件,被局方打回来重新做测试。那感觉,嗯,挺难受的。所以大家从一开始就要把覆盖分析纳入测试计划,别等到最后才补。

好了,这一章就到这里。结构覆盖的具体方法,咱们后面慢慢聊。


专注资料整理