3、IEC 62304标准精讲:软件安全等级分类(A/B/C)、软件开发流程要求、文档与追溯性管理
各位工程师朋友,大家好。今天我们聊聊IEC 62304。说实话,这个标准我看了不下二十遍。每次项目评审前,我都会再翻一遍。为什么?因为它是医疗器械软件的“宪法”。你产品能不能上市,很大程度上取决于你对它的理解深度。
我个人习惯把IEC 62304拆成三块来看:安全等级怎么定、流程怎么走、文档怎么管。今天我们就按这个逻辑来。
3.1 软件安全等级分类:A/B/C到底怎么分?
先问大家一个问题:你写的代码如果出错了,最坏后果是什么?
这个问题,就是安全等级分类的核心。
IEC 62304把软件安全等级分成三类:
| 等级 | 定义 | 后果描述 |
|---|---|---|
| A级 | 不会导致人员受伤 | 最多就是设备不工作,但人没事 |
| B级 | 可能导致非严重伤害 | 需要医疗干预,但不危及生命 |
| C级 | 可能导致死亡或严重伤害 | 直接威胁患者生命 |
嗯,这里要注意。很多人以为“我的设备只是监测,不治疗,所以肯定是A级”。错。我见过一个血氧仪项目,团队一开始定的是A级。后来一分析,如果血氧值显示错误,医生会做出错误判断,患者可能因此延误治疗。最后改成了B级。
怎么定?流程是这样的:
- 先做风险分析(ISO 14971)
- 识别出软件相关的危险情况
- 评估每个危险情况的严重程度
- 取最严重的那个等级,作为整个软件的等级
说白了,就是“木桶原理”。你的软件里最危险的那个功能,决定了整个软件的等级。
3.2 软件开发流程要求:不是让你做样子
很多公司觉得IEC 62304的流程要求就是“写文档”。我告诉你,不是的。流程的目的是让你系统化地降低风险。
标准把开发流程分成几个阶段:
- 软件计划阶段:定目标、定资源、定计划
- 需求分析阶段:把用户需求转化成软件需求
- 架构设计阶段:搭框架,分模块
- 详细设计阶段:每个模块怎么实现
- 编码与测试阶段:写代码、做测试
- 发布与维护阶段:部署、运维、变更管理
每个阶段都有对应的输出物。我建议你把它当成一个检查清单。做完一步,打一个勾。
对于不同安全等级,流程的严格程度是不一样的:
| 活动 | A级 | B级 | C级 |
|---|---|---|---|
| 软件计划 | 需要 | 需要 | 需要 |
| 需求分析 | 需要 | 需要 | 需要 |
| 架构设计 | 可选 | 需要 | 需要 |
| 详细设计 | 可选 | 可选 | 需要 |
| 单元测试 | 可选 | 需要 | 需要 |
| 集成测试 | 需要 | 需要 | 需要 |
| 系统测试 | 需要 | 需要 | 需要 |
你想想看,C级软件连“详细设计”都要做。这意味着什么?意味着你的代码逻辑必须细化到函数级别。我见过一些C级项目,详细设计文档比代码本身还厚。嗯,这其实是对的。
3.3 文档与追溯性管理:你的“护身符”
说到文档,很多人头疼。但我要说,文档不是给别人看的,是给你自己看的。
为什么?因为审核员会问:“你怎么证明你做了你说过要做的事?”
答案就是追溯性矩阵。
追溯性管理,说白了就是一条链:
用户需求 → 软件需求 → 架构设计 → 详细设计 → 代码 → 测试用例 → 测试结果
每个环节都要能对上。比如:
- 需求编号:REQ-001(输液速度误差不超过±2%)
- 设计编号:DES-001(对应模块:速度控制模块)
- 测试编号:TST-001(验证输液速度误差)
审核员随便挑一个需求,你都能拿出对应的设计、代码和测试结果。这才叫追溯性。
文档方面,标准要求至少包括:
- 软件计划文档:包括开发计划、配置管理计划、质量保证计划
- 软件需求规格说明书:功能需求、性能需求、接口需求、安全需求
- 软件架构设计文档:模块划分、接口定义、数据流
- 软件详细设计文档:算法描述、数据结构、状态机
- 测试文档:测试计划、测试用例、测试报告
- 风险管理文档:风险分析、风险控制措施、风险验证
我曾经在一个项目中,审核员要求看“软件变更记录”。我们当时用的是Git,每次提交都有commit message。但审核员说:“我要看的是变更对安全的影响分析。” 嗯,从那以后,我们的commit message里必须包含“是否影响安全等级”这一项。
最后,给大家一个建议。做IEC 62304认证,不要把它当成负担。把它当成一个框架,帮你系统化地管理软件质量。你想想看,如果你的代码真的救了人一命,那这些流程和文档,就是你的“护身符”。
好,今天就聊到这里。下一章我们讲软件风险管理,这是和ISO 14971结合最紧密的部分。到时候我会分享一些实际案例,看看风险分析到底怎么做才不流于形式。