想象你是学校的安全主管,校车每天接送几百个孩子。你手里有一本《校车安全运营手册》:司机必须持证、车辆按里程保养、雨雪天限速、每年组织逃生演练。这本手册不是凭空编的,而是几十年事故教训换来的行业共识。现在把“校车”换成自动驾驶汽车,“孩子”换成路上的每一个生命——这本手册就是 ISO 26262。它是国际标准化组织为汽车电子电气系统制定的功能安全标准,覆盖从概念设计到量产退役的完整生命周期。它不要求系统“永不故障”,而是要求“即使在故障中,也不能伤到人”。对于想进自动驾驶行业的 AI 从业者来说,ISO 26262 是绕不开的必修课:你训练的感知模型再准确,如果没有安全论证,它永远无法上车。

岗位关联

学习 ISO 26262 是 AI 从业者进入自动驾驶量产的通行证——没有这张“校车合格证”,你的算法再强也上不了路。

目录
  1. 可视化演示
  2. 标准概览:一本给汽车写的“校车安全手册”
  3. 危害分析HARA:出发前的路线勘察
  4. ASIL等级确定:给风险盖“红黄绿章”
  5. 安全机制:给校车装上“安全带+气囊+安全员”
  6. 量化验证:碰撞测试说了算
  7. 文档体系:用证据链自证清白
  8. 合规实施:让安全流程“长”进研发体系
  9. 工程价值:安全合规是量产“入场券”
  10. AI 应用场景
  11. Python 演示
  12. 常见误区
  13. 面试题

可视化演示

演示ISO 26262安全生命周期、HARA危害分析与ASIL等级确定、安全机制量化验证三大环节,直观展示自动驾驶域控制器的安全合规实现。

本节配有交互动效(进入视口后自动加载,约 3KB)。

安全生命周期 概念-开发-生产 ISO 26262 全生命周期管理安全相关功能

标准概览:一本给汽车写的“校车安全手册”

假设你是学校的校长,校车每天接送孩子。你手里有一本《校车安全运营手册》,它规定了司机持证、车辆检修、雨雪限速、逃生演练,甚至规定了校车的颜色和灯。这套手册不是某个人拍脑袋定的,而是几十年事故教训、行业经验凝结的行规。对自动驾驶行业来说,这本“行规”就是 ISO 26262。

ISO 26262 的正式名称是《道路车辆—功能安全》,专门针对汽车电子电气系统。这里的“功能安全”有严格定义:系统在发生故障时不能伤害到人。注意,它不要求系统“永不故障”,而是要求“故障了也别伤人”——就像手册不保证校车永不抛锚,但保证抛锚后孩子有安全带护着、司机按流程处置。标准的源头是工业领域的安全标准 IEC 61508,汽车行业把它裁剪定制,2011 年发布第一版,2018 年发布第二版。它定义了一个完整的安全生命周期:概念阶段约定“什么情况算风险”,产品开发阶段把安全需求落到系统、硬件、软件,生产运行阶段跟踪量产和售后,最后还有退役要求。

就像校车手册开篇先教你“判断这条路线有多危险”,ISO 26262 也是先教你看清“风险由什么构成”,后面的所有章节,都是围绕这个风险公式展开的行动细则。

Risk=g(S,E,C)\text{Risk} = g(S, E, C)
风险不是单一原因造成的,而是三个维度叠加的产物。最终的安全等级,由这一函数查表获得。
  1. S(Severity)严重度万一事故发生,伤害有多重?从无伤到致命共四档。
    S∈{0,1,2,3}S \in \{0, 1, 2, 3\}
  2. E(Exposure)暴露度人员“遇到这个危险场景”的频率有多高。
    E∈{0,1,2,3,4}E \in \{0, 1, 2, 3, 4\}
  3. C(Controllability)可控度事故苗头出现后,驾驶员或系统能控制到什么程度。
    C∈{0,1,2,3}C \in \{0, 1, 2, 3\}
  4. 映射函数g三个参数带入标准表格,输出目标等级。
    g(S,E,C)∈{QM,ASIL A,ASIL B,ASIL C,ASIL D}g(S, E, C) \in \{\text{QM}, \text{ASIL A}, \text{ASIL B}, \text{ASIL C}, \text{ASIL D}\}

危害分析HARA:出发前的路线勘察

