1. ASIL等级判定与软件安全目标分解

ASIL等级判定与软件安全目标分解 学习卡片

任务定义

本案例面向ISO 26262功能安全软件开发的起点:在项目早期为待开发系统定义ASIL等级并导出安全目标。任务输入为系统级危害分析结果(危害事件清单),输出为:①每个危害事件对应的ASIL等级(QM/A/B/C/D);②由最高ASIL等级推导出的安全目标及其属性(安全状态、容错时间间隔FTTI)。完成本案例后,你将获得一份可直接用于后续软件安全需求分解的ASIL与安全目标定义表。

输入数据

以某电动助力转向(EPS)系统为例,已完成初步危害分析与风险评估(HARA),识别出以下3个危害事件:

危害事件编号危害场景严重度S暴露概率E可控性C
H-01高速行驶中非预期丧失转向助力S3E4C3
H-02低速泊车时非预期丧失转向助力S1E4C2
H-03行驶中转向助力输出错误方向S3E3C3

ASIL等级确定规则

依据ISO 26262-3:2018表1,ASIL由S、E、C组合查表确定:

C1C2C3
S1+E1QMQMQM
S1+E2QMQMQM
S1+E3QMQMA
S1+E4QMAB
S2+E1QMQMQM
S2+E2QMAB
S2+E3ABC
S2+E4BCC
S3+E1ABC
S3+E2BCD
S3+E3CCD
S3+E4CDD

ASIL等级计算实现

以下Python代码实现ASIL查表与安全目标生成逻辑:

# asil_definition.py
# 依赖:无(纯标准库)

# ASIL查表:键为(S,E,C),值为ASIL等级
ASIL_TABLE = {
    (1,1,1):'QM', (1,1,2):'QM', (1,1,3):'QM',
    (1,2,1):'QM', (1,2,2):'QM', (1,2,3):'QM',
    (1,3,1):'QM', (1,3,2):'QM', (1,3,3):'A',
    (1,4,1):'QM', (1,4,2):'A',  (1,4,3):'B',
    (2,1,1):'QM', (2,1,2):'QM', (2,1,3):'QM',
    (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):'C',
    (3,1,1):'A',  (3,1,2):'B',  (3,1,3):'C',
    (3,2,1):'B',  (3,2,2):'C',  (3,2,3):'D',
    (3,3,1):'C',  (3,3,2):'C',  (3,3,3):'D',
    (3,4,1):'C',  (3,4,2):'D',  (3,4,3):'D',
}

def get_asil(s, e, c):
    """根据S/E/C参数查表返回ASIL等级"""
    return ASIL_TABLE[(s, e, c)]

def derive_safety_goal(hazard_id, scenario, asil):
    """
    根据危害事件生成安全目标。
    安全目标文本基于危害场景自动构造,ASIL取该危害事件的等级。
    返回字典包含:安全目标ID、描述、ASIL、安全状态、FTTI。
    """
    # 安全状态与FTTI根据场景特征设定(示例值,实际需系统工程师确认)
    if '错误方向' in scenario:
        safe_state = '禁止助力输出,转入机械转向模式'
        ftti = 100  # ms
    elif '高速' in scenario:
        safe_state = '保持当前助力水平,降级至安全助力模式'
        ftti = 200  # ms
    else:
        safe_state = '关闭助力,转入机械转向模式'
        ftti = 500  # ms

    return {
        'safety_goal_id': f'SG-{hazard_id}',
        'description': f'避免车辆在“{scenario}”场景下发生危害',
        'ASIL': asil,
        'safe_state': safe_state,
        'FTTI_ms': ftti,
    }

# ===== 主流程:处理输入危害事件清单 =====
hazards = [
    {'id': 'H-01', 'scenario': '高速行驶中非预期丧失转向助力', 'S': 3, 'E': 4, 'C': 3},
    {'id': 'H-02', 'scenario': '低速泊车时非预期丧失转向助力', 'S': 1, 'E': 4, 'C': 2},
    {'id': 'H-03', 'scenario': '行驶中转向助力输出错误方向',   'S': 3, 'E': 3, 'C': 3},
]

