内容提要:随着软件功能复杂性的提升以及软件供应链的成熟,医疗器械独立软件开发时使用现成软件组件的情况越来越普遍。现成软件通常是指企业没有进行完整生存周期管理的软件,而企业难以对现成软件的运行逻辑、缺陷漏洞等进行把控,因此其使用风险相对较高。文章以最常使用的开源软件为例,从医疗器械质量管理体系的角度出发,在软件生存周期的重点环节提出了质量控制的相关建议。
现成软件通常指的是医疗器械注册人没有进行完整生存周期控制的软件[1]。从定义来看,现成软件的范围非常广泛,不仅包括对软件起到支持作用的外部软件环境,如操作系统(如Windows)、中间件(如MySQL)、软件开发与测试工具(如Pycharm)等,还包括包含在医疗器械软件中的组件,也称现成软件组件。与外部软件环境不同,现成软件组件是医疗器械软件的组成部分,可以实现一部分医疗器械功能。现成软件组件从来源上可以分为成品软件、外包软件和遗留软件三类[1]。其中,成品软件与外包软件可类比标准品与定制品,区别在于外包软件实质是一种定制化委托开发的产品,而成品软件则是供应商已经开发完成的产品。
开源软件是成品软件的一种特殊情形。区别于商业成品软件,开源软件是通过开放协作开发和维护的软件,通常是免费提供的,可供任何人使用、检查、修改和重新分发。随着软件功能复杂性的提升以及软件供应链的成熟,大量企业在软件开发时都会用到开源组件来减少重复开发,提高开发资源的使用效率[2]。考虑到医疗器械软件失效可能会给患者和医生带来不可接受的风险,且企业难以对现成软件的运行逻辑、缺陷漏洞等进行把控,因此本研究以开源组件为例,从医疗器械质量管理体系的角度,在设计开发的各个环节,提出相应的质量控制建议,为业内及监管人士提供参考。
1.监管现状
1.1 现成软件的法规标准
目前,各国监管机构均关注到了医疗器械现成软件的质量管理,并制定了一系列指南、标准等文件。表1 列举了不同文件中现成软件的名词与含义。不同文件中的定义存在一些差异,如未知来源软件(Software of the Unknown Prevalence,SOUP),不包括那些第三方开发的、为了包含到医疗器械内的软件,但这部分软件属于现成软件(Off-the-Shelf Software,OTSS)。可以看出,我国的《医疗器械软件注册审查指导原则(2022 年修订版)》(下简称《软件指导原则》)中“现成软件”的范围是最广的,包含了其他文件中的所有情形。虽然定义存在差异,但不同文件中质量管理的方法仍值得学习。为了不产生混淆,下文统一使用“现成软件”这一名称,不再对这几种名词进行区分。
虽然不同文件中的定义存在差异,但质量控制的要求基本一致。美国食品药品监督管理局在1999 年发布了现成软件使用的指南,经多次修订后,2023 年版的指南建议注册人从需求、验证、风险管理、维护和更新几方面,基于风险等级提交不同详尽程度的现成软件研究文档[5]。类似的,我国《软件指导原则》也要求注册人从设计开发到售后维护的全生命周期对现成软件进行质控,重点关注采购、设计开发和上市后监测方面[1]。YY/T 0664和IEC 62304则从软件生存周期过程控制的角度,规定了各个阶段现成软件的活动要求,如在设计开发计划阶段将现成软件纳入配置项、结构设计阶段规定现成软件的硬件和软件环境要求等[3,4]。除此之外,目前国内外尚无细则研讨如何具体地对现成软件开展管理。
1.2 开源软件的风险
根据开放源代码促进会(Open Source Initiative,OSI)的定义,开源不仅仅是“开放源代码”,还拥有自由分发、允许修改、限制未经修改的源代码的重新分发以保护原作者代码的完整性、许可协议必须技术中立等特点,这些特点赋予了它高度的透明度和灵活性[6]。
开源软件“全开放”的特性,也带来了一些安全管理上的挑战,其风险主要包括以下方面:①代码来源不可控。开源软件的源代码可被任何人获取和修改,由于缺乏严格的准入机制,恶意攻击者可能会将恶意代码提交到开源项目的代码仓库中。②供应链风险。开源软件的漏洞在供应链上具有传播性,比如目前影响最为严重的Log4Shell 漏洞事件[7]。此外,非官方的分发渠道也可能引入额外的风险。③知识产权风险。开源软件的使用需要遵循开源许可协议,如BSD、MIT、Apache 2.0、GPL协议等。如果使用开源软件时忽视了不同开源许可协议的要求,可能会带来知识产权的纠纷,带来不必要的损失与风险。
根据美国新思科技发布的《2023年开源安全和风险分析报告》[8],医疗保健、健康科技和生命科学行业中,代码库中开源代码的百分比达80%,其中约50%的代码库含有漏洞。因此,使用开源组件时,应当意识到开源组件的风险,并在软件全生命周期中予以控制。
2.现成软件组件的质量控制——以开源软件为例
本研究基于软件生存周期模型,结合开源软件的特点,在一些关键环节提出现成软件组件的质量控制建议。
2.1 设计策划与需求分析
不同于自研软件,注册人对现成软件的开发资料掌握不足,一旦在测试阶段发现该现成软件不满足要求,难以通过修改代码的方式进行修复。如果涉及更换现成软件,则可能会导致重新开发,更是开发资源非常大浪费,因此在设计策划与需求阶段应对现成软件开展详细的使用前评估,决定哪些部分使用现成软件、现成软件的功能是什么、其他部分如何设计才能与之兼容等尤为重要。
对于开源软件而言,开发者的开发实力、开源软件的成熟度、知名度与用户规模都与开源软件的质量密切相关[9]。如果开源软件是某个行业的通用库,用户群体非常大,通常可以认为此开源软件的性能是非常稳定的,软件Bug较少且通常能够得到及时的解决。因此,建议在选择开源软件的供应商时,评估以下方面:①供应商资质:此软件的开发商是否具有较强的软件开发能力?②产品成熟度:此软件的成熟度、知名度、用户规模如何?③产品质量:此软件的用户评价如何?软件缺陷是否频发,且有不可接受的风险?④开源协议:我是否能满足此软件的开源协议?⑤开发文档:供应商是否提供了详细的开发文档,以便我更好地使用此软件?
除此以外,在设计策划与需求分析阶段,注册人还应定义对现成软件的需求,这包括现成软件功能、性能、接口、网络安全、风险管理、兼容性、维护更新等方面的需求,以及为了配合现成软件的使用,其他软件项的接口、功能、性能、网络安全等方面的需求。本研究参照各国监管经验,总结了下列现成软件使用前应当评估的问题,见表2[5,10]。
2.2 软件验证
注册人要根据现成软件的测试要求编写不同类型的测试用例,举例见表3。需要注意的是,不同的现成软件要求不同,下面的例子不一定适用所有的现成软件。为了尽可能在测试阶段发现现成软件的缺陷,注册人可以使用等价划分法、边界值分析法、错误推测法等方法结合,设计高质量的测试用例。
2.3 软件更新
变更控制不仅是软件生存周期质量控制的特殊要求,也是医疗器械质量管理规范与ISO 13485 对过程控制的要求。注册人应在软件更新控制程序中规定软件更新活动的相关要求,如更新请求、更新策划、更新实施等。
对于开源软件,可能发生的变更包括需求变更、因缺陷修复引发的变更以及外部开发者公布新版本等情况。开发者公布新版本时,注册人应评估更新内容的必要性,但如果涉及重大网络安全更新,建议注册人选择新版本的软件。当开源软件发生更新后,需要评估更新影响的范围,是否对其他软件项或者已经采取的风险控制措施产生了影响,并开展相应的回归测试。
2.4 软件维护
软件维护从时间顺序上在正式发布、上市销售之后,属于软件生存周期的一部分,注册人需要制定软件维护计划,包括收集用户反馈的流程、解决软件发布后问题的流程、使用配置管理程序来管理变更后的软件等内容。
对于现成软件组件(开源软件),注册人可以制定一个定期维护跟踪的计划,如定期跟踪开发者公布的缺陷清单、或者在开发阶段确定的需要定期验证的事项等。
在软件正式发布之后,如果涉及对已上市软件的更新,注册人除按照变更控制程序发起、批准、执行、验证变更外,还应按照法规和信息告知程序,告知用户和/ 或监管机构已发布医疗器械软件中的任何问题以及不变更继续使用的后果,并制定安装更新的指导文件。
2.5 缺陷管理
高质量的软件开发离不开清晰明确的缺陷管理流程,注册人需要在缺陷管理制度中确定软件缺陷评估、修复、回归测试、风险管理、配置管理、评审等活动的要求。
注册人在使用开源软件时,可以通过开发者自行公布的问题清单、开发者论坛、第三方漏洞库等多种渠道了解软件缺陷,形成该软件的已知问题清单。注册人应当对问题清单进行评估,从风险管理的角度,分析已知的缺陷是否有可能造成危险情况的事件序列[4]。此外,如果注册人判定需要对已知缺陷进行修复,就应判定缺陷修复影响的范围并开展回归测试,并按照流程更新相关配置项和版本。
2.6 配置管理
软件配置管理是一种标识与控制修改的技术,使软件的变更在开发过程中处于可控的状态。软件配置管理应当建立控制程序并形成文件,规范软件版本、源代码、文件、工具等控制要求,确定配置标识、变更控制、配置状态记录等活动要求。
从配置管理的角度来说,开源软件的管理与其他类型的现成软件组件并无不同。现成软件组件是软件的一部分,应当作为软件的配置项加以识别。为了易于识别、控制与管理,配置标识一般包括软件名称、供应商、版本、发布日期等[4]。配置内容通常是已编译的文件。当现成软件组件发生变更时,应当按照配置管理控制程序的要求对配置状态的变化进行记录,如在现成软件组件的变更评审关闭后,由配置管理人员对变更后的现成软件组件进行归档,更改配置标识,记录当前配置状态。
2.7 版本控制
软件没有实体,无法从外观或结构上观察到软件的变化,所以软件版本是一种标识软件状态的工具。软件版本与软件是表里的关系,当软件发生变化时软件版本也应随之变化[11]。
现成软件组件是产品的组成部分,其更新也应体现在软件版本的变化中。因此,注册人在设计开发阶段,应当明确使用的开源软件的版本,并将开源软件作为配置项管理。此外,注册人还应制定软件版本命名规则,涵盖开源软件的更新类型,各字段含义应当明确且无歧义无矛盾。
3.小结
本研究以开源软件为例,概述了现成软件的国际监管现状与开源软件的风险,并基于软件生存周期模型,在一些关键环节提出现成软件组件的质量控制建议,为业内及监管人士提供参考。
来源:中国医疗器械信息
关键词:
医疗器械软件