校车出发前,老司机不会直接踩油门。他会在脑子里过一遍路线:哪个路口没有红绿灯、哪个桥洞下大雨会积水、学校门口哪个时段家长乱停车。把这些“危险点”一个个标出来,就是危害分析的雏形。

在功能安全里,这个勘察过程叫 HARA——危害分析与风险评估(Hazard Analysis and Risk Assessment)。它是安全生命周期的第一大步:把系统可能出现的“坏情况”找出来,逐条量化,产出安全需求。HARA 回答三个问题:什么情况下会出事?出的事有多严重?能控制住吗?具体执行时分三步:先定义目标项目(比如“自动驾驶域控器的自动紧急制动功能”),再枚举运行场景和失效模式——高速跟车、十字路口、暴雨、隧道、传感器故障——然后把“场景×失效”组合成“危害事件”。

老司机在脑海中把“桥洞积水”和“雨天路况”组合成危险画面,HARA 本质上就是系统化地做这种“更换场景推演一遍”的思维训练,确保每个隐患都被看见,而不是靠运气想到。

危害事件=(失效模式,运行场景)→评估(S,E,C)\text{危害事件} = (\text{失效模式}, \text{运行场景}) \xrightarrow{\text{评估}} (S, E, C)
一句话:把“什么坏了”和“在哪儿坏”组合起来,评估后果,这就是 HARA 的核心。
  1. 失效模式系统某部件没能完成预期功能,例如刹车无响应、感知漏报。
    失效模式∈{漏报,误报,延迟,失去供电}\text{失效模式} \in \{\text{漏报}, \text{误报}, \text{延迟}, \text{失去供电}\}
  2. 运行场景危害发生的环境上下文,包括道路类型、天气、车速、交通流。
    场景=(道路,天气,车速,交通密度)\text{场景} = (\text{道路}, \text{天气}, \text{车速}, \text{交通密度})
  3. 组合配对把失效模式和场景交叉组合,得到危害事件集合。
    危害事件=Hi,j=(Fi,Scj)\text{危害事件} = H_{i,j} = (F_i, Sc_j)
  4. 量化评估每个危害事件评出 S、E、C 三个数。
    Hi,j↦(Si,j,Ei,j,Ci,j)H_{i,j} \mapsto (S_{i,j}, E_{i,j}, C_{i,j})

ASIL等级确定:给风险盖“红黄绿章”

线路勘察完,校长要找运输公司签约。公司派来三种司机:普通司机、经过山路培训的司机、开过十年长途的资深司机。对不同的路线,需要匹配不同资质的司机——这就好比给风险盖等级章。

HARA 分析后,每个危害事件都会拿到一个等级章:QM(质量管理级)表示风险低到无需额外安全措施;ASIL A 到 ASIL D 安全要求逐级递增。章怎么盖?ISO 26262 给了映射表,输入 S、E、C 三个数,输出 ASIL 等级。例如 S3(致命)、E4(经常出现)、C3(几乎不可控),得到 ASIL D——最严苛的等级。等级越高,对安全机制的要求越严格:ASIL D 要求单点故障度量 99% 以上,ASIL B 只要求 90% 以上。但一个系统承担的高等级功能过多,开发成本会爆炸,于是标准允许“ASIL 分解”:把 D 级需求拆到两条独立通道上,一条承担 ASIL C(D),另一条承担 ASIL B(D),两路独立实现,组合起来仍满足 D 级目标。

责任重大的“护送任务”一个人扛不住,就派两个小队分段护送、各自规划路线,全程反而更安全——这就是 ASIL 分解的智慧。

ASIL D→ASIL C(D)+ASIL B(D)\text{ASIL D} \rightarrow \text{ASIL C}(D) + \text{ASIL B}(D)
分解不是降标,而是把一个大责任拆给两个“背靠背”的小组扛,两组独立完成,整体依然达标。
  1. 原始目标D某个安全需求经评估必须达到 ASIL D。
    系统需求等级=ASIL D\text{系统需求等级} = \text{ASIL D}
  2. 拆分到两路需求分解到两条独立实现的架构通道。
    通道1:ASIL C(D),通道2:ASIL B(D)\text{通道}_1: \text{ASIL C}(D), \quad \text{通道}_2: \text{ASIL B}(D)
  3. 独立性验证两通道不能存在共因失效,必须做共因失效分析。
    CCF分析:独立性要求≥既定准则\text{CCF分析}: \text{独立性要求} \geq \text{既定准则}
  4. 整体等效每条通道自身等级低于 D,但组合后安全完整性达到 D。
    组合完整性⊨ASIL D\text{组合完整性} \models \text{ASIL D}

