阿明拿到了一把崭新的车钥匙——一辆机械状况完美的新车。刹车灵、发动机稳、雷达摄像头遍布全身,一丁点故障都没有。可当他兴冲冲开出小区,麻烦立刻来了:大雾里看不清斑马线上的行人,逆光时差点闯了红灯,路面积水还让系统猛踩了一脚刹车。车明明没坏,为什么会出事?这就是 SOTIF(预期功能安全)要回答的问题:系统没有硬件故障时,仅仅因为功能不足与局限,也可能引发危险。本文顺着阿明的故事,讲清 SOTIF 是什么、与 ISO 26262 如何分工互补、怎样识别触发条件、如何用场景测试找出隐患、通过哪些策略降低风险,最终让“没坏但不安全”的自动驾驶安心量产。
掌握 SOTIF,你就能看懂“车没坏却不安全”这类量产级安全难题,这是自动驾驶安全合规与系统工程岗位的必修技能。
目录
可视化演示
演示ISO 21448预期功能安全分析流程:触发条件识别、感知局限分析、可预见误用评估、场景测试验证与风险降低策略,步进切换各阶段并实时呈现安全评估指标。
本节配有交互动效(进入视口后自动加载,约 3KB)。
触发条件识别 功能不足 危险行为 场景→触发 识别功能不足风险
SOTIF 基本概念:车没坏,为何还出事?
阿明把车开进 4S 店做全面体检:发动机零故障、刹车零磨损、传感器个个灵敏,检测报告漂亮得能挂墙。可教练坐进副驾,只开了十分钟就冒汗——大雾天他看不清路况,逆光时把红灯当成绿灯,路口突然窜出一辆电动车,他愣了半天才刹车。车的零件没一处损坏,出问题的,是“开车的人”的能力边界。
这正是 SOTIF(预期功能安全)的核心洞察:系统没有发生任何硬件故障时,仅仅因为功能不足(感知看不全、决策想不周、执行跟不上),就可能引发安全事故。传统功能安全标准 ISO 26262 盯着“部件坏了”这回事,而 SOTIF 盯着“部件没坏但不够聪明”这回事。两者就像修车师傅和陪练教练的分工:一个保证车况,一个保证车技。
为了说清 SOTIF 的风险来源,业界常用四象限模型:横轴是“已知/未知”,纵轴是“安全/危险”。已知安全场景可以直接放行;已知危险场景要设法降险;未知安全场景暂时无害,但要继续探索确认;最可怕的是“未知危险”场景——你根本不知道它存在,但它随时可能酿祸。SOTIF 的全部工作,就是把这个象限里打问号的格子一个个变成已知。
回到阿明:他的车之所以出事,不是因为“坏了”,而是因为“还不认识这个世界”。理解这一点,就抓住了 SOTIF 的钥匙——它的对象不是故障,而是能力边界。
- 总风险分解把整车安全风险拆成两个不相重叠的部分,避免“都管又都没管”。
- 硬件故障项刹车失灵、传感器损坏这类物理失效,由 ISO 26262 管控。
- 功能不足项系统没坏但感知决策能力不够,由 SOTIF 兜底。
与 ISO 26262 互补:修车师傅与陪练教练的分工
阿明的父亲是位老司机,听完儿子的惊险经历,第一反应是“这车是不是有毛病?”他请来修车师傅(ISO 26262 的化身),把车从里到外查了个遍:线路无磨损、芯片无失效、制动系统完美。师傅摊手说:“车是好车,但开车的人还需要练。”于是家人请来一位陪练教练(SOTIF 的化身),专治“人不行”。
在自动驾驶安全体系里,ISO 26262(功能安全)与 SOTIF(预期功能安全)就是这对搭档。ISO 26262 处理的是“失效”:硬件随机故障、软件系统性缺陷,它提供 ASIL 等级、安全机制设计和故障注入测试,目标是让车“坏了也能安全停车”。SOTIF 处理的则是“没有失效但功能表现不足”:传感器在极端天气下探测能力下降、算法对从未见过的场景无从下手、用户在不该用的场景里强行使用。前者问“车坏了怎么办”,后者问“车没坏但不够聪明怎么办”。
两者必须协同:一辆车既要做 26262 的故障分析,也要做 SOTIF 的触发条件分析;既要有故障响应机制,也要有功能降级策略。在整车安全生命周期中,26262 先保证“硬件不出乱子”,SOTIF 再保证“能力配得上路况”,共同构成从设计、验证到量产的闭环。
阿明后来明白了:每周保养(26262)只能保证车况,真正的成长来自每次陪练(SOTIF)后的复盘。缺了任何一位老师傅,他都上不了路。
- 风险总账ISO 26262 与 SOTIF 各自覆盖的风险必须合计评估,不能只算一半。
- 故障端控制通过安全机制把硬件故障风险压到上限以内。
- 能力端控制通过测试与缓解把功能不足风险压到上限以内。
触发条件识别:找出阿明何时会失手
陪练教练有个习惯:每次阿明惊险,他就在小本子上记一笔——“14:20,大雾,斑马线行人未被及时识别”;“17:45,逆光,红绿灯判断延迟”;“21:10,乘客伸手遮住前挡风玻璃自拍,系统短暂混乱”。一个月后,教练翻开本子,发现所有惊险都集中在几个共同的“触发条件”上。
触发条件(Triggering Condition)是 SOTIF 分析的核心概念:它指在特定场景下,导致系统功能表现不足的那些外部条件与内部状态组合。外部条件包括光照(逆光、夜间)、天气(雨雾、雪天)、道路(施工、积水)、交通参与者(行人横穿、货车并线)等;内部状态包括传感器工作模式、算法置信度、系统资源占用等。识别触发条件,就是把“什么时候会失手”从模糊的直觉变成可测试的清单。
可预见误用也属于触发条件分析的对象:用户用脚垫挡住踏板、在大雨中强行使用自动泊车、过度信任辅助驾驶而双手脱离方向盘。只要设计时“想得到”,就必须纳入分析——这就像教练知道学员会被同车人吓到分心,所以要专门训练抗干扰。记下每一个触发条件,才能为后面的场景测试提供靶子。
教练的小本子,就是阿明的“触发条件库”。没有这本子,训练就是瞎练;有了它,每一次模拟考都能对准命门。
- 场景暴露概率在运行区域内遇到该场景(如大雾天)的可能性,通常按里程统计。
- 触发条件概率场景出现了,系统恰好处理不了(感知失效、决策超时)的概率。
- 伤害发生概率触发之后,最终造成碰撞、伤亡等伤害的概率。
场景测试验证:驾校模拟器与实路陪练
为了让阿明早日拿到驾照,家人给他报了驾校三件套:先在模拟器上刷了上千道“场景题”(虚拟仿真测试),让大雾、暴雨、逆光、鬼探头轮番上阵;再去封闭场地一对一练车(封闭场地测试),把标志桶摆成各种刁钻路况;最后才上真实道路(开放道路测试),在车流中经受实战检验。
场景测试验证是 SOTIF 的核心手段,目的是把四象限模型里的“未知”变成“已知”。场景来源有三类:标准法规场景(交通事故数据库与法规要求)、衍生场景(对真实路采数据做参数变异)、未知场景(通过随机探索与对抗生成挖掘)。验证体系由三个层次组成:虚拟仿真可低成本批量覆盖海量场景,封闭场地可安全复现高风险工况,开放道路则提供真实世界的最终背书。三层互补,缺一不可。
测试不是目的,“覆盖率”才是。每一轮测试都要统计:已知安全场景有多少、已知危险场景解决了多少、新增了哪些未知场景。覆盖率越高,未知危险区域越小,量产放行的底气就越足。
阿明刷了一千道模拟题才明白:模拟器上见过的坑,实路上才掉不进去。场景测试的意义,就是把对未知的恐惧,变成对已知的对策。
- 场景总数运行设计域内所有可能遇到的场景,等于已知与未知之和。
- 已确认场景经过测试后性质明确(安全或危险)的场景数。
- 覆盖率目标已确认比例越高,未知危险残留越少,理论极限为 1。
风险降低策略:给阿明加装三重保险
模拟考成绩出来了:阿明在大雾场景下有几处危险操作,在逆光路口反应偏慢,在施工改道路段险些压线。教练没有让他直接上路,而是给了三道保险:第一,加课补短板(提升系统能力);第二,暂时只准白天、晴天、熟悉路段开(限制运行设计域);第三,副驾必须坐着一位随时能踩刹车的教练(安全接管机制)。
这三道保险对应 SOTIF 的三大风险降低策略。提升系统能力是最根本的手段,包括增强传感器、改进感知算法、扩充决策模型,让系统在更多场景下“能行”。限制运行设计域(ODD)则是承认“有些场景暂时不行”,明确系统只能在哪些条件(道路类型、天气、速度、光照)下运行,超出立即降级或退出。安全接管机制是最后一道防线:驾驶员监督、接管请求(DTO)、最小风险状态(MRC),确保系统“万一不行”时有人兜底。
每种策略都有“缓解效率”η,表示把风险降低多少比例。多项策略叠加时,效果是乘积关系:两道保险各降 50%,残差风险就只剩初始的 25%。工程师的日常工作,就是在成本、体验与安全之间选择最优组合,并通过场景回归与实车确认,验证实际缓解效率与理论一致。
阿明最终明白:一位好司机不是天生什么路都能开,而是知道自己能开什么路、不能开什么路,并且随时准备踩刹车。
- 初始风险未施加任何缓解时,场景对应的固有风险。
- 单层缓解每增加一项措施(如提升感知),风险乘以剩余比例 (1-η)。
- 多层叠加n 道保险的剩余风险按乘积累计,效果远大于单层。
工程落地应用:从驾校毕业到量产放行
三个月后,阿明通过了科目二、科目三和模拟器大考,拿到了梦寐以求的“自动驾驶驾照”。但教练郑重告诉他:这不是终点。驾校规定,拿证后每半年要回炉一次;车上还装了数据黑匣子,每次出车都会记录路上遇到的新情况,回到基地后由安全团队复盘。
自动驾驶量产落地同样遵循这条路径。SOTIF 的工程应用包含三个层面:安全合规、安全指标与持续迭代。合规层面,量产前必须完成 SOTIF 分析报告,涵盖触发条件清单、场景测试记录、风险缓解方案,并通过第三方审核;指标层面,要建立可量化的安全指标体系(如单位里程伤害风险、未知场景残留率、接管请求率),用数据说话;迭代层面,车辆上市后通过影子模式持续采集路采数据,挖掘新出现的未知危险场景,经仿真回归验证后通过 OTA 更新系统。
这套方法论的价值在量产中尤为明显:没有 SOTIF,L2+ 以上系统几乎无法通过监管评审;有了 SOTIF,企业才能证明“我们的系统虽然不完美,但风险已被系统性识别并控制在可接受范围”。这也是安全工程师、系统工程师、算法工程师在自动驾驶团队中最具含金量的协作接口。
阿明终于可以带着全家出游了。他开着车,副驾坐着教练(安全监督),仪表盘显示着当前允许的路段与天气(ODD),后备箱里装着一本越来越厚的小本子(触发条件库)。他知道,真正的安全不是“我不会出事”,而是“我知道哪里可能出事,并且早有准备”。
- 残差风险核算把全部已知危险场景的缓解后风险汇总。
- 可接受阈值由法规要求、行业基准与社会风险容忍度共同决定。
- 放行裁决残差不超过阈值则通过评审,否则继续迭代。
AI 应用场景
L3 自动驾驶量产安全合规评审
阶段:安全验证与合规发布
解决的问题:传统评审只看硬件故障(ISO 26262),无法回答监管“系统没坏但某些路况下会不会不安全”的质疑。SOTIF 补齐了功能不足风险的评估闭环,让“没坏却不安全”的场景有据可查。
具体案例:某车企 L3 高速领航功能量产前,安全团队定义 ODD、枚举 200+ 触发条件、搭建仿真与实车测试矩阵,出具 SOTIF 报告并通过第三方认证,最终获准在有条件路段开放。整个评审周期中“未知危险场景残留率”是核心考核指标。
感知算法性能边界分析
阶段:模型训练与评测
解决的问题:视觉模型在逆光、雨雾下精度骤降,常规指标(mAP)看不出安全影响。SOTIF 的触发条件分析把“看不清的时刻”变成可定位、可优化的能力边界。
具体案例:某自动驾驶公司用 SOTIF 方法统计逆光下行人漏检率,发现漏检与太阳高度角强相关,据此调整摄像头曝光策略,并在融合权重中提升毫米波雷达占比,同时把“低角度逆光”列入 ODD 限制条件,上线后同类误判减少 67%。
Robotaxi 车队事故复盘与数据迭代
阶段:数据闭环与持续改进
解决的问题:车队运营中偶发“说不清原因”的危险事件,传统 bug 修复无法根除。SOTIF 四象限方法帮团队从个案中挖出系统性未知触发条件。
具体案例:某 Robotaxi 团队用影子模式回传数据,聚类发现“高架阴影下的横穿行人”这类长尾触发条件,将其补充进仿真场景库并要求感知与决策联合优化,回归测试后同类危险事件下降 82%。
Python 演示
"""SOTIF 场景风险初筛与缓解效果演示""" def calc_risk(exposure, trigger_prob, severity): """风险值 = 暴露概率 x 触发概率 x 严重度""" return exposure * trigger_prob * severity def classify_scene(name, known_names, exposure, trigger, severity, threshold): """按四象限思想把场景归类: 未知 / 已知危险 / 已知安全""" if name not in known_names: return "未知场景(需探索)" if calc_risk(exposure, trigger, severity) >= threshold: return "已知危险(需缓解)" return "已知安全(可接受)" def main(): scenes = [ ("大雾天行人横穿", 0.08, 0.60, 5), ("逆光识别红绿灯", 0.12, 0.30, 4), ("施工路段改道", 0.05, 0.70, 5), ("前车突然急刹", 0.30, 0.20, 3), ("路面大面积积水", 0.10, 0.40, 2), ("团雾中高速跟车", 0.06, 0.55, 5), ("深夜无路灯路口", 0.15, 0.25, 3), ("高速货车并线", 0.20, 0.35, 4), ] known = {"前车突然急刹", "大雾天行人横穿", "路面大面积积水"} threshold = 0.60 print("=== SOTIF 场景风险初筛 ===") for name, expo, trig, sev in scenes: risk = calc_risk(expo, trig, sev) label = classify_scene(name, known, expo, trig, sev, threshold) print(f"{name:<12} 风险={risk:.3f} -> {label}") print("=== 缓解措施效果(效率70%) ===") for name, expo, trig, sev in scenes: risk = calc_risk(expo, trig, sev) if risk >= threshold: residual = risk * (1 - 0.70) print(f"{name:<12} 缓解前={risk:.3f} -> 缓解后={residual:.3f}") if __name__ == "__main__": main()
def calc_risk(exposure, trigger_prob, severity):实现核心风险公式 R = 暴露概率 × 触发概率 × 严重度,把三个因子乘起来。def classify_scene(name, known_names, exposure, trigger, severity, threshold):四象限归类的代码化:不在“已知集合”里的场景一律先视为未知。known = {"前车突然急刹", "大雾天行人横穿", "路面大面积积水"}模拟已知场景集合,代表当前系统已经测试并确认过的场景。label = classify_scene(name, known, expo, trig, sev, threshold)逐个场景计算风险并归类,输出“未知 / 已知危险 / 已知安全”。residual = risk * (1 - 0.70)对应残差风险公式 R_残差 = R_0 × (1-η),展示单项缓解措施的削减效果。
常见误区
误区我们项目已经过了 ISO 26262 认证,是不是就不用做 SOTIF 了?感觉它们是一回事,换个名字而已。
正解二者虽然都叫“功能安全”,方向却完全不同:ISO 26262 管“部件坏了怎么办”(硬件随机失效、系统性故障),SOTIF 管“部件没坏但能力不够怎么办”(功能不足)。就像修车师傅负责车况良好,陪练教练负责驾驶能力,两位老师傅缺一不可。
为何常见:两个标准名称相近、发布机构关系密切,又都出现在车辆开发流程中,很容易被误当成同一个东西。
误区传感器全部正常工作、代码也没有 bug,那系统就是安全的,还需要测什么场景?
正解这正是 SOTIF 要颠覆的直觉。阿明的车一台零件都没坏,但大雾、逆光、突然窜出的行人依然让他险象环生。风险来自功能边界——感知看不到、决策想不明白,这与“零件坏没坏”是两条相互独立的风险轴。
为何常见:传统功能安全长期聚焦“失效”,让人默认故障是唯一风险源,忽略了能力边界这类隐性风险。
误区用户自己遮挡摄像头导致事故,那是用户自己作,安全标准不该替用户行为负责。
正解SOTIF 明确要求评估“合理可预见的误用”:比如驾驶员过度信任辅助驾驶、用脚垫挡住传感器、在大雨里强行使用自动泊车。只要设计时“想得到”,就必须纳入风险分析并缓解,而不是事后甩锅给用户。
为何常见:把“误用”与“恶意滥用”混为一谈,或者认为责任划分可以替代工程防范。
误区仿真场景已经跑了上亿公里,覆盖率号称 99%,实车测试就没必要再大费周章了。
正解仿真只能覆盖“建模时想到的场景”,真实世界的未知场景恰恰是仿真的盲区——传感器噪声分布、路面随机性、交通参与者行为的复杂性都难以完全建模。SOTIF 要求仿真、封闭场地、实车道路测试三管齐下,并用实车数据持续反哺仿真场景库。
为何常见:仿真成本低、里程数字漂亮,容易让人误以为“数字大 = 覆盖全”。
误区交付前让安全团队出份 SOTIF 报告,盖章通过就万事大吉,后续不用再管。
正解SOTIF 是贯穿开发、验证、运营、退役全生命周期的持续过程。车辆上市后随着 OTA 升级、新场景涌现,必须持续收集影子模式数据、挖掘未知危险场景,像驾校回炉一样定期重新评估风险账本。
为何常见:把它当成一次性合规文档,而忽略了“未知场景永远在涌现”这一核心前提。
面试题
Q1. SOTIF 重点处理的风险来源是?
- A.硬件随机故障
- B.功能不足与局限← 正确答案
- C.网络信息安全
- D.电池热失控风险
答案:B。SOTIF 针对的是“没有故障但能力不够”。A 属于 ISO 26262,C 属于网络安全,D 属于电池安全。就像阿明的车零件全好,但驾驶技术不够一样。
Q2. ISO 26262 与 SOTIF 的关系是?
- A.两者相互替代
- B.两者刚好无关
- C.两者是互补关系← 正确答案
- D.两者是从属关系
答案:C。ISO 26262 管硬件故障与系统性失效,SOTIF 管功能不足,二者覆盖的风险相加才构成完整的安全账本,不是替代或从属关系。
Q3. 下列哪项属于 SOTIF 关注的可预见误用?
- A.行人故意遮挡摄像头← 正确答案
- B.电池内部发生短路
- C.刹车片磨损过重
- D.车机屏幕出现黑屏
答案:A。可预见误用指设计时能想到的不当使用,如乘客或行人遮挡传感器。B、C、D 分别属于电池安全、硬件磨损与设备故障,不属于“用户用错方式”。
Q4. 四象限模型中“未知危险”场景应如何处理?
- A.直接忽略继续驾驶
- B.测试使其变为已知← 正确答案
- C.更换更贵的硬件
- D.永远无法处理它
答案:B。未知危险是最大的隐患,SOTIF 的核心工作就是通过仿真与实车测试把这些场景“挖”出来,变成已知危险后再逐一缓解,而不是无视或回避。
Q5. 触发条件识别的核心任务是?
- A.统计各硬件故障率
- B.提高车机屏幕亮度
- C.增加电池容量大小
- D.识别功能不足触发条件← 正确答案
答案:D。触发条件是“场景中让系统失手的关键因素”,如逆光、大雾、突然横穿。识别触发条件是场景测试与风险缓解的入口,与硬件故障统计无关。
Q6. ODD 运行设计域的主要作用是?
- A.扩大系统运行范围
- B.提升硬件计算速度
- C.减少道路测试数量
- D.界定系统安全运行边界← 正确答案
答案:D。ODD 明确“什么条件下系统可以跑、什么条件下必须退出”,把运行范围限制在系统能力之内,是 SOTIF 最常用的降险手段之一。
Q7. 针对已知危险场景,SOTIF 的首要做法是?
- A.提升感知与决策能力← 正确答案
- B.调高车辆巡航速度
- C.删除该场景的测试数据
- D.缩短整车的质保期限
答案:A。已知危险场景要么提升系统能力把它变安全,要么限制 ODD 把它排除在外。删除数据或无视问题都是掩盖风险而非降低风险。
Q8. 下列属于 SOTIF 风险降低策略的有?
- A.提升感知算法能力← 正确答案
- B.限制运行设计域← 正确答案
- C.驾驶员监督与接管← 正确答案
- D.提高显示器亮度
答案:ABC。提升能力、限制工况、引入监督接管是三大主流降险手段,分别对应“让系统更行、让系统少跑、让系统有人兜底”。提高显示器亮度与风险缓解无关。
Q9. 场景验证测试的主要手段包括?
- A.虚拟仿真测试← 正确答案
- B.封闭场地测试← 正确答案
- C.开放道路测试← 正确答案
- D.静态代码审查
答案:ABC。仿真、场地、实路三种手段互补构成完整验证体系。静态代码审查属于软件工程手段,不直接验证“场景下的功能表现是否安全”。
Q10. 关于 SOTIF 四象限模型,下列说法正确的有?
- A.已知安全场景可直接放行← 正确答案
- B.未知危险场景须探索确认← 正确答案
- C.已知危险场景必须降低风险← 正确答案
- D.未知安全场景无需任何管理
答案:ABC。A、B、C 分别对应 SOTIF 对三类场景的基本态度。D 错在“未知安全”只是“还没测出来”,不能被当作安全,仍需探索确认后才能放心。