4. 软件安全级别与审查策略

在医疗器械软件设计审查中,最忌讳的做法是对所有软件模块采用同一套审查深度。一个负责驱动输液泵电机的控制模块,与一个仅用于显示设备序列号的界面模块,其失效后果相差悬殊。如果对前者审查不足,可能放过致命缺陷;如果对后者过度审查,则浪费大量工程资源。因此,审查工程的第一项决策就是:根据软件失效可能造成的风险,为每个软件项确定安全级别,并据此分配审查资源。

一、A、B、C三级的基本判定逻辑

医疗器械软件的安全级别通常依据两个维度判定:失效后果的严重程度和失效发生的可能性。在审查实践中,更常用的是基于“软件失效是否可能导致不可接受的风险”来划分:

  • A级(高安全级别):软件失效可能导致患者或操作者死亡或严重伤害。例如:放疗剂量控制、输液泵流速调节、呼吸机通气参数控制、除颤能量释放控制。
  • B级(中安全级别):软件失效可能导致轻微伤害,或需要医疗干预才能避免伤害。例如:监护仪报警阈值计算、诊断图像后处理、非关键参数显示。
  • C级(低安全级别):软件失效不会导致伤害,仅影响使用体验或非关键数据记录。例如:设备使用日志记录、界面主题切换、非诊断性数据导出。

需要特别强调的是:安全级别不是对整个产品“一刀切”。同一台设备中,不同软件项可以有不同的安全级别。审查计划必须细化到软件项或软件单元级别,而不是停留在产品级。

二、差异化审查计划的核心维度

确定级别后,审查计划需要在以下维度上做出差异化设计:

审查维度A级B级C级
需求审查逐条追溯至风险控制措施,验证完整性关键需求追溯,抽样验证形式检查,确认无安全相关需求
设计审查架构评审+详细设计评审+独立复核架构评审+关键模块详细评审设计文档完整性检查
代码审查100%代码走查+静态分析+独立验证关键模块100%,其余抽样30%~50%静态分析+抽样10%~20%
测试验证单元+集成+系统+边界+故障注入单元+集成+系统+关键边界系统功能测试
追溯性需求-设计-代码-测试全链路双向追溯关键链路追溯基本追溯

这张表是审查计划设计的骨架。实际执行时,还需要根据软件项的具体功能、复杂度和失效模式进一步细化。

三、抽样策略:不是随机抽,而是风险驱动抽

对于B级和C级软件项,不可能也不需要对所有代码和所有路径进行100%审查。抽样策略必须遵循风险驱动原则,而不是简单随机抽样。具体做法是:

  1. 识别高风险区域:与安全相关的输入输出、边界条件处理、异常处理、状态机跳转、中断服务程序、通信协议解析。
  2. 强制覆盖高风险区域:这些区域必须100%审查,不参与抽样。
  3. 对剩余区域分层抽样:按模块复杂度、变更频率、历史缺陷密度分层,复杂度高或近期变更的模块提高抽样比例。
  4. 记录抽样依据:每个被抽中的样本应说明为何被选中,未抽中的区域应说明风险可接受的理由。
示例:某B级软件项共120个函数,其中18个函数涉及报警阈值计算和输出控制,属于高风险区域,必须100%审查。剩余102个函数按复杂度分为三层:高复杂度32个抽60%,中复杂度45个抽40%,低复杂度25个抽20%。最终审查函数数量为18+19+18+5=60个,抽样比例约50%。

四、验证强度:从“测过”到“证明足够安全”

验证强度不仅取决于测试用例数量,更取决于测试设计的严格程度。A级软件项的验证必须能够回答:“如果软件失效,风险控制措施是否仍然有效?”因此需要引入故障注入测试和边界值强制覆盖。B级软件项重点验证关键功能路径和异常处理。C级软件项以功能确认和回归测试为主。

验证强度的另一个体现是独立验证。A级软件项的关键模块应由未参与开发的独立人员执行审查和测试,避免“自己查自己”的盲区。B级软件项可由同团队不同成员交叉验证。C级软件项可由开发人员自测加同行抽查。

五、审查计划与抽样策略的联动关系

安全级别决定了审查计划的整体框架,而抽样策略和验证强度是审查计划在资源约束下的具体落地方式。三者之间的关系可以用下面的SVG来直观表达:

软件安全级别 → 审查计划 → 抽样与验证强度 联动模型 失效风险判定 A级 死亡或严重伤害 如:剂量控制、流速调节 B级 轻微伤害或需干预 如:报警计算、图像后处理 C级 无伤害,仅体验影响 如:日志记录、主题切换 差异化审查计划 A级审查包 • 需求逐条追溯至风险控制 • 架构+详细设计+独立复核 • 100%代码走查+静态分析 • 故障注入+边界强制覆盖 B级审查包 • 关键需求追溯+抽样验证 • 架构评审+关键模块详审 • 关键模块100%,其余30%~50% • 单元+集成+系统+关键边界 C级审查包 • 形式检查,确认无安全需求 • 设计文档完整性检查 • 静态分析+抽样10%~20% • 系统功能测试+回归 抽样与验证强度 A级:100%覆盖 全量审查 + 独立验证 + 故障注入 B级:风险驱动抽样 高风险100% 其余30%~50% C级:低强度抽样 10%~20% 功能确认 + 回归 抽样原则 1. 高风险区域强制100%覆盖 2. 按复杂度/变更频率分层 3. 记录抽样依据与未抽理由 4. 独立验证随级别递增

六、审查计划落地时的常见误区

误区一:级别定完就束之高阁。安全级别应随设计变更动态调整。如果B级模块新增了与安全相关的功能,必须重新评估级别并升级审查计划。

误区二:抽样变成“抽熟人”。抽样必须基于风险分层,不能因为某个模块代码写得漂亮就少查,也不能因为某个开发人员资历浅就多查。抽样对象是代码和设计,不是人。

误区三:验证强度只看用例数量。100个只覆盖正常路径的用例,不如20个覆盖边界和异常路径的用例。A级软件项的验证必须包含“如果这里失效,风险控制是否还成立”的追问。

审查计划中必须明确记录每个软件项的安全级别判定依据、抽样比例、抽样规则和验证强度要求。这份记录本身就是设计审查的重要输出,也是后续监管核查的关键证据。

总结来说,A、B、C三级不是标签,而是审查资源的分配依据。级别越高,审查越深、抽样越密、验证越严、独立性越强。审查工程师的核心能力,就在于把有限的审查资源精准投放到真正影响患者安全的地方。