安全机制:给校车装上“安全带+气囊+安全员”

风险分级后就要做防护。校车上的安全带、灭火器、逃生锤,还有随车安全员,都是为了“万一出事,人没事”。在自动驾驶系统里,这些东西叫“安全机制”。

安全机制的核心目标不是阻止故障发生(那是可靠性工程),而是“故障发生后把伤害降到最低”。标准要求每个安全目标都要有对应的安全机制,通常分三类:检测型(发现故障)、缓解型(降低影响)、避免型(防止故障)。一个典型机制是“看门狗+心跳”:主处理器每隔几十毫秒发心跳信号,看门狗没收到就判定主核异常,触发降级流程。为了量化安全机制的覆盖比例,标准定义了单点故障度量(SPFM):“单点故障”指一个元件坏了就会让整个安全目标失效、且没有后备的故障,SPFM 计算这类故障中被安全机制覆盖的比例。

安全带(检测)、安全气囊(缓解)、随车安全员(避免)各司其职,SPFM 就是量化“这三种装备加起来能护住多少比例的事故”——99% 意味着每 100 次单点险情,99 次都在伤到人之前被化解了。

SPFM=1−∑λ单点故障∑λ单点故障+∑λ安全故障\text{SPFM} = 1 - \frac{\sum \lambda_{\text{单点故障}}}{\sum \lambda_{\text{单点故障}} + \sum \lambda_{\text{安全故障}}}
SPFM 越接近 1,代表“单个元件坏了直接被兜住”的能力越强。ASIL D 要求这个值不低于 99%。
  1. λ(Lambda)失效率单位时间内故障发生的概率,用 FIT 计量(每 10 亿小时故障次数)。
    λ=故障数运行时间,1 FIT=1109 小时\lambda = \frac{\text{故障数}}{\text{运行时间}}, \quad 1\ \text{FIT} = \frac{1}{10^9\ \text{小时}}
  2. 单点故障λ_SPF没有安全机制覆盖、坏一个就全盘皆输的故障率。
    λSPF=λ危险失效−λ被检测覆盖\lambda_{\text{SPF}} = \lambda_{\text{危险失效}} - \lambda_{\text{被检测覆盖}}
  3. 安全故障λ_safe故障发生但不影响系统安全的场景,例如冗余原件失效但主件正常。
    λsafe=不可起危害的故障率\lambda_{\text{safe}} = \text{不可起危害的故障率}
  4. SPFM比例计算1 减去未被覆盖单点故障在全部故障中的占比。
    SPFM=1−λSPFλSPF+λsafe\text{SPFM} = 1 - \frac{\lambda_{\text{SPF}}}{\lambda_{\text{SPF}} + \lambda_{\text{safe}}}

量化验证:碰撞测试说了算

校车厂说“我们的车很安全”,校长不会听信口号,他要看碰撞测试报告:正面撞、侧面撞、翻滚测试,每一项都有数据。功能安全也一样,光说“设计了机制”不够,必须用量化方法证明“风险被压到了规定水平”。

量化验证的核心是残余风险计算:系统本质上存在失效率(λ_hazard),安全机制能覆盖一部分(诊断覆盖率 DC),没被覆盖的那部分就是残余风险,目标是把残余风险压到标准规定的阈值以下。诊断覆盖率是安全机制“抓住故障”的能力,覆盖 90% 意味着每 100 个故障能发现 90 个。验证手段主要有三类:故障注入测试(向系统注入传感器失效、总线中断等故障,观察响应时间)、FMEDA 分析(从元件层统计失效率算出 SPFM/LFM)、硬件在环测试(把真实控制器接上仿真环境验证安全行为)。

校车碰撞测试报告写“时速 50 公里正面碰撞,乘员舱完好”,对应数字就是碰撞覆盖率。工程师做故障注入,本质上就是给自动驾驶的“安全带”做一次次模拟碰撞,用数据说服审核方:这辆车,真的稳。

