3. 医疗软件风险分析基础

医疗软件的风险分析不是“写一份风险文档”,而是把危害、危害处境、损害、风险之间的因果链显式化,再用可验证的证据证明风险已被控制到可接受水平。ISO 14971 给出的正是这样一条从“识别”到“评价”再到“控制与验证”的闭环路径。对软件而言,这条路径的特殊之处在于:软件本身不会直接造成伤害,它通过控制或影响物理设备、输出错误信息、延迟或丢失关键数据等方式,改变危害发生的概率或后果严重度。

一、ISO 14971 风险管理流程的主干

ISO 14971 的流程可以概括为五个相互衔接的活动:风险管理计划、风险分析、风险评价、风险控制、剩余风险评价与风险管理报告。它们不是一次性串行,而是随设计变更、需求变更、缺陷修复而迭代。

  • 风险管理计划:明确范围(哪些软件项、哪些临床场景)、职责、风险可接受准则、验证活动与评审要求。计划中必须写清“可接受”的判定方法,例如采用 ALARP(合理可行最低)原则或定量阈值。
  • 风险分析:包括预期用途与安全相关特征的识别、危害识别、危害处境的估计、风险估计。软件常用的分析工具有 FMEA、FTA、HAZOP、软件危害分析(SWHA)以及基于场景的用例分析。
  • 风险评价:对每个风险估计结果与可接受准则比较,判断是否需要控制。
  • 风险控制:按优先级选择控制措施——设计固有安全、防护措施、安全信息。软件中常见的是增加校验、限值、互锁、确认步骤、告警与降级策略。
  • 剩余风险评价与报告:确认控制措施有效后,评价剩余风险是否可接受,并形成可追溯的风险管理文档。

二、软件风险与危害的关系:从“失效”到“损害”的链条

理解软件风险,关键是区分几个层次:软件失效/缺陷(如数组越界、单位换算错误、状态机死锁)→ 危害(如胰岛素泵过量输注、放疗剂量计算偏差)→ 危害处境(患者处于该危害可能造成伤害的条件)→ 损害(低血糖、组织损伤)。软件风险分析要做的,是把这条链条中的每一环都写清楚,并标注可观察、可测试的中间量。

例如,某输液泵软件在“流速设置”模块中,若把 mL/h 误当作滴/min 处理,则可能输出错误流速。这里的软件缺陷是单位换算错误;危害是输注速率过高;危害处境是护士按错误显示值确认并启动;损害是药物过量。风险估计时,需要同时考虑发生概率(该缺陷在正常使用中触发的频率)和后果严重度(过量输注对患者的伤害程度)。

ISO 14971 风险管理闭环与软件 V&V 证据链 风险管理计划 范围 / 准则 / 职责 风险分析 危害识别 / 风险估计 风险评价 与可接受准则比较 风险控制 设计 / 防护 / 信息 剩余风险评价 报告 / 可追溯 设计变更 / 缺陷修复 / 新危害出现时迭代 软件风险因果链(以输液泵单位换算错误为例) 软件缺陷 / 失效 mL/h 误作滴/min 单位换算错误 危害 输注速率过高 显示值与实际不符 危害处境 护士按错误显示值确认 并启动输注 损害 药物过量 患者伤害 风险控制措施 → V&V 验证证据 控制措施(示例) • 单位强制选择与二次确认 • 流速上限硬限值(如 999 mL/h) • 显示值与设定值一致性校验 • 异常时声光告警并暂停输注 V&V 活动(示例) • 单元测试:单位换算边界值 • 集成测试:限值触发与告警 • 系统测试:错误显示值场景 • 可用性测试:护士确认流程 可追溯证据 • 需求 ↔ 风险 ↔ 测试用例 • 测试结果与通过准则 • 缺陷关闭记录 • 剩余风险评价结论

三、风险控制措施与 V&V 的关联:每条控制都要有验证出口

风险控制措施不能停留在“已增加校验”这样的描述上,必须转化为可验证的软件需求,并对应到具体的 V&V 活动。以输液泵单位换算错误为例,控制措施与验证的对应关系可以这样建立:

风险控制措施 转化为软件需求 V&V 活动 通过准则(示例)
单位强制选择与二次确认 流速设置界面必须显式选择单位,确认前不得下发 系统测试 + 可用性测试 未选择单位时无法启动;确认步骤可被记录
流速上限硬限值 软件限值 999 mL/h,超限拒绝并告警 单元测试 + 集成测试 输入 1000 mL/h 时拒绝,告警码正确
显示值与设定值一致性校验 每 100 ms 比对显示值与内部设定值,偏差 > 1% 触发告警 集成测试 + 故障注入 注入偏差后 200 ms 内告警并暂停
异常时声光告警并暂停输注 告警触发后 500 ms 内停止电机 系统测试 + 安全测试 电机停止时间 ≤ 500 ms,告警可听可见

这张表体现了 V&V 与风险管理的核心连接:风险控制措施 → 软件需求 → 测试用例 → 通过准则 → 剩余风险评价。如果某条控制措施找不到对应的测试用例,或者测试用例没有明确的通过准则,那么这条控制措施在风险管理文件中就是不可信的。

四、实际执行中的关键判断

在真实项目中,风险分析最容易出问题的地方有三个。第一,危害识别不充分:只分析软件自身失效,忽略软件与硬件、用户、环境的交互。例如,软件正确输出了流速,但护士因界面信息过载而误读,这仍然是软件相关的危害处境。第二,风险估计缺少依据:概率和严重度不能凭感觉填写,应参考临床数据、历史缺陷、同类产品召回信息或专家判断,并记录判断理由。第三,控制措施与验证脱节:控制措施写了“增加确认步骤”,但测试用例只验证了“界面存在确认按钮”,没有验证“未确认时不能启动”,这就没有覆盖风险控制的实际意图。

实用判断:对每一条风险控制措施,问三个问题——它对应哪条软件需求?哪条测试用例验证它?测试结果如何证明剩余风险可接受?三个问题都能回答,这条控制措施才算闭环。

软件风险分析不是一次性文档工作,而是贯穿需求、设计、编码、测试、上市后监测的持续活动。ISO 14971 提供的是框架和逻辑,真正决定风险控制效果的,是团队是否把每一条危害都追到可验证的软件行为,是否把每一次设计变更都重新纳入风险评价,以及是否用 V&V 证据证明“风险已被控制到可接受水平”这一结论。