第3章:安全认证流程:计划阶段、开发阶段、验证阶段、适航阶段全生命周期

好,咱们今天聊聊安全认证的全生命周期。说实话,很多工程师一听到「认证」两个字就头大,觉得是文山会海。但我做了这么多年,我的体会是——认证不是绊脚石,而是保护伞。你想想看,飞机在天上飞,座舱显示系统要是出了错,那可不是蓝屏重启那么简单。

我个人习惯把安全认证分成四个阶段:计划、开发、验证、适航。这四个阶段环环相扣,缺一不可。下面我一个个拆开来讲。

3.1 计划阶段:别急着写代码

很多团队一上来就撸代码,这是大忌。我见过一个项目,开发到一半才发现安全等级定错了,结果全部返工。嗯,这里要注意——计划阶段决定了后面80%的工作量

计划阶段的核心任务有三个:

  • 功能危害评估(FHA):说白了,就是问自己「如果这个功能坏了,会怎样?」。比如,高度显示失效,是灾难性的还是轻微的?
  • 安全等级分配:根据FHA结果,给每个功能打上安全等级标签(A级、B级、C级、D级)。A级意味着「失效会导致机毁人亡」,D级则是「不影响安全」。
  • 制定安全计划:明确用什么标准(比如DO-178C)、用什么工具、谁来评审、时间节点怎么排。

关键输出物:

  • PSSA(初步系统安全评估)报告
  • 安全计划文档
  • 需求追溯矩阵(初步)

我的经验:计划阶段一定要拉上系统工程师、软件工程师、测试工程师一起开会。我曾经吃过亏——系统工程师自己写了一份FHA,结果开发时发现有些场景根本覆盖不到。后来我强制要求「三方会审」,效果好了很多。

3.2 开发阶段:把安全刻在代码里

开发阶段不是闷头写代码,而是带着「安全枷锁」跳舞。你想想看,每一行代码都可能影响飞行安全,所以开发过程必须受控。

这个阶段我重点说三个点:

  1. 需求分解与追溯:从系统需求到软件需求,再到代码实现,每一步都要能追溯回去。我习惯用表格维护一个追溯矩阵,比如:
系统需求ID 软件需求ID 代码模块 测试用例ID
SR-001 SWR-001 altitude.c TC-001
SR-002 SWR-002 speed.c TC-002

你看,这样一旦出了问题,马上就能定位到是哪个需求、哪段代码、哪个测试没覆盖到。

  1. 编码规范与静态分析:DO-178C要求代码必须符合MISRA-C等规范。我建议从一开始就启用静态分析工具,比如PC-lint或Coverity。别等到代码写完了再跑,那时候改起来成本太高。
  2. 配置管理:所有代码、文档、测试用例都要纳入版本控制。我曾经遇到过一个项目,因为配置管理混乱,导致测试时用的代码版本和开发时的不一致,白白浪费了两周时间。

避坑指南:我曾经接手过一个项目,开发阶段完全没做代码走查,结果到了验证阶段发现大量逻辑错误。后来我们不得不加班加点补走查,那滋味……嗯,你懂的。所以,代码走查一定要嵌入到开发流程中,别想着后面再补。

3.3 验证阶段:用证据说话

验证阶段说白了就是证明你的系统是安全的。这个阶段不是「测一测就完事」,而是要拿出铁证。

验证阶段通常包括:

  • 单元测试:每个函数、每个模块单独测。覆盖率要求很高,比如语句覆盖、分支覆盖、MC/DC覆盖(对于A级软件,MC/DC覆盖必须达到100%)。
  • 集成测试:把模块拼起来测,看看接口有没有问题。
  • 系统测试:在真实或模拟的硬件环境中测,模拟各种故障场景。
  • 评审:所有测试结果都要经过独立评审。我习惯找不参与开发的人来评审,这样更容易发现问题。

一个常见的误区:很多人觉得测试通过就行了。其实不是,测试用例本身也要被验证。你想想看,如果测试用例写错了,那测试结果还有什么意义?

我记得有一次做MC/DC覆盖分析,发现有一个条件分支永远覆盖不到。后来一查,原来是需求里写错了逻辑。你看,验证阶段不仅能发现代码问题,还能反哺需求。

3.4 适航阶段:最后一公里

适航阶段是跟局方(比如FAA、EASA、CAAC)打交道的阶段。说白了,就是拿着你的证据去接受审查

这个阶段的核心工作:

  • 整理适航资料包:把所有文档、测试报告、评审记录、配置管理记录打包。局方可能会随机抽查。
  • 接受局方审查:局方会派审查员到现场,看你的开发过程、测试环境、代码质量。我经历过一次审查,审查员问了我一个细节问题:「你们这个测试用例的预期结果是怎么确定的?」还好我们当时有详细的评审记录,不然真答不上来。
  • 处理不符合项:如果局方发现问题,会开不符合项(NC)。你需要在规定时间内整改,然后重新提交证据。

我的建议:适航阶段不要临时抱佛脚。我见过一个团队,平时文档写得马马虎虎,到了适航前一个月才开始补文档,结果漏洞百出。我的习惯是每个阶段结束时就整理好该阶段的证据,这样到了适航阶段,你只需要打包即可。

3.5 全生命周期管理:别以为拿到证就完事了

很多人以为拿到适航证就万事大吉了。其实不是。飞机在运营过程中,可能会发现新的问题,或者需要升级软件。这时候,整个安全认证流程要重新走一遍

举个例子:如果发现高度显示有偏差,需要修改代码。那么:

  1. 先做FHA,评估这个修改对安全的影响。
  2. 然后修改需求、代码。
  3. 再跑一遍验证。
  4. 最后向局方提交变更申请。

你看,这就是全生命周期管理。不是一次性的,而是持续的过程。

避坑指南:我曾经遇到过一个团队,为了赶进度,跳过了一些验证步骤就提交了变更申请。结果局方审查时发现了,直接打回。不仅耽误了时间,还影响了信誉。所以,任何时候都不要走捷径,安全认证没有捷径可走。

3.6 小结

好了,这一章的内容就这些。总结一下:

  • 计划阶段:定好安全等级,做好规划。
  • 开发阶段:带着安全枷锁写代码,做好追溯。
  • 验证阶段:用证据说话,别放过任何细节。
  • 适航阶段:接受审查,准备好资料。
  • 全生命周期:持续管理,别松懈。

下一章,我会详细讲讲需求分析与安全等级分配,这是整个安全认证的基石。咱们到时候见。

一句话记住本章:安全认证不是终点,而是贯穿产品一生的旅程。