RR=λhazard×(1−DC)\text{RR} = \lambda_{\text{hazard}} \times (1 - \text{DC})
残余风险等于“原始危险失效率”乘以“安全机制没盖住的比例”。诊断覆盖率越高,残留风险越小。
  1. 危险失效率λ_hazard系统在没有保护时的危险故障率,例如每 10 亿小时发生 10 次。
    λhazard=10 FIT\lambda_{\text{hazard}} = 10\ \text{FIT}
  2. 诊断覆盖率DC安全机制能检测或控制的故障比例,取值 0 到 1。
    DC=0.9\text{DC} = 0.9
  3. 漏网比例1-DC安全机制没能覆盖的那部分故障。
    1−0.9=0.11 - 0.9 = 0.1
  4. 相乘得残余风险漏下来的故障率就是残余风险。
    RR=10×0.1=1 FIT\text{RR} = 10 \times 0.1 = 1\ \text{FIT}

文档体系:用证据链自证清白

校车运营最怕什么?出事后的责任说不清。所以手册要求每辆校车留下行车日志、维修记录、司机培训签到表。这些文件平时没人看,但一旦出了事故,它们就是证明“我们已经尽了安全义务”的证据链。

ISO 26262 对文档的苛刻程度,常让新工程师震撼。标准要求每个安全活动都有“可追溯的产出物”:安全目标从哪里来?需求怎么分解?设计怎么实现?测试怎么覆盖?每一层都必须有文档承接且互相能追踪。这些文档汇总成一份“安全案例”(Safety Case)——对整个系统安全性做出论证的档案集。其中最核心的是需求追踪矩阵(RTM):从顶层安全目标往下追踪到系统需求、软硬件需求、测试用例和验证结果,每一行都能回答“这条需求被谁实现、被谁测试”。评审与审计记录则是过程证据:有签字、有结论、有遗留问题跟踪。ASIL 等级越高,文档严格度越高,ASIL D 甚至要求独立评审员做评审。

校车的行车日志不是给校长看的表演,而是“事故调查时我拿得出白纸黑字”的底气。安全案例就是给每一辆自动驾驶汽车在上路前的自证清白。

Θ=∑i=1nwi⋅θi∑i=1nwi\Theta = \frac{\sum_{i=1}^{n} w_i \cdot \theta_i}{\sum_{i=1}^{n} w_i}
综合安全置信度是每条证据可靠度的加权平均:证据越可靠、权重越大,整体安全可信度越高。
  1. 每条证据的可靠度θ_i一次测试通过、一次评审无遗漏,构成一条证据,可靠度在 0 到 1 之间。
    θi∈[0,1]\theta_i \in [0, 1]
  2. 证据权重w_i关键验证(如故障注入测试)权重大,一般检查项权重小。
    wi=该证据对安全论证的重要程度w_i = \text{该证据对安全论证的重要程度}
  3. 加权平均融合把所有证据按权重融合成一个综合安全置信度。
    Θ=∑i=1nwiθi∑i=1nwi\Theta = \frac{\sum_{i=1}^{n} w_i \theta_i}{\sum_{i=1}^{n} w_i}
  4. 证据持续累积每多一轮测试、多一份评审通过,Θ 就上升,直到越过认证门槛。
    Θ→补充证据趋近1\Theta \xrightarrow{\text{补充证据}} \text{趋近1}

合规实施:让安全流程“长”进研发体系

校车手册再好,如果司机不知道、修理工不照做、校长不检查,它就是废纸。所以手册规定了谁来培训、谁来保养、谁来抽检。ISO 26262 也一样,它真正难的不是技术,而是把安全流程嵌进研发流程,让每个工程师的日常工作里都有安全动作。

ISO 26262 要求安全活动与研发活动并行,通常落地在 V 模型上:左侧是需求分解和设计,右侧是测试验证,安全活动贯穿两侧。项目计划阶段就要制定安全计划(Safety Plan),定义安全活动的时间表、责任人、交付物;每进入下一阶段前要过评审门,不通过不往前走。合规实施中两个常见的落地点:一是工具链认证——开发中用的编译器、自动代码生成工具、测试工具都要评估“置信等级”(TCL)。如果编译器本身有 bug,用它生成的安全代码就不可信,所以高 ASIL 项目要对工具做认证或增加额外验证。二是供应链管理——OEM、Tier1、Tier2 之间做安全需求“左移传递”,上游把安全需求和档案传给下游,下游按约定实现并回传验证结果。

校车保养用的扭矩扳手没校准,拧紧的螺丝就可能松动,所以手册规定扳手必须定期送检。流程嵌得越深,“安全习惯”就不再是额外负担,而是像开车、保养一样自然的动作。

