资讯动态

ISO 26262功能安全实战:安全生命周期、ASIL与测试验证

发布时间:2026/10/18 1:27:12 来源:尧图企业网站定制
我做汽车嵌入式系统开发这些年对ISO 26262的态度见过两类极端一类是还没被安全审核逼过觉得它不过是“一堆流程文件”另一类是被功能安全评估折腾过提起这套标准就条件反射地头疼。这两种滋味我都尝过。印象最深的是某个电子助力转向项目团队刚开始没人说得清“安全目标”和“功能安全概念”的区别等项目进入测试阶段才开始疯狂补故障注入用例那种被动程度真是谁做谁知道。ISO 26262这套标准核心就解决一件事汽车上电子电气系统越来越多万一某个环节坏了能不能保证不伤人不死人。它要求整个开发链条从需求分析、系统设计、软硬件实现到测试验证都要形成一条可追溯、可证明的安全论证链。这篇内容不打算帮你把标准条款从头背到尾而是结合我在实际项目里的复盘把安全生命周期、ASIL等级、软硬件安全机制、测试验证、审核取证这些关键环节拆开讲清楚。适合正在做或准备做功能安全的嵌入式软件工程师、硬件工程师和项目经理阅读。1. 为什么说ISO 26262不是一个能“应付检查”的流程1.1 功能安全的底层逻辑是“风险算术”先聊一个最基础但容易被忽略的点。功能安全定义里的“安全”不是“系统绝对不出故障”而是“没有不可接受的风险”。这句话听起来像废话却决定了整套开发方法论。一般可靠性工程追求“故障越少越好”功能安全却允许故障存在要求的是故障发生后系统能被正确识别并进入安全状态把风险压到可接受范围。风险怎么评估ISO 26262第3部分给出了三个关键维度严重度Severity、暴露概率Exposure和可控性Controllability。三个参数组合得出汽车安全完整性等级ASILAutomotive Safety Integrity Level从A到D逐级递增D为最高。举一个我在项目中真实遇到的例子某电动助力转向系统如果非预期输出过大转向力矩车辆场景设定在市区复杂路口驾驶员一般情况下无法快速纠正那严重度很高、可控性很低最后定出来的ASIL基本就是D级。这个等级一旦确定后面所有安全机制、分析方法、测试强度全部围绕它展开不是技术负责人拍脑袋说“我多加两个看门狗就行”的事。很多团队对ISO 26262还有一个误解以为它只在研发阶段起作用。实际上标准覆盖的是完整生命周期从概念阶段、开发阶段、生产阶段一直延伸到运行维护和退役处置。换句话说你量产的控制器用了两年后收到售后反馈偶发复位要不要处理标准照样要求一套完整的监控和失效反馈闭环。功能安全不是一次性拿证而是从设计源头到售后数据持续迭代的体系。1.2 谁会被这套标准“卷”到放在今天的汽车电子行业几乎不太可能绕过ISO 26262。传统动力、底盘、转向、制动这些直接关系行驶安全的系统自不用说连车身控制器、热管理控制器、智能座舱控制器在整车厂的功能安全需求里通常也会落到ASIL A或B。更不用说高级辅助驾驶这类系统一个感知融合模块的失效都可能影响驾驶员干预决策往往整条软件链路十几个组件全都带着安全等级。如果你在零部件供应商工作会发现主机厂给出的需求文档里大概率已经写明要符合ISO 26262并要求提交安全计划、安全案例、HARA报告和一系列测试证据。如果签了合同之后才开始研究标准项目工期和成本多半已经失控。所以我建议所有进入这个领域的人不管做硬件还是软件都先把标准整体框架搞懂。哪怕你只负责某一个环节的文档也得清楚自己的交付物在整条安全证据链里处于什么位置否则审核问到你时连“这个文档要回答什么问题”都说不出来。2. 安全生命周期从找风险到降风险2.1 概念阶段HARA不是开一次会就完事安全生命周期通常这样起头先定义“项目Item”也就是你打算开发的系统功能再把它的边界、接口、运行场景描述清楚随后进入危害分析与风险评估也就是大家常说的HARA。HARA的产出是安全目标每个安全目标都要对应一个ASIL等级。HARA执行时最难的在于“场景覆盖度”。城市路口、高速公路、停车库、雨天、雾天、夜晚不同场景下同一个故障导致的后果并不一样暴露度和可控性也不同。做HARA必须系统化地穷举场景而不是想到哪写到哪。我在某个项目里功能安全工程师把HARA表格做了四十多页当时不少同事觉得过度设计了。结果审核时恰恰是其中两个边缘场景把原本定义为ASIL B的安全目标拉高到ASIL D。这次升级直接导致架构调整增加了冗余通道和更严格的诊断覆盖率。前期多花一周做细场景分析省掉的是后面改架构的几个月时间。实操中做HARA建议这样组织先和系统工程师明确功能清单和失效行为再让硬件工程师、软件工程师一起评审失效模式。原因很简单有些失效模式只有最接近实现细节的人才能想象出来比如传感器供电跌落导致的内部状态跳变写系统需求的人未必能想到。2.2 安全计划与安全案例靠文档驱动开发概念阶段还要输出两份常被轻视的文档一份是安全计划一份是安全案例的框架。安全计划规定整个开发过程怎么组织、哪些活动在什么时候做、由谁负责、需要交付什么证据。安全案例则是整个安全论证的容器最终要能回答“这个系统为什么足够安全”这个总问题。审核时我最怕遇到的情况是团队把安全计划当成启动会上的一个演示PPT之后几个月再也没人翻开过。安全计划的价值在于它能暴露资源冲突。比如计划里写某测试活动要在硬件样本到位后三周开始但实际项目排期里硬件样本要等到四个月后才交付如果你不提前看计划问题到节点临近了才暴露就只能牺牲安全活动的深度来换进度。所以我不建议把安全计划做得过于宏大它应该是一份会被频繁更新、指导日常工作的操作性文件。2.3 ASIL等级直接决定开发成本的“价目表”不同ASIL等级对应不同的推荐方法、文档深度和技术措施。我跟团队常说ASIL等级就是项目安全维度的“价目表”。ASIL A可能只需要一定程度的需求追踪和基础测试到ASIL D基本就是硬核要求软件单元测试要做到修改条件判定覆盖率MC/DC硬件要评估随机硬件失效率指标工具链要做分类和鉴定变更管理要严格到每一次提交都带安全影响分析。我平时给新同事做内部培训时常用下面这个简化口径来展示工作量差异活动QMASIL AASIL BASIL CASIL D需求可追溯性基本增强严格严格严格软件单元测试覆盖率语句语句分支语句分支MC/DCMC/DC硬件随机失效定量分析无需弱中等强强独立安全评审强度弱弱中等高非常高变更安全影响分析基本增强严格严格严格这张表不是标准原文只是经验对照但方向上足够说明问题。ASIL等级越高举证责任越重、测试深度越深、管理粒度越细。不过我还要多说一句ASIL等级由实实在在的场景分析得出不是“等级越高显得我们越安全”那种想法。有的团队硬要把一个本可以定为ASIL B的功能往D级做结果成本失控、验证工作量爆炸这并不明智。2.4 安全要求分解ASIL D也能“拆着做”这里要讲一个实用又容易踩坑的点ASIL分解。标准允许把一个高等级安全要求分解到两个或多个独立元素上每个子要求可以带一个较低的继承等级。比如一个ASIL D的安全目标理论上可以分解成两条并行实现路径每个子要求的等级可能是ASIL B(D)括号里保留原始D级用于追溯。前提是两个路径之间具备充分的独立性。这个机制听起来非常诱人因为能显著降低开发认证难度。但实际项目里最难的就是“独立性证明”。大多数控制器做不到完整双冗余功耗、成本、封装面积都不允许于是大家常用“安全机制辅助”的思路比如独立的监控芯片配合主控芯片工作。这里我必须提醒审核方会死盯共因失效分析。两个芯片是否共用电源、是否共用时钟、是否共用一个复位电路这些都是高频质疑点。只要共因失效分析不充分ASIL分解方案大概率会被打回。如果你打算用分解策略请先别急着写文档先把硬件架构层面的失效独立性证据攒出来再谈后续分解设计。3. 从系统到软硬件实现最容易翻车的三个环节3.1 硬件设计随机失效不是玄学是概率汽车电子最底层的安全隐患是硬件本身会随机失效。芯片内部存储位可能翻转时钟可能漂移电源可能出现纹波甚至短时跌落。ISO 26262第5部分对硬件电路提出了定量和定性两类要求。定量上要基于失效率数据做计算看整体硬件架构是否达到ASIL等级对应的指标并输出FMEDA表格。定性上要设计安全机制覆盖典型失效模式比如对RAM做周期测试、对Flash做CRC校验、对时钟和电压做监控、对通信总线做校验。我个人的体会是硬件设计阶段必须引入FMEA和FTA这类可靠性分析而不是等测试出问题再回来补。很多硬件失效模式在功能测试阶段根本暴露不了比如电容老化导致的时序漂移只有经过长期高温老化实验或在现场运行几个月后才显现。这个阶段做得细后面随机失效相关的安全论证就有底气。实际操作上如果你团队没有专职功能安全硬件工程师最快的方法是找关键芯片厂商要安全手册和安全分析包。大部分主流芯片厂商都会提供失效模式、诊断覆盖率和失效率参考数据。拿到这些资料后结合外围电路做失效覆盖分析再拉几个有经验的硬件工程师做交叉评审至少比凭空估算可靠。3.2 软件安全机制先隔离再监控最后才谈“看门狗”嵌入式软件里的安全措施常被简化成“加个看门狗”。实际上在复杂安全控制器里看门狗只是最后一道兜底真正的功夫在于把失效“识别出来再降级处理”。我参与底层软件项目时习惯把软件安全机制分成几层第一层是空间隔离比如用MPU或MMU把不同安全等级的任务隔开防止一个普通变量越界把关键任务堆栈写坏第二层是数据有效性检查包括CRC校验、范围检查、合理性判断第三层是时间监控看关键任务周期是否稳定、调用是否超时第四层才是把故障汇聚起来触发复位、降级或安全状态。把顺序做反的团队我见过不止一次先堆看门狗却不做内存隔离结果一个不常用的底层驱动函数越界写坏关键任务数据看门狗照常喂狗整台控制器看起来工作正常故障却已经隐藏在深处最后只能在实车偶发异常之后靠现场数据跟踪定位修复成本极高。做安全软件建议先把数据流和控制流梳理清楚把安全关键任务放进独立分区再往分区里加诊断和监控逻辑。软件安全机制的覆盖方式不是越多越好而是要覆盖到真实风险。标准附录里会给大量推荐措施但你不必每个都上。比如内部RAM测试你可以选择开机自检加运行周期测试的组合也可以依赖具备ECC能力的芯片关键是把覆盖逻辑讲清楚某类存储位翻转由哪一层机制发现发现之后系统如何反应。3.3 工具链鉴定别让编译器拖你的后腿另一个容易被拖到最后一刻才处理的问题是工具链鉴定。ISO 26262要求对开发工具进行分类判断它是“对安全要求有直接影响”还是“可能掩盖错误”。比如编译器它把C代码翻译成机器码如果编译逻辑出错安全功能可能被悄悄改变工具影响等级通常会比较高。比如单元测试覆盖率工具它的输出被当作测试充分性证据如果它漏报某些分支整个测试声明就会失去支撑置信度要求也会很高。具体做法是把开发过程中用到的所有工具列个清单包括集成开发环境、编译器、静态分析工具、单元测试工具、版本管理工具、需求管理工具等逐个完成工具影响评估和置信度评估。之后根据结果决定是“采取可靠的使用方法”还是“做工具资格认证”。商业工具链很多已经提供认证包直接购买可以省事但要注意版本必须和实际使用版本一致。版本不一致导致审核不通过的情况业内并不少见特别是只看某个工具已通过认证没注意认证证书覆盖的版本号已经过期的那种非常可惜。注意如果预算有限工具链上先保三类编译器、静态分析工具、覆盖率工具。这三类直接决定你能否给出可信的软件测试证据其他辅助工具可以后面再补。4. 功能安全测试不仅要“能跑”还要“抗摔倒”4.1 验证和确认目标不同证据不同进入测试阶段前先分清两个词验证和确认。验证是“我们有没有把安全要求正确实现”对应从单元测试到系统测试的逐层对照确认是“放到整车上安全目标在真实场景里到底有没有实现”对应整车层面的安全目标确认和真实道路场景测试。很多项目把这两个概念混在一起最后交付的安全论证体系存在明显漏洞实验室里测试用例做得非常漂亮安全目标确认环节却几乎没有。审核员看安全案例时会顺着“安全目标-系统需求-软硬件需求-测试用例”这条线一直查到底。如果某一层测试没有和上一层需求形成对应关系整个论证链条就断了。这个问题并不难避免只要在测试计划阶段就把需求追溯矩阵建立好并随着需求变更持续维护。4.2 测试策略与层级每一层都有任务功能安全相关的测试活动通常分层展开软件单元测试、软件集成测试、嵌入式集成测试、系统集成测试最后是车辆级测试。每层重点不同。测试层级主要考察点常见手段软件单元测试函数逻辑、边界条件、异常输入基于需求的测试用例、MC/DC覆盖工具、背靠背测试软件集成测试模块间接口、时序、数据一致性接口测试、桩程序与驱动、故障注入嵌入式集成测试目标硬件、启动流程、底层驱动的正确配合硬件在环HIL、处理器在环PIL系统集成测试多控制器协同、总线通信、安全状态切换台架测试、故障注入、实车测试单元测试阶段最容易忽略的是“随机输入”和“非法输入”两类用例。只测正常路径远远不够边界值、除零、空指针、异常长度数据包都必须覆盖。到了集成阶段重点应该是证明安全机制真正能“抓住”失效而不是只靠代码走查判断逻辑“看起来没问题”。我见过一个控制器设计了超时监控却没有真正制造出超时场景做过测试结果在实车阶段遇到总线负载偏高时诊断才被触发整车已经进入了本来不该降级的运行状态。从那次之后我给自己和团队定了一条硬规矩凡是安全相关监控必须有对应的故障注入测试记录不能只靠静态分析。4.3 故障注入要会制造“事故现场”故障注入的手段可以分几个层次。信号层故障注入是指把传感器输出直接拉到上电短路、开路或者超量程状态看控制器能否识别为不合理值并启用后备策略。通信层故障注入最常见的是故意丢报文、插错误帧、篡改CRC再观察总线诊断和节点安全状态。寄存器层故障注入则是通过调试接口或软件程序直接改写内存中关键变量模拟位翻转或者指针错乱。这几类手段的差异在于耦合度。越接近底层越能模拟真实硬件失效但工具成本和用例复杂度也会明显上升。普通团队不必一开始就上最重的故障注入工具先用调试器、总线工具和现有台架把通信层和信号层的故障注入跑起来往往已经能解决不少实际问题。故障注入用例设计时要注意一点注入位置要和失效模型对应。如果你明明想验证“内存位翻转”对安全逻辑的影响却只是在应用层改了某个变量那只能证明“应用数据被改后会怎样”并不能证明硬件ECC检测能有效捕获存储器的真实翻转。两者的结论在审核层面上分量完全不同。鲁棒性测试方面电源跌落、电快速瞬变脉冲群、交变温湿度、电磁兼容干扰这几项不能少。这类测试通常由硬件验证团队或专门的EMC实验室执行但最终结果必须被纳入安全论证。如果没有这些报告安全标准中的环境应力要求和EMC相关要求就会缺证据。功能安全和普通可靠性测试不是两条平行线越早把两者的测试报告合并到同一份验证矩阵里后期整理证据越轻松。4.4 覆盖率分析与残余风险评估覆盖率分析是测试充分性的重要出口。软件单元测试阶段ASIL C和D等级通常要求MC/DC覆盖率ASIL B通常是语句覆盖加分支覆盖。MC/DC的难点在于要让每个条件都能独立影响判定结果往往需要额外写大量用例。比如一段带短路逻辑的C语言条件判断if里塞了五六个条件为了凑满足MC/DC的用例组合测试工程师会非常痛苦。更合理的做法是在编码阶段就考虑可测试性把复杂条件拆分成多个小函数避免把几十个条件堆进一个判断语句。硬件层面的覆盖率评估和软件不太一样更多是在FMEDA表格中估算安全机制对失效模式的诊断覆盖率。比如某监控电路能够覆盖到供电电压漂移导致的风险它的诊断覆盖率是多少整体硬件失效率是否因此降到目标以下。这部分我不建议只靠感觉填数字最好基于芯片厂商提供的安全手册里的数据或者参考同类设计的历史积累。残余风险评估是安全案例的收尾。要明确回答在识别到的所有风险中哪些已经被降低到可接受水平哪些还有残余为什么可以接受。残余风险不等于“没测到所以不算”而是要在文档里显式描述。审核时这个地方如果含糊通常会被列为不符合项。5. 审核与实践证据链、流程整合和避坑清单5.1 审核员到底想看什么参与过几次第三方功能安全评估后我得出的结论是大部分不符合项不是技术实现有硬伤而是“证明不了”。ISO 26262对文档链的要求是没有文档就没有发生。但这里说的文档不是项目结束前临时拼凑的报告而是开发过程中同步产生的记录。审核员会抽查不同阶段的时间线一旦发现某个测试记录的文件日期和版本提交记录对不上后续所有证据的可信度都会被怀疑。审核员的检查通常会顺着三条主线走第一安全需求是否完整分解并追溯到设计和测试用例第二安全分析是否覆盖了已识别的失效模式并且这些失效模式是否落实成了具体安全机制第三所有安全相关变更是否做了影响分析并留下记录。如果你在项目启动第一天就把需求链接到测试用例每条变更都自动通知功能安全负责人审核过程会顺利很多。引用块 提示强烈建议用需求管理工具或项目跟踪平台来维护安全需求与测试用例的链接关系。手工维护Excel追踪矩阵在需求变更频繁的敏捷项目里几乎注定断链一断链就是后期返工和不符合项。5.2 与ASPICE、敏捷开发的配合很多研发团队既要过功能安全审核又要做ASPICE过程评估。两者的关系可以用一句话概括ASPICE看流程能力成熟度ISO 26262看产品安全完整性。它们不是替代关系完全可以共用一套流程框架。实际操作中我会把两个体系的要求映射到同一套组织过程定义里。这样做最大的好处是维护一套流程文档就能同时应对两类审核避免“为了过审临时建两套体系”的资源浪费。敏捷开发与ISO 26262也并非天生冲突。标准没有强制要求瀑布模型但要求每个开发阶段有明确的准入准出条件并且对安全相关变更做影响分析。我在敏捷迭代里会单独标记安全相关用户故事每次迭代计划评审时专门确认安全故事的实现和测试完成度。一个迭代周期内完成不了的安全验证必须显式记录为未完成项并且安排到下一次迭代而不是悄悄改到版本发布后再说。坚持这样做敏捷不会成为安全管理的死角。5.3 我踩过的一些坑整理成清单给你这些坑我在真实项目中基本都踩过列出来供参考至少能帮你少花冤枉钱。HARA活动启动太晚。风险等级在没有充分评估的情况下架构已经定型。等发现某个安全目标等级高于预期、需要增加冗余或诊断时改架构的成本就已经不可控了。软件和硬件团队各维护一套需求没有统一的软硬件接口规范。联调才发现安全机制分配重叠某条诊断被实现了两次另一个失效模式没人负责最后只能加班重排接口。只关注单元测试和系统测试跳过了集成层级的测试。大量接口问题在台架阶段爆发修复成本远高于预期。标准的测试体系不是摆设每层都有它存在的意义。工具链证据收集得太晚。开发过程中升级过一次编译器版本补认证材料时发现新版本没有对应认证包只能回退编译器版本并重新完成一轮回归测试。这个来回至少耗费两周时间。关键芯片供应商的安全资料没有及时索取。硬件FMEDA分析时要数据没数据只能靠估算审核阶段抗风险能力很弱。建议硬件选型阶段就把安全手册、失效模式分析包、失效率数据写进采购技术要求里。这些坑的共同点不是技术难题而是流程和接口管理问题。如果你现在刚开始一个功能安全项目我的建议是每周固定留出一段时间把安全计划、风险登记册和追踪矩阵过一遍而不是等项目倒排三个月再集中补课。功能安全本质上是对抗遗忘和沟通损耗的持续活动细水长流比分阶段突击有效得多。6. 最后说点实际团队体会做了几个安全相关项目后我最大的一个认知变化是功能安全绝不是一个“一个人的岗位”。起初我也有过把安全文档全丢给功能安全工程师的念头后来发现根本行不通。安全机制必须落到每一个硬件管脚、每一行软件状态机上这需要所有参与者都在自己的交付物里带上安全视角。另一个实际体会是不要为了显得“安全”而盲目追求最高ASIL等级。如果通过合理的安全机制设计可以把残余风险控制在可接受范围那就没有必要求上所有最严格的手段。不合理的过度设计会拖慢项目进度最终反而挤占真正需要投入的安全分析时间。如果你所在团队已经决定把功能安全当成常规开发要求来做我建议尽早备齐三样基础设施一套需求链路管理工具一套静态分析与单元测试工具链一组结构化的安全分析模板。这三样东西看起来是前期成本实际上是长期加速器。等到项目快要交付再请外部顾问来紧急补评估花费的金钱和精力会是前期投入的好几倍。如果只能从一件事开始那就从把安全计划真正写细、写实开始。计划能写清楚后面所有环节自然有了主心骨。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