SOTIF和ISO 26262最根本的区别:
ISO 26262是“走一遍”——从左到右,走完就定型了。
SOTIF是“转圈圈”——分析→改进→验证→发现新问题→再分析→再改进→再验证……直到残余风险可接受。
为什么SOTIF必须是迭代的?
SOTIF必须迭代的根本原因只有一个——你不知道你不知道什么。
ISO 26262处理的是“已知的故障”——硬件会老化、软件会有bug,这些是已知的、可预测的。你只需要按照标准流程走一遍,该测的测了,该分析的做了,就差不多了。
但SOTIF处理的是“未知的危险场景”——你设计系统的时候,可能根本没想过会有这种场景。
标准 | 处理的对象 | 特性 | 流程 |
|---|---|---|---|
🛠️ISO 26262 | 故障(故障模式是已知的) | 已知的、可预测的 | 走一遍 |
🧠SOTIF | 功能不足(很多是未知的) | 未知的、不可预测的 | 转圈圈 |
💡SOTIF的流程就像“打地鼠”:你一锤下去,打中了一个“未知危险场景”(区域3),它变成了“已知危险场景”(区域2)。但与此同时,另一个“地鼠”又在别的地方冒出来了——你又得再打一锤。直到所有“地鼠”都被你打了一遍,你才能说“差不多了”。
🏗️ 迭代循环的“四个阶段”:一个标准的闭环
SOTIF的迭代过程可以概括为四个阶段:
阶段一:分析——找FI和TC
做什么:从功能规范出发,系统性地识别“功能不足”和“触发条件”。
这是迭代的“起点”。每一轮迭代都从这里开始——要么是初始分析,要么是上一轮发现新问题后的重新分析。
阶段二:改进——设计方案
做什么:针对识别出的功能不足和触发条件,设计功能改进方案。
改进的方向包括:
改进方向 | 大白话 |
|---|---|
🧠算法优化 | “让算法在更多场景下都能正确处理” |
📡传感器增强/冗余 | “增加传感器种类或数量,覆盖感知盲区” |
🚦降级与接管策略 | “不行的时候怎么安全地停下来” |
🗺️ODD限制 | “不安全的场景我就不去了” |
阶段三:验证——确认有效
做什么:验证改进方案是否真的有效——重新测试之前失败的那个场景,确认系统现在已经“行了”。
验证的方法:
方法 | 大白话 |
|---|---|
🧪已知场景验证 | “之前出问题的那个场景,现在再测一遍,看过了没” |
🔄回归测试 | “改了这儿,别的地方没出问题吧?” |
阶段四:评估——还有新问题吗?
做什么:经过验证后,评估是否还有新的功能不足或触发条件被发现了。
这是迭代循环的关键环节——它决定了你是可以停下来(✅ 没有新问题了),还是需要再来一轮(🔄 又发现了新问题)。
💡为什么验证阶段很可能发现新问题?
因为你在验证“已知危险场景”的时候,可能会触发新的场景、暴露新的功能不足。验证不只是“确认修好了”,它还可能“发现之前没发现的问题”。
🔥 实战:AEB系统的“迭代打怪”之旅
用AEB系统完整走一遍多轮迭代的过程,你就明白“迭代”到底长什么样了。
📋 第0轮:初始状态
区域 | 内容 | 状态 |
|---|---|---|
🟢区域1 | 晴天、白天、前方普通轿车 | ✅ 已知安全 |
🔴区域2 | 夜间 + 白色货车(识别率下降) | ⚠️ 已知危险 |
🔴区域3 | ???(还不知道) | ❓ 未知危险 |
🔄 第1轮迭代
分析(阶段一):对“夜间+白色货车”场景做FI/TC分析
要素 | 内容 |
|---|---|
🧠FI | 摄像头在低照度下对白色物体的识别能力不足 |
🌧️TC | 夜间 + 白色货车 |
改进(阶段二):增加毫米波雷达融合——雷达不受光照影响。
验证(阶段三):重新测试“夜间+白色货车”场景 → ✅ 系统正确制动。
评估(阶段四):在验证过程中,发现在强逆光+阴影场景下,系统把阴影误检为障碍物,触发了非预期急刹车。
结果:发现了一个新的功能不足(摄像头在强逆光下误识别),以及一个新的触发条件(强逆光+阴影)。
→再来一轮!🔄
🔄 第2轮迭代
分析(阶段一):对“强逆光+阴影”场景做FI/TC分析
要素 | 内容 |
|---|---|
🧠FI | 摄像头在强逆光下的动态范围不足,容易把阴影误检为障碍物 |
🌧️TC | 强逆光 + 地面阴影 |
改进(阶段二):增加时间序列滤波——单帧的“疑似障碍物”不立即触发制动,需要连续多帧确认。
验证(阶段三):重新测试“强逆光+阴影”场景 → ✅ 系统不再误制动。
评估(阶段四):在验证过程中,没有发现新的问题。
结果:本轮迭代没有发现新问题。
→可以停了!✅
📋 最终状态
区域 | 初始状态 | 经过2轮迭代后 | 变化 |
|---|---|---|---|
🟢区域1 | 小 | 大 | ⬆️ 扩大了 |
🔴区域2 | 中 | 小 | ⬇️ 缩小了 |
🔴区域3 | 大 | 小 | ⬇️ 缩小了 |
🟢区域4 | 中 | 中 | ➡️ 不变 |
💡这个案例说明:
第1轮迭代解决了“已知危险场景”,但验证过程中发现了新的“未知危险场景”。于是进入第2轮迭代。
第2轮迭代解决了新发现的危险场景,然后没有再发现新的问题,所以迭代停止了。
如果第2轮迭代又发现了新问题,那就还得再来第3轮。
🛑 什么时候可以停下来?——收敛条件
这是迭代最核心的问题——怎么知道“可以停了”?
ISO 21448第12章“SOTIF发布准则”给出了答案:当残余风险可接受时,就可以发布了。
但“残余风险可接受”不是“没有风险了”——是“剩下的风险我们能接受了”。
📌 三个判断标准
判断标准 | 问的问题 |
|---|---|
✅区域2已处理 | “所有已知危险场景都被解决了吗?” |
✅区域3已充分探索 | “未知场景的探索达到足够覆盖率了吗?” |
✅残余风险可接受 | “剩下的风险,我们能接受了吗?” |
📌 一个关键的认知:迭代不是“无限循环”
💡SOTIF的迭代虽然“可能”无限循环,但现实中一定是“有限”的。
为什么?
因为你的资源是有限的——时间、预算、人力。你不可能“无限”地迭代下去。
现实中的SOTIF迭代是在“成本”和“安全性”之间找平衡——不是“绝对安全”才能停,是“足够安全”就可以停了。
收敛的典型表现:
表现 | 说明 |
|---|---|
📉发现新问题的频率下降 | 从“每轮都发现”变成“好几轮才偶尔发现一个” |
📊区域2的规模不再变化 | 已知危险场景已经被逐个消除 |
📈区域3的探索覆盖率足够 | 已经投入了足够的测试资源 |
⚖️残余风险评估通过 | 剩下的风险被判断为“可接受” |
迭代过程中的“不变”与“变”
虽然SOTIF的流程是“转圈圈”,但有些东西是不变的,有些东西是不断更新的。
📌 不变:V模型的整体框架
无论迭代多少轮,V模型的框架不变——左边设计、右边验证,这个“骨架”始终都在。
📌 变:三个关键要素每轮都在更新
要素 | 变什么? | 例子 |
|---|---|---|
📝功能规范 | 增加新的对策 | “AEB系统增加雷达融合” |
📋危害列表 | 增加新的危害 | “强逆光+阴影 → 非预期急刹车” |
📊验证用例库 | 增加新的场景 | “新增‘夜间+白色货车’验证用例” |
⚠️ SOTIF迭代中容易踩的“坑”
坑1:迭代了一轮就觉得“完事了”
❌ “第1轮迭代解决了3个已知危险场景,差不多了”
✅SOTIF的迭代要在验证阶段确认没有新问题才能停,不是“改了几个场景就算完事”
坑2:把“验证”当成“终点”
❌ “验证通过了,不用再看了”
✅验证可能发现新问题——要把验证当成“发现新问题的过程”,而不是“证明自己做完了的过程”
坑3:不知道什么时候该停下来
❌ “感觉差不多了”——没有明确的停止标准
✅定义清晰的发布准则——区域2都处理完了吗?区域3探索了够多吗?残余风险可接受吗?
坑4:迭代了“设计”但没更新“规范”
❌ “加了雷达融合,代码也改了”——但功能规范没更新
✅每一次迭代发现的新对策,都要反馈到功能规范中——规范和设计必须保持同步
🔄 和ISO 26262的“迭代”有什么区别?
ISO 26262也有迭代——比如你发现了新的失效模式,也得回去重新分析、重新设计。但程度完全不同。
对比维度 | 🛠️ISO 26262 | 🧠SOTIF |
|---|---|---|
| 迭代频率 | 偶尔(发现新失效时) | 常态化(每轮都可能发现新问题) |
| 迭代深度 | 局部(修改某个组件) | 可能全局(发现新的功能不足) |
| 迭代终点 | 相对明确(失效模式已穷举) | 相对模糊(未知风险永远存在) |
| 核心驱动力 | 发现新的失效模式 | 发现新的危险场景 |
💡简单说:
ISO 26262的迭代是“例外情况”——发现了新的失效模式才回去改。
SOTIF的迭代是“常态”——每轮迭代都可能发现新问题,这是SOTIF工作方式本身的一部分。