TCL=h(Dtool,Utool)TCL = h(D_{\text{tool}}, U_{\text{tool}})
工具置信等级由“工具本身的开发质量”和“工具被用在哪个安全等级”共同决定,必要时为工具加“安全壳”。
  1. 工具开发严格度D_tool工具诞生时是否按安全流程开发,用 0 到 3 打分。
    Dtool∈{0,1,2,3}D_{\text{tool}} \in \{0, 1, 2, 3\}
  2. 工具使用范围U_tool工具被用于需求、设计、验证还是部署环节,用于越高安全等级,风险越大。
    Utool⊆{需求,设计,验证,部署}U_{\text{tool}} \subseteq \{\text{需求}, \text{设计}, \text{验证}, \text{部署}\}
  3. 组合查表两个输入映射到工具置信等级 TCL1 到 TCL3。
    h(Dtool,Utool)=TCL∈{1,2,3}h(D_{\text{tool}}, U_{\text{tool}}) = \text{TCL} \in \{1, 2, 3\}
  4. 弥补措施TCL 不足时,对工具输出增加独立验证环节。
    TCL<3⇒工具输出的独立确认活动\text{TCL} < 3 \Rightarrow \text{工具输出的独立确认活动}

工程价值:安全合规是量产“入场券”

校长选校车,第一问不是“空间大不大、座椅舒不舒适”,而是“有没有通过国家校车安全标准”。没有这张合格证,车再好看也不能接送孩子。对自动驾驶而言,ISO 26262 合规就是量产上路的合格证。

在中国、欧洲等地,高级别自动驾驶量产车型都要求提供功能安全合规证据。主机厂对供应商的准入清单里,“ISO 26262 能力”是硬门槛——没有它,你的感知算法再好、demo 跑得再炫,都无法进入量产车型的物料清单。功能安全证据还关乎责任划分:一旦发生事故,安全案例和追踪矩阵能证明“按行业最佳实践履行了义务”,直接决定法律责任的轻重。从投入产出看,一次涉及安全缺陷的召回平均成本达数亿元,合规投入只是零头;功能安全带来的严谨流程还会提升产品成熟度——更早发现需求漏洞、更系统的测试覆盖、更完整的问题追溯,降低后期返工成本。

校车每年安全投入不过几十万,但一次重大事故对学校的打击可能是声誉毁灭性的。安全合规不是花钱,而是给事业买保险——自动驾驶的赛道很长,有这张合格证,才能跑得既快又稳。

ROI安全=C召回⋅P事故+C责任+L品牌C合规\text{ROI}_{\text{安全}} = \frac{C_{\text{召回}} \cdot P_{\text{事故}} + C_{\text{责任}} + L_{\text{品牌}}}{C_{\text{合规}}}
安全合规的回报率 = 避免了的事故损失、责任赔偿和品牌损失 / 合规成本。分母有限,分子上限极高。
  1. 召回成本C_recall批量缺陷导致全量召回的总花费。
    C召回=单车维修成本×召回车辆数C_{\text{召回}} = \text{单车维修成本} \times \text{召回车辆数}
  2. 事故概率P_accident没有安全机制时导致伤害事故的年化概率。
    P事故=λhazard×t运行×(1−DC)P_{\text{事故}} = \lambda_{\text{hazard}} \times t_{\text{运行}} \times (1-\text{DC})
  3. 责任与品牌损失诉讼赔偿和品牌信任度下降带来的长期损失。
    C责任+L品牌=法律赔付+市场份额损失C_{\text{责任}} + L_{\text{品牌}} = \text{法律赔付} + \text{市场份额损失}
  4. 合规成本C_合规安全团队、工具链、测试平台、流程投入的总和。
    C合规=人力+工具+测试平台摊销C_{\text{合规}} = \text{人力} + \text{工具} + \text{测试平台摊销}

AI 应用场景

场景一:自动驾驶域控制器的HARA分析

阶段:安全需求定义(V模型左侧)

解决的问题:域控制器集成感知、决策、执行上百个功能,每个功能的失效场景如何系统梳理?传统靠专家经验逐条列举,容易遗漏边缘场景。AI 结合 HARA 方法,用驾驶数据统计暴露度 E,用自然语言处理挖掘事故库中的失效模式,让危害分析更快更全。

具体案例:某自动驾驶公司为高速 NOA 功能列出 37 个危害事件,识别出“雨夜传感器遮挡”为 S3E4C3 → ASIL D,为感知模块设定了强制降级策略:摄像头置信度低于阈值时 200ms 内提示接管。

