乐于分享
好东西不私藏

EN 50128 轨道交通领域最核心的软件功能安全标准

EN 50128 轨道交通领域最核心的软件功能安全标准

前面讲了 IEC 61508(通用标准)和 ISO 26262(汽车标准),但还有一个领域没提——轨道交通。地铁、高铁的信号控制系统,安全等级比汽车还高,用的是另一套标准。

这篇就来聊聊——

EN 50128 —— 轨道交通通信、信号和处理系统,软件标准。

一、EN 50128 是什么

全称:EN 50128 Railway applications — Communication, signalling and processing systems — Software for railway control and protection systems

一句话翻译:轨道交通信号系统的软件功能安全标准。

它属于 EN 5012X 系列的一环:

标准
管什么
谁来用
EN 50126
系统级:可靠性、可用性、可维护性、安全性(RAMS)
系统工程师
EN 50129
硬件级:安全相关电子系统
硬件工程师
EN 50128
软件级:安全相关软件
软件工程师

三个标准的关系:50126 管系统 → 50129 管硬件 → 50128 管软件。轨交安全项目三个都要过,但做软件的,核心就是 50128。

二、SIL 等级和软件的关系

EN 50128 沿用 IEC 61508 的 SIL 1~4 分级,但对软件侧的要求更具体:

SIL
典型场景
软件侧核心要求
1
乘客信息系统、显示终端
基本的编码规范和审查
2
辅助监控、非关键控制
结构化开发流程、静态分析
3
联锁逻辑、安全监控
形式化设计、MC/DC覆盖、独立验证
4
安全核心控制、防护系统
100%覆盖、形式化方法、多样化编程

SIL4 是软件侧最高的安全完整性等级。简单说:你的代码如果出了问题,可能直接导致人员伤亡——所以要求最严。

这不是"代码写好一点"就行的事,是整个开发方式都要按标准来。

三、V 模型:每个阶段要交什么

EN 50128 要求用 V 模型开发。左边是设计,右边是验证,左右一一对应。

看这个标准第一遍的时候,觉得就是画个 V 字然后对着填表格。后来发现不是——每个阶段都有必须交付的文档和记录,审计的时候一条条对,缺了就不通过。

V
阶段
必须交付的东西
实际落地方式
软件需求
软件需求规格说明书(SRS)
把系统需求拆成软件能实现的条目
软件架构
架构设计文档(SADD)
模块划分、接口定义、数据流
软件设计
详细设计文档(SDDD)
函数级设计、状态机、调用关系
编码
源代码 + 编码规范符合性记录
写C代码 + MISRA C检查记录
单元测试
测试用例 + 覆盖率报告
gcov/lcov跑覆盖率,SIL4 等级要求 100%
集成测试
集成测试报告 + 接口验证记录
模块间接口、数据流验证
系统验证
系统测试报告 + 安全确认报告
在实际硬件/仿真上跑全场景

注意一件事:左边设计的同时,右边验证的计划就要写好。不是写完代码再想怎么测,是设计阶段就把验收条件定了。这是 V 模型最核心的思路——设计和验证是同步的,不是先做后测。

审计的时候,会对照着看:你的单元测试用例是不是覆盖了详细设计的每一条需求?如果没有,缺了哪条?为什么缺?这些都要解释。

四、SIL4 比别的等级多出来的东西

EN 50128 对 SIL4 有一些其他等级不需要的东西,这些是 SIL4 项目中普遍能感受到的差异:

① 形式化方法

SIL1~3 可以用自然语言写设计文档,SIL4 要求用半形式化或形式化方法描述。

实际做法:状态机图、决策表、结构化文字——不一定要上数学证明,但必须有结构化的表达方式,不能用纯自然语言糊弄。

② 多样化编程(Diverse Programming)

SIL4 要求关键软件有独立的二次实现,用不同的人、不同的方法,确保同一个需求不会以同样的方式出错。

实际做法:不是所有模块都要双写,而是安全功能模块要有多样化设计——可以是一个主程序+一个独立监控器,架构上做冗余。

③ 独立验证与评估(IV&V)

SIL4 要求验证由独立于开发团队的人员执行。自己写的代码不能自己审。

实际做法:代码审查必须有非编写者的签名。单元测试可以开发自己跑,但集成测试和系统验证必须独立团队执行。

④ 100% 软件代码覆盖率

SIL1~3 对覆盖率有递增要求,SIL4 要求语句覆盖 + 分支覆盖 + MC/DC 全部 100%

