4. 软件安全分级

软件安全分级是医疗器械软件风险管理中最先落地、也最容易被做偏的一步。它的本质不是给软件“贴一个等级标签”,而是回答一个具体问题:当这段软件失效时,伤害可能以多大概率、通过什么路径发生? IEC 62304 给出的 A、B、C 三级,正是围绕“伤害可能性”这一维度建立的判定框架,并直接决定后续开发、验证、确认活动需要做到什么深度。

一、A、B、C 三级的判定定义

IEC 62304 对软件安全级别的定义,核心在于“软件失效是否可能导致伤害”,以及“伤害是否可能在软件失效后发生”:

  • A 级:软件失效不可能导致伤害,或不可能导致超出可接受水平的伤害。典型情形是软件仅用于信息展示、统计、日志记录,且没有任何路径影响患者接触或治疗输出。
  • B 级:软件失效可能导致非严重伤害。伤害可能发生,但后果可逆、可恢复,通常不危及生命,例如轻微用药提醒错误、非关键参数显示偏差。
  • C 级:软件失效可能导致死亡或严重伤害。伤害可能发生且后果严重,例如输液泵速率控制、放疗剂量计算、除颤能量输出、呼吸机通气参数控制。

需要特别强调:分级对象是软件项(software item),而不是整个产品。一个输液泵系统整体可能是 C 级,但其中的日志模块、界面语言切换模块可能只属于 A 级。分级必须落到可独立开发、独立验证的软件单元或软件项上,否则后续裁剪就无从谈起。

二、判定路径:从失效到伤害的因果链

判定不能凭直觉,而应沿着“软件失效 → 系统行为 → 危害 → 伤害”的因果链逐段追问。下面这张图给出了一个可操作的判定路径,把“伤害是否可能发生”和“伤害是否严重”拆成两个连续判断点。

软件安全分级判定路径(基于伤害可能性) 识别软件项及其失效模式 (如:速率计算错误、输出超限) 软件失效是否可能 导致伤害? 否 A 级 不可能导致伤害 是 伤害是否可能为 死亡或严重伤害? 否 B 级 非严重伤害 是 C 级 死亡或严重伤害 判定要点:① 分级对象是软件项,不是整机;② 必须沿“失效→系统行为→危害→伤害”链路追问; ③ 若存在软件控制的风险降低措施,需评估该措施失效后的残余伤害可能性,再定级。

图中两个判断点对应两个关键问题:第一,失效是否可能传导到患者;第二,传导后的伤害是否严重。只有两个问题都回答“是”,才落到 C 级。若第一问为“否”,直接 A 级;若第一问为“是”而第二问为“否”,则为 B 级。

三、分级对开发、验证、确认活动的裁剪影响

分级的意义在于“按风险配置资源”。级别越高,要求的活动越完整、越严格;级别越低,允许合理裁剪。下表给出三类活动在 A、B、C 级下的典型差异,可作为裁剪决策的参考基线。

活动类别 A 级 B 级 C 级
软件开发计划 需要,可简化 需要,含详细设计 需要,含详细设计与追溯矩阵
软件需求分析 需要,可合并 需要,含安全需求 需要,含安全需求与风险控制追溯
软件架构设计 不强制 需要 需要,含接口与隔离设计
单元验证 可裁剪 需要 需要,含覆盖率与边界测试
集成与系统测试 需要 需要,含异常路径 需要,含故障注入与最坏情况
确认活动 基本功能确认 含临床场景确认 含临床场景与风险控制有效性确认
可追溯性 建议 需要 强制,需求—设计—测试—风险全链

裁剪不是“少做”,而是“把力气花在刀刃上”。A 级软件可以不做详细架构和单元验证,但集成测试和基本功能确认仍不可省;C 级软件则必须建立从风险控制措施到测试用例的双向追溯,确保每一条安全需求都有对应的验证证据。

四、实战判定练习

下面给出三个典型软件项,请先自行判定,再看解析。

练习 1:某输液泵的“电池电量显示”软件项。失效表现为电量显示偏高,护士据此延迟更换电池,但泵在低电量时会自动报警并停止输液。

解析:电量显示失效本身不直接控制输液,且低电量报警与停止输液构成独立保护。伤害路径被阻断,判定为 A 级。但需注意:若报警功能也由同一软件项实现且可能同时失效,则需重新评估。

练习 2:某监护仪的“心率趋势图绘制”软件项。失效表现为趋势图曲线错位,医生可能误读趋势,但实时心率数值显示正常且独立。

解析:趋势图错误可能误导临床判断,但实时数值独立且正确,伤害通常可逆、非严重,判定为 B 级。

练习 3:某放疗设备的“剂量计算”软件项。失效表现为计算结果偏高 10%,且该结果直接用于制定照射计划。

解析:剂量计算直接决定照射量,失效可导致过量照射,后果为严重伤害甚至死亡,判定为 C 级。该软件项必须执行完整的开发、验证、确认与追溯活动。

常见误区:把“软件复杂度高”当作定级依据。复杂度影响的是验证深度,不是安全级别。安全级别只由“失效是否可能导致伤害、伤害是否严重”决定。另一个误区是“整机 C 级,所有软件项都按 C 级做”,这会造成大量无效工作量,也掩盖了真正需要重点控制的软件项。

五、分级结果的落地要求

完成分级后,必须把结果写入软件安全分级清单,并与风险管理文件建立关联。清单至少应包含:软件项名称、唯一标识、判定结论、判定依据(失效模式与伤害路径)、对应风险控制措施、以及该级别下裁剪后的活动清单。这样,分级才不是一张静态表格,而是后续开发、验证、确认活动的实际输入。

最后提醒:分级不是一次性的。当软件架构调整、新增功能、或风险分析发现新的伤害路径时,必须重新判定受影响软件项的安全级别,并同步调整其开发与验证活动。分级错了,后面的裁剪就全错了。