场景二:故障注入验证AI感知模型

阶段:安全验证与确认

解决的问题:AI 模型是黑盒,很难证明“在故障下不会伤到人”。传统只在仿真里测精度,ISO 26262 要求针对安全机制的故障注入验证。

具体案例:对感知模型注入相机图像噪声(模拟传感器老化)、GPU 算力降级(模拟芯片故障),验证系统能否在 200ms 内触发最小风险策略(靠边停车),并统计诊断覆盖率 DC 是否达到 ASIL 等级要求。

场景三:功能安全文档自动化生成

阶段:合规文档管理

解决的问题:安全生命周期每个阶段都要产出大量文档,手工编写耗时且易遗漏追踪关系。AI 从需求库和测试库中自动提取实体关系,生成需求追踪矩阵和评审摘要。

具体案例:某 Tier1 供应商用自然语言处理提取需求库中的安全需求 ID,自动关联到测试用例,生成覆盖率报告,将文档准备时间缩短 60%,并通过了客户的安全审计。

Python 演示

python65 行
# -*- coding: utf-8 -*-# HARA危害分析与ASIL计算工具 (教学简化版)# 输入场景的S/E/C三要素, 输出ASIL等级 ASIL_MAP = {    (1, 1, 1): "QM", (1, 1, 2): "QM", (1, 1, 3): "A",    (1, 2, 1): "QM", (1, 2, 2): "QM", (1, 2, 3): "B",    (1, 3, 1): "A",  (1, 3, 2): "A",  (1, 3, 3): "B",    (1, 4, 1): "A",  (1, 4, 2): "B",  (1, 4, 3): "C",    (2, 1, 1): "QM", (2, 1, 2): "QM", (2, 1, 3): "A",    (2, 2, 1): "QM", (2, 2, 2): "A",  (2, 2, 3): "B",    (2, 3, 1): "A",  (2, 3, 2): "B",  (2, 3, 3): "C",    (2, 4, 1): "B",  (2, 4, 2): "C",  (2, 4, 3): "D",    (3, 1, 1): "A",  (3, 1, 2): "A",  (3, 1, 3): "B",    (3, 2, 1): "A",  (3, 2, 2): "B",  (3, 2, 3): "C",    (3, 3, 1): "B",  (3, 3, 2): "C",  (3, 3, 3): "D",    (3, 4, 1): "C",  (3, 4, 2): "D",  (3, 4, 3): "D",} def get_asil(item):    """根据S/E/C三参数查表确定ASIL等级"""    key = (item["severity"], item["exposure"], item["controllability"])    if key in ASIL_MAP:        return ASIL_MAP[key]    # 未收录的组合采用保守回退策略    if item["severity"] >= 2 and item["exposure"] >= 3:        return "D"    if item["severity"] >= 2 or item["exposure"] >= 3:        return "C"    return "B" def asil_decompose(level):    """ASIL分解示例: D -> C(D) + B(D)"""    pairs = {"D": ("C(D)", "B(D)"), "C": ("B(C)", "A(C)"),             "B": ("A(B)", "QM(B)")}    return pairs.get(level, ("不拆分", level)) def hara_report(hazards):    """生成HARA分析CSV报告"""    lines = ["Scenario,Severity,Exposure,Controllability,ASIL"]    for hz in hazards:        asil = get_asil(hz)        lines.append("%s,%d,%d,%d,%s" % (            hz["name"], hz["severity"], hz["exposure"],            hz["controllability"], asil))    return "\n".join(lines) def main():    hazards = [        {"name": "高速刹车失灵", "severity": 3,         "exposure": 4, "controllability": 3},        {"name": "低速碰撞护栏", "severity": 2,         "exposure": 3, "controllability": 2},        {"name": "停车溜车", "severity": 1,         "exposure": 3, "controllability": 1},        {"name": "暴雨并线碰撞", "severity": 2,         "exposure": 4, "controllability": 3},    ]    print(hara_report(hazards))    print()    print("ASIL D 分解: " + str(asil_decompose("D")))    print("ASIL C 分解: " + str(asil_decompose("C"))) if __name__ == "__main__":    main()
目的:用查表法模拟 ISO 26262 中 HARA 的核心步骤——根据严重度、暴露度、可控度三要素确定每个危害事件的 ASIL 等级,并演示 ASIL 分解能力,是功能安全工程师日常工作的简化版。
  1. ASIL_MAP把 ISO 26262 标准的 S/E/C → ASIL 映射表翻译成 Python 字典
  2. key = (item["severity"], item["exposure"], item["controllability"])从场景描述中提取三要素并组成元组键
  3. if key in ASIL_MAP:优先查表,保证与标准一致
  4. if item["severity"] >= 2 and item["exposure"] >= 3:遇到表外组合时保守回退到较高等级
  5. pairs = {"D": ("C(D)", "B(D)"), ...}ASIL 分解规则表,对应正文的分解策略
  6. lines.append("%s,%d,%d,%d,%s" % (...))把每条危害事件格式化拼成 CSV 行
  7. print(hara_report(hazards))输出完整报告,模拟安全评审时的交付物