这个我在上一篇详细写过了,不重复。只想说一句:100% 不是目标,是底线——因为安全关键系统的每一行代码,都必须被证明是对的。

五、标准要求 vs 开发者每天做的事

标准写的是"要做什么",翻译成"开发者每天做什么":

标准要求
实际落地方式
编码规范符合性
MISRA C:2012 检查,Cppcheck + AI 审查
静态分析
Jenkins 跑 Cppcheck,每次提交自动触发
代码审查
AI 初审 + 人工终审,审查记录要存档签名
单元测试 + 覆盖率
gcov/lcov,Jenkins 门禁卡 100%
配置管理
SVN 版本管理,每个变更要有问题单关联
工具鉴定
编译器、测试工具都要做工具鉴定记录(TQE)
变更管理
改一行代码 = 问题单 + 审查 + 回归测试 + 记录存档

这些不是选做的,是每条都要做、每条都要有记录。审计的时候,如果某条找不到记录,就是不符合项(Non-Conformity)。

六、SIL4 等级的常见踩坑

坑 1:改一行代码要走完整个变更流程

修一个拼写错误级别的问题,要走:问题单 → 代码修改 → 代码审查 → 回归测试 → 记录存档。

刚开始碰到的时候觉得这也太慢了。后来理解了——你不知道这"一行改动"会不会引发别的什么。流程不是走形式,是逼你想清楚。

坑 2:工具鉴定比写代码还烦

编译器、静态分析工具、测试框架——只要是用来生产安全相关软件的工具,都要做工具鉴定(Tool Qualification),证明这个工具本身不会引入错误。

常见做法:编译器用行业主流版本 + 厂商认证包 + 已知缺陷清单对照。不做鉴定的话,工具产出的一切结果审计都不认。

坑 3:审查记录比代码本身还长

标准要求"每条代码变更都要有审查记录"。实际执行下来,一个模块的审查记录页数可能比代码文件还长。

推荐做法:用 AI 先做一轮自动审查,把发现的问题和审查结论生成记录模板,人只需要在上面补充和签名。审查记录从 2 天缩短到半天。

七、EN 50128 和 ISO 26262 的关键区别

如果你同时了解 ISO 26262,这里标几个核心差异:

对比项
EN 50128(轨交)
ISO 26262(汽车)
安全等级
SIL 1~4
ASIL A~D + QM
危害分析
基于风险矩阵(严重度+频率+规避)
HARA(严重度+暴露率+可控性)
最高等级要求
多样化编程 + 形式化方法
ASIL 分解 + MC/DC 覆盖
代码覆盖率
SIL4:语句+分支+MC/DC 全100%
ASIL D:语句+分支+MC/DC
工具鉴定
所有工具都要做 TQE
TCL 1~3 分级,TCL3 才需鉴定
行业特点长生命周期(30年)、修改极少、安全第一
迭代较快、成本敏感、量产

最关键的区别在最后一行:轨交系统生命周期 30 年,代码写完可能十几年都不动,但一旦出事就是大事。所以标准对"过程可追溯"的要求比汽车更严——不是为了创新,是为了几十年后还能证明"当时的代码是对的"。

而汽车行业迭代快,ISO 26262 在流程上给了一些弹性。但 ASIL D 和 SIL4 的核心要求本质上是一致的:证明你的代码不会在安全场景下失效。

八、如果你想入行功能安全

碰到过 SIL4 项目的人回头看,几个建议:

建议
为什么
1
先读 EN 50128 正文
标准本身是最好的教材,虽然读起来痛苦。从 Annex A(SIL 等级要求表)开始看
2
理解 V 模型,不只是画图
V 模型不是流程图,是每个阶段要交付什么、怎么验证的契约
3
找一份实际的交付物模板看看
SRS/SADD/SDDD 长什么样,看一份真实的就明白了,比读标准快 10 倍
4
不要觉得流程是负担
流程是帮你少犯错的。不按流程来,出了事你连自己怎么错的都不知道

EN 50128 这篇写得比较"实",因为没有太多理论要讲——对着标准写代码、跑审查、做交付物,核心就是:标准不复杂,复杂的是每一条都做到位

如果这篇让你对功能安全标准有了更具体的认识,点个在看。

我是会摸鱼的程序员,在一家做控制系统的公司写嵌入式 C,研究怎么用 AI 把重复工作干掉。

相关学习资料