4. 系统级产品开发:系统级开发启动、技术安全概念(TSC)、系统设计与验证、系统集成与测试

好,咱们进入系统级产品开发这个核心环节。说实话,这是整个功能安全开发中最「接地气」的部分。前面那些概念、计划、管理,说白了都是在搭台子。从这一章开始,咱们要真刀真枪地唱戏了。

我个人习惯把系统级开发分成四个阶段:启动、概念设计、详细设计与验证、集成测试。每个阶段都有它的坑,也有它的窍门。咱们一个一个聊。

4.1 系统级开发启动

启动阶段做什么?不是开会,不是写PPT。是确认两件事:安全目标安全状态

我记得有一次,一个团队拿着安全目标来找我评审。目标写的是「防止非预期加速」。我说,这太模糊了。非预期加速到什么程度?持续多久?驾驶员有没有机会干预?这些不明确,后面的技术安全概念根本没法做。

所以启动阶段,我建议你至少完成以下工作:

  • 确认安全目标:来自上一阶段,但需要细化到可执行的程度
  • 定义安全状态:系统出问题时,应该进入什么状态?是降级、关闭、还是报警?
  • 明确系统边界:哪些功能在系统内,哪些在系统外?接口怎么定义?
  • 分配ASIL等级:每个安全目标对应的ASIL等级,要落实到子系统或组件

关键点:启动阶段最容易犯的错误是「急于动手」。很多人拿到安全目标就开始画架构图,结果画到一半发现安全目标本身有问题。我的经验是:花20%的时间在启动阶段,可以省掉后面50%的返工。

4.2 技术安全概念(TSC)

技术安全概念,简称TSC。这是系统级开发的重头戏。说白了,就是把安全目标翻译成技术语言。

举个例子。安全目标是「当驾驶员踩刹车时,车辆必须减速」。翻译成TSC,就变成了:

  • 刹车踏板位置传感器必须检测到踩踏动作
  • 信号必须在100ms内传输到ECU
  • ECU必须在50ms内计算出目标减速度
  • 执行器必须在30ms内响应

你看,一个简单的安全目标,拆解下来就是一堆技术指标。每个指标都要有对应的安全机制来保证。

我在项目中遇到过一种情况:团队把TSC写得特别详细,但忽略了故障容错时间间隔(FTTI)。结果呢?安全机制设计得再好,响应时间超了,系统还是不安全。所以,TSC里一定要明确时间约束。

我的小技巧:做TSC时,我习惯用一张表格来管理。左边列安全目标,中间列技术措施,右边列验证方法。这样一目了然,评审的时候也方便。

TSC的输出通常包括:

  • 系统架构(含安全相关和非安全相关部分)
  • 安全机制(检测、响应、容错)
  • 故障处理策略(降级、关闭、报警)
  • 安全状态定义(正常、降级、安全状态)
  • 时间约束(FTTI、诊断测试间隔等)

4.3 系统设计与验证

有了TSC,接下来就是系统设计。这里我要强调一点:设计不是画图,是决策

你想想看,一个系统架构摆在你面前,你要决定:

  • 用单核还是双核?
  • 用硬件冗余还是软件多样性?
  • 诊断覆盖率要达到多少?
  • 故障响应是立即停车还是降级运行?

每个决策背后都有代价。我见过一个项目,为了追求高安全等级,用了三冗余设计。结果成本翻了三倍,开发周期延长了一倍。最后客户说,我们其实只需要ASIL B,你搞了个ASIL D出来,这不是浪费吗?

所以,系统设计要适度。安全等级够用就行,别过度设计。

验证阶段,我常用的方法有:

  • FMEA:分析潜在故障模式及其影响
  • FTA:从顶事件向下分析,找出根本原因
  • 安全分析:定量评估故障概率和诊断覆盖率
  • 仿真验证:用模型验证安全机制的有效性

注意:验证不是一次性的。设计过程中要反复验证。我建议每完成一个安全机制的设计,就做一次小范围的验证。别等到所有设计都做完了再验证,那时候发现问题,改起来就麻烦了。

4.4 系统集成与测试

终于到了集成测试阶段。这个阶段,说白了就是「把零件拼起来,看看能不能跑」。

但功能安全的集成测试,和普通测试不一样。普通测试只测功能对不对,功能安全测试还要测:出故障时,系统安不安全

我建议你按这个顺序来:

  1. 功能测试:先确保基本功能正常
  2. 安全机制测试:注入故障,看安全机制能不能正确响应
  3. 故障注入测试:模拟各种故障场景,验证系统是否进入安全状态
  4. 鲁棒性测试:在极限条件下(高温、低温、电磁干扰等)测试系统
  5. 回归测试:每次修改后,重新测试所有相关功能

我曾经遇到过一个案例:故障注入测试时,安全机制触发了,但系统进入了错误的安全状态。本来应该降级到30km/h,结果直接停车了。这在高速上可是要命的。所以,测试不仅要测「有没有触发」,还要测「触发了之后对不对」。

集成测试的文档也很重要。我习惯用这样的表格来记录:

测试用例ID 测试场景 注入故障 预期结果 实际结果 状态
TC-001 正常行驶中传感器失效 断开传感器信号 系统进入降级模式,报警 系统进入降级模式,报警 通过
TC-002 高速行驶中执行器卡死 模拟执行器卡死 系统在100ms内进入安全状态 系统在120ms内进入安全状态 失败

你看,TC-002失败了。为什么?因为执行器卡死时,系统用了轮询方式检测,响应时间超标。后来改成中断方式,才满足要求。这就是测试的价值——发现问题,解决问题

总结一下:系统级开发不是一蹴而就的。启动阶段打好基础,TSC阶段翻译好需求,设计阶段做好决策,测试阶段验证好结果。每一步都走扎实了,后面的硬件和软件开发才能顺风顺水。

嗯,这一章就聊到这儿。下一章咱们讲硬件级开发,到时候再细聊硬件安全需求和硬件架构设计。有什么问题,欢迎随时交流。