常见误区

误区刚开始接触 ISO 26262 时,我以为它就是一堆代码规范,比如变量命名、注释要求、代码风格。等我看到标准里全是“生命周期”“评审”这类词,心想这跟产品经理的工作有什么区别?

正解标准覆盖系统、硬件、软件全栈,核心是危害分析与风险控制。打个比方,校车手册不只是“驾驶员行为守则”,还包括车辆维修标准、逃生路线图、家长沟通流程——代码规范只是软件层面的一小块。真正的重点在于:安全需求如何分解、如何验证、如何证明。

为何常见:标准正文大量篇幅谈开发流程和文档,初学者只看文字表面,忽略了背后的安全意图——以为“把代码写规范”就是功能安全。

误区我做安全设计时恨不得把所有功能都定为 ASIL D,想着“最高等级最保险,这样肯定能过审核”。

正解ASIL 是对场景风险的评级,不是系统性能指标。低风险场景上高等级机制会浪费算力与成本,增加系统复杂度,反而引入新的失效模式。就像不能给校车的每段路都配装甲车队,该低速慢行就慢行,该上高速才上装甲。风险适配才是功能安全的设计哲学。

为何常见:把 ASIL 误解为“安全徽章”,总想越高级越好——根源是对“风险导向”这一核心理念不熟悉,把它当成了评优评先。

误区我一直以为实现功能安全就是要让系统无限可靠、永不故障,所以把所有精力都花在提升组件质量上,比如选更贵的芯片、做更严的硬件测试。

正解功能安全不要求永不故障,那叫可靠性工程。它要求的是“故障时进入安全状态,不伤及人”。安全带不是防止车撞,是撞了之后保护你。可靠性追求“坏不了”,功能安全追求“坏了也能兜住”——两者的目标、方法、指标都不同。

为何常见:中文里“安全”和“可靠”日常混用,工程上却是两个维度,新手很容易把精力投错方向。

误区做功能安全项目时,我觉得写文档纯粹为了应付审核,反正评审官也不会认真看,所以都是最后几天突击补材料。

正解文档是安全证据链,是事后“证明我已尽责”的法律依据,也是发现问题、改进流程的抓手。校车行车日志不是为了应付检查,而是事故后证明司机按规程开。缺了文档,哪怕你的系统真的安全,也无法向监管方、主机厂、保险公司证明——没有证据的安全等于不安全。

为何常见:国内交付文化中“形式合规”的惯性,让新手把文档视为负担而非资产,忽略了 ISO 26262 文档体系的工程价值。

面试题

Q1. ISO 26262 的直接前身标准是哪一个?

单选题 · easy

  • A.IEC 61508← 正确答案
  • B.ISO 9001
  • C.ISO/SAE 21434
  • D.ISO 13849

答案:A。ISO 26262 是 IEC 61508(工业功能安全通用标准)在道路车辆行业的定制裁剪。ISO 9001 是质量管理体系,ISO/SAE 21434 是汽车网络安全,ISO 13849 是机械安全标准。就像校车手册脱胎于通用交通安全法规,ISO 26262 也源自工业安全母标准。

Q2. “功能安全”的核心含义是什么?

单选题 · easy

  • A.系统功能永不失效
  • B.系统故障时不伤及人员← 正确答案
  • C.系统运行速度更快
  • D.系统免受网络攻击

答案:B。功能安全关注的是“故障后的安全性”,而不是“永不故障”。安全带不是保证不撞车,而是撞车后保护人。A 讲的是可靠性,C 是性能,D 是网络安全(对应 ISO/SAE 21434),都不是功能安全的定义。

Q3. ASIL 等级从低到高的正确顺序是?