print('='*70)
print('危害事件ASIL等级与安全目标定义结果')
print('='*70)

safety_goals = []
for h in hazards:
    asil = get_asil(h['S'], h['E'], h['C'])
    sg = derive_safety_goal(h['id'], h['scenario'], asil)
    safety_goals.append(sg)
    print(f"\n危害事件 {h['id']}: {h['scenario']}")
    print(f"  参数: S={h['S']}, E={h['E']}, C={h['C']} → ASIL={asil}")
    print(f"  安全目标: {sg['safety_goal_id']} | {sg['description']}")
    print(f"  安全目标ASIL: {sg['ASIL']}")
    print(f"  安全状态: {sg['safe_state']}")
    print(f"  FTTI: {sg['FTTI_ms']} ms")

# 汇总:取所有安全目标中的最高ASIL作为系统级ASIL
asil_rank = {'QM':0, 'A':1, 'B':2, 'C':3, 'D':4}
max_asil = max(safety_goals, key=lambda x: asil_rank[x['ASIL']])['ASIL']
print(f"\n{'='*70}")
print(f"系统级ASIL(取最高): {max_asil}")
print(f"共定义 {len(safety_goals)} 条安全目标,后续软件安全需求将基于以上安全目标分解。")

运行与验证

运行方式:将上述代码保存为 asil_definition.py,在Python 3.6+环境中执行:

python asil_definition.py

预期输出(确定性结果):

危害事件 H-01: 高速行驶中非预期丧失转向助力
  参数: S=3, E=4, C=3 → ASIL=D
  安全目标: SG-H-01 | 避免车辆在“高速行驶中非预期丧失转向助力”场景下发生危害
  安全目标ASIL: D
  安全状态: 保持当前助力水平,降级至安全助力模式
  FTTI: 200 ms

危害事件 H-02: 低速泊车时非预期丧失转向助力
  参数: S=1, E=4, C=2 → ASIL=A
  安全目标: SG-H-02 | 避免车辆在“低速泊车时非预期丧失转向助力”场景下发生危害
  安全目标ASIL: A
  安全状态: 关闭助力,转入机械转向模式
  FTTI: 500 ms

危害事件 H-03: 行驶中转向助力输出错误方向
  参数: S=3, E=3, C=3 → ASIL=D
  安全目标: SG-H-03 | 避免车辆在“行驶中转向助力输出错误方向”场景下发生危害
  安全目标ASIL: D
  安全状态: 禁止助力输出,转入机械转向模式
  FTTI: 100 ms

=====================================================
系统级ASIL(取最高): D
共定义 3 条安全目标,后续软件安全需求将基于以上安全目标分解。

判定标准:程序无异常退出,输出中H-01与H-03的ASIL均为D(S3+E4+C3与S3+E3+C3查表均为D),H-02为A(S1+E4+C2查表为A),系统级ASIL取最高为D。安全目标ID、描述、安全状态与FTTI均按规则生成且与输入场景对应。

ASIL定义与安全目标关系图

危害事件 → ASIL等级 → 安全目标 映射关系 危害事件清单 H-01 高速丧失助力 S3 E4 C3 H-02 低速泊车丧失助力 S1 E4 C2 H-03 助力输出错误方向 S3 E3 C3 ASIL查表 ASIL D (S3,E4,C3)查表 ASIL A (S1,E4,C2)查表 ASIL D (S3,E3,C3)查表 安全目标 SG-H-01 (ASIL D) 安全状态: 降级助力 FTTI: 200ms SG-H-02 (ASIL A) 安全状态: 关闭助力 FTTI: 500ms SG-H-03 (ASIL D) 安全状态: 禁止助力 FTTI: 100ms 系统级ASIL = D(取最高等级)