ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

ASIL等级怎么算?ISO 26262功能安全风险管理与工程落地拆解

ASIL等级怎么算?ISO 26262功能安全风险管理与工程落地拆解 几个月前有个做底盘域控制器的朋友找我聊天说他们准备过ISO 26262的ASIL D认证老板觉得只要花钱买个工具链、请咨询公司来辅导然后埋头写一年文档就能搞定。我当时没直接反驳但他走之后我一直在想这个行业里对ASIL(Automotive Safety Integrity Level汽车安全完整性等级)的误解真的太普遍了。很多人把它当成一个评分体系以为把D级当成“最高要求”然后照着最严的条款堆就行了但实际上ASIL的本质是一套风险管理决策的工程化表达你如果理解不了它背后是怎么运作的做出来的功能安全大概率是花架子。这篇东西我不打算跟你逐条翻译ISO 26262的标准条文那些去找中文版PDF都能看到。我想做的是把ASIL到底是什么、怎么算出来、怎么在实际项目中落下去、以及最常见的坑在哪里一条线拆开来讲明白。说得再直白一点这篇文章是写给那些需要在真实项目里搞定功能安全而不是仅仅想“过个审核”的人。1. 认识ASIL之前先搞懂ISO 26262到底在管什么在很多人的印象里ISO 26262是一个“安全标准”或者说一套“文档模板要求”。这个理解不算全错但它会让你抓不住重点。ISO 26262全名是《道路车辆 功能安全》它管的不是车辆本身安不安全而是车辆上电子电气系统在出现故障的时候能不能把风险控制在一个可接受的范围内。你可以把功能安全理解成给系统加一套“兜底机制”。一个控制器正常工作时当然没问题但如果传感器短路了、执行器卡住了、信号被干扰了这个系统应该怎么样ISO 26262管的就是这类场景——它在逼你回答当东西坏了的时候系统是变得更危险了还是依然安全这里就牵扯到一个非常核心的概念安全是系统性的属性不是一个单独的功能。你做的不是一个“安全功能”你是在让一个可能出故障的功能在故障时依然不会把人置于危险境地。这个思维转变很重要因为很多人都习惯说我做了个“安全模块”但这个安全模块本身也会坏谁来兜它1.1 ISO 26262的框架结构从V模型到全生命周期覆盖ISO 26262从架构上覆盖了从概念阶段、系统开发、硬件开发、软件开发到生产、运行、报废的全生命周期。理论上讲它管的不是某一块电路板或者某一段代码而是整个安全生命周期里所有跟“风险”相关的活动。行业里讨论最多的通常是第二部分——功能安全管理第三部分——概念阶段第四部分——系统级开发第五部分——硬件级开发第六部分——软件级开发。这套结构外形上很像传统的V模型开发流程左边是需求分解右边是集成验证中间挂着各种追溯性要求。所以你会看到很多公司落地功能安全的时候第一反应就是改造研发流程把V模型和现有的敏捷开发揉在一起。但这里我要说一句可能得罪人的话流程是手段不是目的。ISO 26262真正想要的不是一个完美的V模型而是让每一项安全相关的决策都有依据、有记录、可追溯。你哪怕用敏捷开发只要能在每个迭代里保证安全相关活动闭环了在合规性上完全有可能。反过来如果你严格按照V模型做了一年但安全目标是怎么来的都说不清楚那你的流程就是纯摆设。1.2 规范等级并不是“分数”而是风险容忍度的边界那时候我刚开始接触ISO 26262的时候也犯过错误以为ASIL D就是“要求都拉到最高”所有东西都按最严的来。后来被一个老前辈点醒ASIL不是分数是风险容忍度。它表达的是——出于社会对“多大风险算可接受”的共识这个功能需要做到多完善才能被允许装车。这个理解上的差异会给项目带来完全不同的做法。把ASIL当分数的人做设计的时候会疯狂堆冗余什么都上双通道什么都要最高诊断覆盖率最后成本翻倍、性能下降、交付延期。把ASIL当风险边界的人会先问这个功能失效了会造成多严重的后果这种后果发生的可能性有多大驾驶员能不能在几秒钟内接管回答完这三个问题之后ASIL等级自然就出来了后续的技术方案要围绕“把风险压到这条线以下”来设计而不是追求表面上的复杂度。2. ASIL等级的本质一套把“风险”翻译成“工程要求”的机制这章节就是这篇文章的核心主题了。我跟不少人聊过大家普遍能背出ASIL A、B、C、D四个等级也知道D最高但问到“为什么我的系统是ASIL B而不是ASIL D”的时候就说不清楚了。说不清楚的原因就是——没有理解ASIL等级的本质是一套翻译机制。你可以这样理解ASIL是连接“事故场景”和“工程要求”的桥梁。事故场景是社会语言、日常语言比如“车子在高速上转向助力突然没了”工程要求是技术语言比如“转向扭矩传感器的诊断覆盖率要达到90%以上故障响应时间要小于100ms”。这两者之间差了十万八千里ASIL就是那个把前者翻译成后者的转换器。2.1 风险三要素严重度、暴露率、可控性具体是怎么翻译的ISO 26262给了三个维度参数英文含义等级范围严重度Severity失效后果对人员伤害的程度S0~S3S3代表危及生命暴露率Exposure车辆处于危险场景的频率/时长E0~E4E4代表几乎每次行驶都暴露可控性Controllability驾驶员或其他人员能否通过及时干预避免伤害C0~C3C3代表几乎无法控制这三个参数组合查表就能得到对应等级。但请注意这可不是简单的打分然后查表背后每一个参数的定义和判定逻辑都值得深挖。严重度S——看的是对“人”的伤害不是对车的损坏。一个功能失效导致车子撞墙车撞烂了人没事严重度就不会特别高但如果导致乘员被甩出车外那就是S3。这里有个常见的争论点是否要考虑碰撞速度ISO 26262的标准解释是严重度评估要考虑合理的预期场景但不能无限上纲上线。比如你在评估车门锁的功能安全非要说如果高速行驶中车门打开导致乘员甩出严重度很高这就属于不合理的场景假设。工程判断在这里非常重要。暴露率E——指的是车辆或人员处于危险场景中的概率。比如安全气囊相关系统只有当碰撞发生时才用到但碰撞是个低概率事件所以E等级的判定就会相对低。相反如果是一个刹车系统每次行驶都在用那么失效场景的暴露率就会非常高。要注意的是这里评估的不是“失效发生的概率”而是“场景出现的概率”。失效的概率跟硬件失效率挂钩是在硬件层面通过FMEDA来计算的跟这里的E不是一个概念。这个区分特别多人搞混。可控性C——评估的是驾驶员能不能在失效发生后通过合理反应避免伤害。比如转向助力失效虽然方向盘突然变沉但驾驶员使劲还是能转动方向盘的这就有一定的可控性。而如果是刹车完全失效驾驶员踩踏板毫无反应那可控性就很低接近C3。可控性这个维度是最容易引起争议的因为它涉及到对人因的假设。ISO 26262在定义可控性的时候特别强调要按照“普通驾驶员在典型场景下的反应能力”来评估不能假设每个人都是赛车手也不能假设所有人遇到危险都会发呆。2.2 组合逻辑与查表一个实例带你算一遍三个参数各自量化之后就要组合运算了。这里用表格来展示ISO 26262第三部分中定义的组合关系(具体定义可见ISO 26262-3:2018的表4)严重度S暴露率E可控性CASIL等级S1E1C1QMS2E2C1QMS2E3C2ASIL BS3E2C2ASIL BS3E3C3ASIL DS3E4C3ASIL DS2E4C2ASIL C乍一看这个表很细但其实逻辑非常清晰任何单一维度到达最高级别都不足以单独决定ASIL D只有三个因素都足够严重时才能达到最高等级。这就是ASIL作为风险管理的本质——它平衡的不是单一风险源而是整个场景的综合风险水平。举一个实战例子。假设在做电动助力转向系统EPS的安全分析。转向助力失效——电机不输出扭矩导致方向盘突然变沉。驾驶员在低速时可以轻松克服阻力完成转向但在高速行驶中突然失去助力会让人措手不及可能造成车辆偏离车道。严重度呢如果车辆偏出车道撞上对向来车或路侧障碍物可能导致严重伤害甚至死亡所以是S3。暴露率呢EPS在每次驾驶中都持续工作高速行驶是常见工况所以危险场景的暴露率很高E3甚至E4。可控性呢虽然方向盘变沉但驾驶员通常还能施加力量控制方向所以C2或C3看具体场景假设。如果取S3、E3、C2对照标准表格最保守的取值会到ASIL C或者更高取S3、E4、C3就是ASIL D。这就是为什么行业里普遍把EPS当作ASIL D系统来开发——当然企业也可以通过合理的安全机制和场景定义来论证到ASIL C但前提是你的分析必须站得住脚。分析逻辑合理、文档记录完整审核员才会认可你的等级定义。2.3 QM等级的意义不代表不做事而是不需要按ASIL流程执行很多人初次接触ASIL会忽略QM这个等级。QM是Quality Management的缩写意思是“按照普通的质量管理体系来管理即可”。言下之意就是功能失效后对人的风险足够低不必要用功能安全那套专门的流程来管控常规的IATF 16949、APQP那一套就够了。但注意QM不代表你可以不分析。判断某个功能属不属于QM本身就是分析的结果。我看过一些团队把所有非核心功能都打成QM然后什么安全活动都不做这就过头了。正确的做法是把每一项功能都做一遍初步危害分析确认风险确实低到不需要功能安全流程介入才能标注为QM。这个初步分析本身要留痕否则审核的时候被抽查到你说这个功能是QM的审核员问你怎么论证的拿不出记录就很被动。3. 从等级到工程实践ASIL D需求是怎么落到硬件和代码里的ASIL等级定完之后难点才真正开始。概念阶段定出了安全目标(Safety Goal)然后要把安全目标分解成功能安全需求(FSR)再分解成技术安全需求(TSR)最后落到硬件和软件的设计里。这个过程里有几个行业公认的关键操作我逐个拆开讲。3.1 安全目标的制定与ASIL分解安全目标描述了系统层面要避免的危害事件。比如“避免EPS在行驶过程中非预期失去助力”。这个安全目标本身带有ASIL等级然后会被分解到各个子系统或组成部分。分解的逻辑是这样的如果整个系统承担一个ASIL D的安全目标但是可以通过两个相互独立的功能共同实现这个目标其中每个功能能独立地把风险降到足够低那么分解之后的每个功能可以分配低一些的等级。经典案例刹车系统。如果安全目标是“确保车辆能够按驾驶员意图减速”整个系统是ASIL D。拆分成两个独立通道——液压制动通道和线控制动通道——在架构上相互独立那么每个通道可以被定义为ASIL C(D)。这个括号里的D代表分解前的原始等级C是分解后该通道承担的等级。两个C加在一起搭配独立性论证才能证明整体仍然满足D的要求。这里最关键的就是独立性论证。你要拿出证据证明两个通道之间不存在共因失效比如不能共用一个电源、不能共用一个传感器、不能共用一段代码。如果两个通道用的是同一个MCU那它们之间的独立性就大打折扣。我看过不少团队在做ASIL分解的时候画了一个很漂亮的架构图两个冗余通道看起来独立结果往下看细节——两个通道共享同一个时钟源这独立性就得重新讨论了。3.2 硬件层面失效率指标与FMEDA硬件层面的功能安全工作核心围绕两个东西随机硬件失效的量化分析和安全机制的诊断覆盖率。量化分析的标准工具是FMEDA(Failure Mode Effects and Diagnostic Analysis)。这个工具会枚举一个硬件组件的每一种失效模式(比如电阻开路、短路、漂移)评估每一种失效模式对安全目标的影响以及系统里的诊断机制(比如电压监控、看门狗、CRC校验)能覆盖多少比例的失效。ISO 26262-5给出了随机硬件失效的量化目标行业里大家习惯用PMHF(Probabilistic Metric for random Hardware Failures随机硬件失效概率度量)来评估ASIL等级单条安全目标的PMHF目标值ASIL A 10⁻⁶ / 小时ASIL B 10⁻⁷ / 小时ASIL C 10⁻⁷ / 小时ASIL D 10⁻⁸ / 小时这个指标的分量在于——10⁻⁸每小时是什么概念平均下来是每1亿小时才允许出现一次危险失效。一条安全目标在整车生命周期里大概要撑过1万小时的运行时间这意味着你要把危险失效的概率压到极其微小的水平。实现这个目标主要靠两样东西一是选用失效率足够低的元器件二是设计足够强的诊断覆盖率。只靠前者会非常烧钱因为你得用宇航级或者特殊筛选的器件聪明做法是靠后者用合理的安全机制去识别故障在故障导致危险之前让系统进入安全状态。比如用双通道比较、用自检逻辑、用外部监控芯片——这些都是提高诊断覆盖率的常规手段比单纯堆器件等级划算得多。3.3 软件层面ASIL对架构和代码的要求软件方面的ASIL要求不像硬件那样有明确的量化数字更多是过程要求和架构要求。过程部分包括需求的追溯性管理、验证活动覆盖度、代码规范的符合性(比如MISRA C)、静态分析工具的引入、单元测试的覆盖率要求等。架构方面的核心是自由度干扰(Freedom From Interference)。这个概念说的是如果一个系统里既有ASIL D的软件组件又有QM的软件组件那么QM的组件不能以任何方式干扰到ASIL D组件的运行。典型的干扰路径包括内存破坏(通过指针操作踩了别人的内存)、时序干扰(抢占了CPU资源)、信息交换干扰(通过共享变量传递了错误数据)。解决这个问题常用手段包括在MCU层面启用MPU(内存保护单元)做地址隔离在AUTOSAR架构里对ASIL D组件和QM组件分配不同的OS-Application用E2E(End-to-End)保护机制确保跨组件通信的完整性。这些都是实际项目中可以直接下手的方案。3.4 工具链的置信度你以为你用了个好工具就够了工具链是项目里非常容易踩坑但被严重低估的环节。ISO 26262-8里对工具进行了分类如果某个工具出了问题会导致安全相关的输出被错误地认为正确那么这个工具就需要被评估和认证。比如你的编译器如果编译器本身有bug生成了错误的机器代码而你没有发现那就直接威胁到安全目标了。所以编译器、静态分析工具、单元测试工具、代码覆盖率工具这些环节都要做工具置信度评估。行业通用做法是选用已经通过TÜV等机构认证的工具同时对工具的使用环境进行限定。认证不是一劳永逸的事——你必须在项目里按照认证时假定的方式来使用这个工具如果用法超出了认证范围那认证就失效了。4. 项目实操中的ASIL落地的四大经典痛点与我的处理经验整个项目做下来我总结了几个反复出现的痛点。这些东西在ISO 26262原文里你找不到因为没有哪一条标准会告诉你“这种情况下团队会犯什么错误”。但这恰恰是工程实践里真正的价值所在。4.1 ASIL分解被当成“降级工具”乱用我刚入行的时候在一个项目里看见团队把Safety Goal定为ASIL D然后靠ASIL分解把每个子系统都拆成ASIL B整个系统设计难度骤降看起来很“聪明”。但审核的时候被问到一个问题两个ASIL B的子系统之间的独立性证据在哪里如果节点A和节点B之间的通信链路是共享总线这条链路失效可能导致两边同时收不到正确的数据——那整个系统是否还满足ASIL D最后这个项目的分解被审核员打了回来因为通信链路的独立性论证做不出来。后来我们学到的经验是ASIL分解不是算术题不能说“两个B加起来等于D”。你要仔细检查所有共享资源——电源、时钟、通信总线、内存区域、甚至开发工具(同一个编译器会不会给两边都编出同样的错)——只要有任何一条共享链路被失效事件一杆子捅穿分解就站不住脚。实操建议是做分解之前把这些共享资源列表先做出来规划好哪些可以用共享机制(比如通过诊断来提高共享链路的完整性)哪些必须物理隔离。这个列表应该在架构设计阶段就纳入考量而不是等审核发现了才补救。补的代价非常高昂通常得改架构甚至重写部分软件。4.2 安全目标和场景假设被“拍脑袋”定下来安全概念阶段最常见的错误就是把安全场景想得太粗。之前带过一个团队做抬头显示HUD的安全分析安全目标写得很简单“避免显示错误信息”。但你往下增加细节的时候就得问了——所谓“错误信息”是指什么数字显示错了显示位置偏移了还是直接不显示了这些不同的失效形态带来的风险等级完全不同。显示数字211结果显成277可能只是让驾驶员有点困惑但如果把导航转弯指示提前了100米显示会诱导驾驶员提前变道这在高速上可能酿成事故。做场景分析的时候团队经常非常粗线条把整个HUD系统笼统地当一个整体来评S、E、C最后定了个ASIL A。我建议的做法是在概念阶段就要对每一种功能路径细分开来做分析不能把一个多功能系统的所有功能都用一个等级盖住。这是标准的Part 3要求但执行中的颗粒度差别非常大。有意思的是根据工况和功能的敏感度不同HUD的两个功能路径可能评出完全不同的ASIL等级——一个ASIL A一个QM。这就是为什么安全分析永远不能太快拍板场景建模做得越细后面的设计才越有的放矢。4.3 硬件FMEDA变成了“PPT表演”FMEDA是硬件功能安全的重头戏但也是注水最严重的环节。我做安全分析的时候见过不少所谓“FMEDA报告”里面的失效率数据居然是凭经验估的——没有参考SN 29500或IEC 62380这些标准数据源没有考虑工作温度、电压应力这些降额条件甚至有些数据直接从别的项目复制过来。这种报告在文档评审里可能蒙混过关但一旦到了硬件失效计数或者现场失效分析的环节就会原形毕露。真正扎实的FMEDA是有数据依据的。每个元器件的失效率要标明引用来源工作应力要按实际电路条件来算安全机制要跟原理图一一对应。做这个工作很枯燥但它是硬件安全case的地基。地基如果歪了上面盖的房子再漂亮也住不了人。另外一个容易忽视的点是安全机制本身的失效率也要算进去。你加了一个电压监控芯片来检测主芯片的电源故障但这个监控芯片自己也有失效率它的失效会导致诊断功能丢失。ISO 26262要求把“安全机制失效”的影响也纳入量化分析。很多FMEDA软件可以自动把这个算进去但如果你用Excel自己算这块经常被漏掉。4.4 文档和证据的“事后补建”与留痕问题功能安全工作里面最有挑战性的事情之一是它天然倾向于“事后补建”。很多团队的习惯是开发的时候先不按功能安全流程走等到要交付审核了再集中补文档把设计记录倒推出来。这种做法在行业里有一个不太好听但很真实的名字——考古。考古出来的功能安全文档有一个致命弱点经不起追问。审核员随便问你一个变更为什么是这样你翻半天找不出依据因为当时没记录。ISO 26262真正要求的是在开发过程中同步产生记录通过配置管理把需求和设计的演进过程留存下来。这就要求团队在流程上做调整——从研发的立项开始就要在工具链中建立需求条目、建立安全档案、用版本控制管理每一次变更。我自己有一个习惯在项目启动的时候就跟项目经理把“安全档案边界”画清楚。哪些工作产品属于功能安全档案需要接受配置管理和变更控制哪些技术决策需要会议纪要来留证据哪些验证活动的记录要保存多久。这些事情越早定项目后期越省事。否则到了整车型式认证或者SOP前的安全评审你会被成千上万条待补的记录淹没。5. 组织能力对ASIL落地的隐性影响这个点很多人没意识到说来有点反直觉功能安全最大的瓶颈未必是技术难度而是组织能力。做ISO 26262项目跟做普通项目最大的区别在于它对协作的纪律性要求非常高。5.1 功能安全工程师不是“写文档的”而是“风险翻译官”很多公司在招功能安全工程师的时候招聘JD上写着“负责编写功能安全文档”“跟踪功能安全活动”。这种定位从一开始就错了。一个合格的功能安全工程师真正做的事情是跟系统架构师吵架——吵这个架构冗余够不够跟硬件工程师争论——争这个失效模式的诊断覆盖率数据来源是否可靠跟项目经理谈判——谈哪个功能的安全验证周期不够需要加时间。安全工程师不是文档生产机器而是组织里的风险翻译官。他要把从概念阶段定义的风险翻译成架构层面的方案、硬件层面的指标、软件层面的机制、测试层面的用例。如果团队里安全工程师被当成写手来用那么整个项目的功能安全一定做不深。5.2 安全文化的构建比流程工具更重要最后我想聊一个稍微虚一点但非常根本的话题安全文化。功能安全做得好不好最终会体现在每个人做决策时的优先级上。一个做软件的工程师在写代码的时候发现可以给诊断模块加一个边界检查但会让自己的接口复杂度变高工期多两天——他会不会主动说这件事一个做测试的工程师跑完了安全测试用例发现有一个输入组合没有覆盖到但用例已经完成95%了他会选择补上还是直接报完成安全文化好的团队这些问题的答案都是前者。安全文化差的团队无论你把流程设计得多完善总会有人找到绕过流程的捷径。这个观点在我跟不少同行的交流中都得到过印证——功能安全到了最后拼的不是工具和流程而是整个团队对“安全”这件事的信仰和习惯。6. 常见问题速查与个人经验总结这部分把我在项目中实际遇到的、有代表性的问题做成一个速查列表适合放在手边项目不同阶段翻出来对照一下。问题我的处理思路关键避坑点安全目标定的ASIL等级过高/过低回到场景分析逐条检查S/E/C的取值依据严重度评估要结合真实碰撞场景不可纯理论假设分解后的安全需求没有独立性的证据在架构设计阶段就梳理共享资源清单建立隔离机制通信链路和电源是最大风险点优先排查硬件失效率数据来源不透明统一引用标准数据源每个器件标注引用编号和计算条件不要用“工程经验值”代替数据源审核时会翻车软件诊断覆盖率怎么定义才合理结合安全机制设计和故障注入测试结果反推覆盖率诊断覆盖率不是越高越好要兼顾误报率和成本工具证书过期的厂商要不要换看证书适用范围和项目需求匹配程度匹配度不够就得换不要只看证书logo要看认证范围cover不cover你的用法安全文档晚于开发活动生成在项目启动时定义好安全档案边界和评审节点事后补文档的效率极低且质量无法保证MBD建模工具生成的代码要不要单独测要尤其是模型到代码的转换工具本身的置信度要评估工具认证有效但集成测试不能省芯片本身没有功能安全等级证书优先选带FMEDA和安全手册的芯片没有这些基础的器件硬要用审核必然卡关我个人在实际操作中的体会是功能安全项目能不能做顺很多时候取决于第一个概念阶段的会议开得质量高不高。那个会上如果能把安全目标写清楚、把场景边界划清楚、把三个维度的评级依据讨论透后面所有部门的工作都会轻松非常多。而如果概念阶段草草了事后面每一个环节都会被反复拉扯。最后再分享一个小技巧是你做安全分析会经常用到但容易被忽略的把所有安全假设集中管理。我说的不仅仅是文档而是建一个专门的、唯一的“安全假设登记册”。每一条安全目标依赖的假设——比如“驾驶员能在2秒内接管”“系统在外部温度低于-40度时不上电”——都要编号、存档、并在后续所有设计活动里引用。这么做的好处是当项目后期某个假设被推翻的时候(这是经常发生的事比如客户提出了新的使用场景)你只需要在登记册里改一条记录然后去查所有关联的设计和验证活动而不是在几十份文档里翻来翻去。安全假设是有生命周期的它们不只是写在文档里的静态文字而是所有技术决策的起点。把这个起点管理好整个安全case就像一棵根系扎实的树任你上面怎么长它都不会倒。
返回列表