单选题 · easy

  • A.A → B → C → D← 正确答案
  • B.D → C → B → A
  • C.QM → D → C → B → A
  • D.A → C → B → D

答案:A。ASIL 有 A、B、C、D 四个递进等级,D 要求最严苛。QM 是低于 ASIL A 的质量管理级,不算 ASIL 等级。选项 C 的排序完全颠倒,D 的排列在工程上不存在。等级越高,安全机制要求越严,对应校车配备的防护级别越高。

Q4. HARA 分析中“暴露度 E”评估的是什么?

单选题 · mid

  • A.系统暴露在电磁干扰中的程度
  • B.危险运行场景出现的概率← 正确答案
  • C.驾驶员暴露在事故中的程度
  • D.传感器暴露在恶劣天气中的程度

答案:B。暴露度 E 指人员处于危险场景的时间占比,例如“高速行驶”每天都会遇到就高,“儿童突然横穿马路”概率低就低。它衡量的不是电磁、天气等环境因素,而是“这个危险场景本身多久出现一次”,类似校车路线经过事故黑路段的频率。

Q5. 某个危害事件评为 S3、E4、C3,查表对应的 ASIL 等级是?

单选题 · mid

  • A.ASIL A
  • B.ASIL B
  • C.ASIL C
  • D.ASIL D← 正确答案

答案:D。查 ISO 26262 的 ASIL 映射表,S3(致命)、E4(经常)、C3(几乎不可控)三个高风险值的组合对应 ASIL D,即最高等级。这相当于校车路线同时满足“山路悬崖+暴雨+司机新手”,必须上最严苛的安全防护。

Q6. 关于 ASIL D 需求的分解,以下哪些做法是合规的?

多选题 · mid

  • A.ASIL C(D) + ASIL B(D)← 正确答案
  • B.ASIL A(D) + ASIL A(D)
  • C.ASIL B(D) + ASIL B(D)
  • D.保持 ASIL D 不拆分← 正确答案

答案:AD。ASIL D 可以原样实现不分解,也可以按标准分解为一条 C 级加一条 B 级的独立通道。两个 A 或两个 B 组合的完整性不足以覆盖 D 级目标,就像两个新手司机分段护送,加起来也顶不上一个老司机,标准要求分解后组合仍需满足原等级。

Q7. 危险失效率 λ=100 FIT,诊断覆盖率 DC=90%,残余风险 RR 是多少?

单选题 · hard

  • A.90 FIT
  • B.10 FIT← 正确答案
  • C.100 FIT
  • D.81 FIT

答案:B。残余风险公式 RR = λ × (1−DC) = 100 × (1−0.9) = 10 FIT。A 把覆盖率当成了残余风险,C 忽略了安全机制的作用,D 是误算。这个公式对应“安全机制兜住了九成故障,剩下一成才是真正需要警惕的”。

Q8. 以下哪些是 ISO 26262 文档体系要求的内容?

多选题 · hard

  • A.安全案例← 正确答案
  • B.需求追踪矩阵← 正确答案
  • C.代码注释
  • D.评审与审计报告← 正确答案

答案:ABD。标准明确要求安全案例、需求追踪矩阵、评审审计记录等文档,它们构成完整证据链。代码注释是良好编程实践,但不是 ISO 26262 的强制文档项。就像校车档案必须包含行车日志和维修记录,但不需要记录司机每句话。

Q9. SPFM(单点故障度量)衡量的是什么?

单选题 · mid

  • A.系统内安全故障所占的比例
  • B.安全机制覆盖的单点故障比例← 正确答案
  • C.系统的可用性水平
  • D.系统的维修频率

答案:B。SPFM 度量的是“单点故障中被安全机制检测或控制的比例”,ASIL D 要求不低于 99%。它刻画的是安全机制的兜底能力,而非系统可用性。好比校车安全带要能覆盖 99% 的碰撞场景,而不是统计车每年修几次。

Q10. 以下哪些属于 ISO 26262 定义的安全生命周期阶段?

多选题 · easy

  • A.概念阶段← 正确答案
  • B.产品开发← 正确答案
  • C.生产运行← 正确答案
  • D.市场营销

答案:ABC。安全生命周期包括概念阶段、产品开发阶段、生产运行阶段和退役阶段。市场营销不属于标准定义的阶段。整个生命周期像校车从采购选型、日常运营到报废的全过程管理,每个环节都有对应的安全活动。