內(nèi)容提要:隨著軟件功能復(fù)雜性的提升以及軟件供應(yīng)鏈的成熟,醫(yī)療器械獨立軟件開發(fā)時使用現(xiàn)成軟件組件的情況越來越普遍?,F(xiàn)成軟件通常是指企業(yè)沒有進行完整生存周期管理的軟件,而企業(yè)難以對現(xiàn)成軟件的運行邏輯、缺陷漏洞等進行把控,因此其使用風(fēng)險相對較高。文章以最常使用的開源軟件為例,從醫(yī)療器械質(zhì)量管理體系的角度出發(fā),在軟件生存周期的重點環(huán)節(jié)提出了質(zhì)量控制的相關(guān)建議。
現(xiàn)成軟件通常指的是醫(yī)療器械注冊人沒有進行完整生存周期控制的軟件[1]。從定義來看,現(xiàn)成軟件的范圍非常廣泛,不僅包括對軟件起到支持作用的外部軟件環(huán)境,如操作系統(tǒng)(如Windows)、中間件(如MySQL)、軟件開發(fā)與測試工具(如Pycharm)等,還包括包含在醫(yī)療器械軟件中的組件,也稱現(xiàn)成軟件組件。與外部軟件環(huán)境不同,現(xiàn)成軟件組件是醫(yī)療器械軟件的組成部分,可以實現(xiàn)一部分醫(yī)療器械功能?,F(xiàn)成軟件組件從來源上可以分為成品軟件、外包軟件和遺留軟件三類[1]。其中,成品軟件與外包軟件可類比標準品與定制品,區(qū)別在于外包軟件實質(zhì)是一種定制化委托開發(fā)的產(chǎn)品,而成品軟件則是供應(yīng)商已經(jīng)開發(fā)完成的產(chǎn)品。
開源軟件是成品軟件的一種特殊情形。區(qū)別于商業(yè)成品軟件,開源軟件是通過開放協(xié)作開發(fā)和維護的軟件,通常是免費提供的,可供任何人使用、檢查、修改和重新分發(fā)。隨著軟件功能復(fù)雜性的提升以及軟件供應(yīng)鏈的成熟,大量企業(yè)在軟件開發(fā)時都會用到開源組件來減少重復(fù)開發(fā),提高開發(fā)資源的使用效率[2]??紤]到醫(yī)療器械軟件失效可能會給患者和醫(yī)生帶來不可接受的風(fēng)險,且企業(yè)難以對現(xiàn)成軟件的運行邏輯、缺陷漏洞等進行把控,因此本研究以開源組件為例,從醫(yī)療器械質(zhì)量管理體系的角度,在設(shè)計開發(fā)的各個環(huán)節(jié),提出相應(yīng)的質(zhì)量控制建議,為業(yè)內(nèi)及監(jiān)管人士提供參考。
1.監(jiān)管現(xiàn)狀
1.1 現(xiàn)成軟件的法規(guī)標準
目前,各國監(jiān)管機構(gòu)均關(guān)注到了醫(yī)療器械現(xiàn)成軟件的質(zhì)量管理,并制定了一系列指南、標準等文件。表1 列舉了不同文件中現(xiàn)成軟件的名詞與含義。不同文件中的定義存在一些差異,如未知來源軟件(Software of the Unknown Prevalence,SOUP),不包括那些第三方開發(fā)的、為了包含到醫(yī)療器械內(nèi)的軟件,但這部分軟件屬于現(xiàn)成軟件(Off-the-Shelf Software,OTSS)??梢钥闯?,我國的《醫(yī)療器械軟件注冊審查指導(dǎo)原則(2022 年修訂版)》(下簡稱《軟件指導(dǎo)原則》)中“現(xiàn)成軟件”的范圍是最廣的,包含了其他文件中的所有情形。雖然定義存在差異,但不同文件中質(zhì)量管理的方法仍值得學(xué)習(xí)。為了不產(chǎn)生混淆,下文統(tǒng)一使用“現(xiàn)成軟件”這一名稱,不再對這幾種名詞進行區(qū)分。
雖然不同文件中的定義存在差異,但質(zhì)量控制的要求基本一致。美國食品藥品監(jiān)督管理局在1999 年發(fā)布了現(xiàn)成軟件使用的指南,經(jīng)多次修訂后,2023 年版的指南建議注冊人從需求、驗證、風(fēng)險管理、維護和更新幾方面,基于風(fēng)險等級提交不同詳盡程度的現(xiàn)成軟件研究文檔[5]。類似的,我國《軟件指導(dǎo)原則》也要求注冊人從設(shè)計開發(fā)到售后維護的全生命周期對現(xiàn)成軟件進行質(zhì)控,重點關(guān)注采購、設(shè)計開發(fā)和上市后監(jiān)測方面[1]。YY/T 0664和IEC 62304則從軟件生存周期過程控制的角度,規(guī)定了各個階段現(xiàn)成軟件的活動要求,如在設(shè)計開發(fā)計劃階段將現(xiàn)成軟件納入配置項、結(jié)構(gòu)設(shè)計階段規(guī)定現(xiàn)成軟件的硬件和軟件環(huán)境要求等[3,4]。除此之外,目前國內(nèi)外尚無細則研討如何具體地對現(xiàn)成軟件開展管理。
1.2 開源軟件的風(fēng)險
根據(jù)開放源代碼促進會(Open Source Initiative,OSI)的定義,開源不僅僅是“開放源代碼”,還擁有自由分發(fā)、允許修改、限制未經(jīng)修改的源代碼的重新分發(fā)以保護原作者代碼的完整性、許可協(xié)議必須技術(shù)中立等特點,這些特點賦予了它高度的透明度和靈活性[6]。
開源軟件“全開放”的特性,也帶來了一些安全管理上的挑戰(zhàn),其風(fēng)險主要包括以下方面:①代碼來源不可控。開源軟件的源代碼可被任何人獲取和修改,由于缺乏嚴格的準入機制,惡意攻擊者可能會將惡意代碼提交到開源項目的代碼倉庫中。②供應(yīng)鏈風(fēng)險。開源軟件的漏洞在供應(yīng)鏈上具有傳播性,比如目前影響最為嚴重的Log4Shell 漏洞事件[7]。此外,非官方的分發(fā)渠道也可能引入額外的風(fēng)險。③知識產(chǎn)權(quán)風(fēng)險。開源軟件的使用需要遵循開源許可協(xié)議,如BSD、MIT、Apache 2.0、GPL協(xié)議等。如果使用開源軟件時忽視了不同開源許可協(xié)議的要求,可能會帶來知識產(chǎn)權(quán)的糾紛,帶來不必要的損失與風(fēng)險。
根據(jù)美國新思科技發(fā)布的《2023年開源安全和風(fēng)險分析報告》[8],醫(yī)療保健、健康科技和生命科學(xué)行業(yè)中,代碼庫中開源代碼的百分比達80%,其中約50%的代碼庫含有漏洞。因此,使用開源組件時,應(yīng)當意識到開源組件的風(fēng)險,并在軟件全生命周期中予以控制。
2.現(xiàn)成軟件組件的質(zhì)量控制——以開源軟件為例
本研究基于軟件生存周期模型,結(jié)合開源軟件的特點,在一些關(guān)鍵環(huán)節(jié)提出現(xiàn)成軟件組件的質(zhì)量控制建議。
2.1 設(shè)計策劃與需求分析
不同于自研軟件,注冊人對現(xiàn)成軟件的開發(fā)資料掌握不足,一旦在測試階段發(fā)現(xiàn)該現(xiàn)成軟件不滿足要求,難以通過修改代碼的方式進行修復(fù)。如果涉及更換現(xiàn)成軟件,則可能會導(dǎo)致重新開發(fā),更是開發(fā)資源非常大浪費,因此在設(shè)計策劃與需求階段應(yīng)對現(xiàn)成軟件開展詳細的使用前評估,決定哪些部分使用現(xiàn)成軟件、現(xiàn)成軟件的功能是什么、其他部分如何設(shè)計才能與之兼容等尤為重要。
對于開源軟件而言,開發(fā)者的開發(fā)實力、開源軟件的成熟度、知名度與用戶規(guī)模都與開源軟件的質(zhì)量密切相關(guān)[9]。如果開源軟件是某個行業(yè)的通用庫,用戶群體非常大,通常可以認為此開源軟件的性能是非常穩(wěn)定的,軟件Bug較少且通常能夠得到及時的解決。因此,建議在選擇開源軟件的供應(yīng)商時,評估以下方面:①供應(yīng)商資質(zhì):此軟件的開發(fā)商是否具有較強的軟件開發(fā)能力?②產(chǎn)品成熟度:此軟件的成熟度、知名度、用戶規(guī)模如何?③產(chǎn)品質(zhì)量:此軟件的用戶評價如何?軟件缺陷是否頻發(fā),且有不可接受的風(fēng)險?④開源協(xié)議:我是否能滿足此軟件的開源協(xié)議?⑤開發(fā)文檔:供應(yīng)商是否提供了詳細的開發(fā)文檔,以便我更好地使用此軟件?
除此以外,在設(shè)計策劃與需求分析階段,注冊人還應(yīng)定義對現(xiàn)成軟件的需求,這包括現(xiàn)成軟件功能、性能、接口、網(wǎng)絡(luò)安全、風(fēng)險管理、兼容性、維護更新等方面的需求,以及為了配合現(xiàn)成軟件的使用,其他軟件項的接口、功能、性能、網(wǎng)絡(luò)安全等方面的需求。本研究參照各國監(jiān)管經(jīng)驗,總結(jié)了下列現(xiàn)成軟件使用前應(yīng)當評估的問題,見表2[5,10]。
2.2 軟件驗證
注冊人要根據(jù)現(xiàn)成軟件的測試要求編寫不同類型的測試用例,舉例見表3。需要注意的是,不同的現(xiàn)成軟件要求不同,下面的例子不一定適用所有的現(xiàn)成軟件。為了盡可能在測試階段發(fā)現(xiàn)現(xiàn)成軟件的缺陷,注冊人可以使用等價劃分法、邊界值分析法、錯誤推測法等方法結(jié)合,設(shè)計高質(zhì)量的測試用例。
2.3 軟件更新
變更控制不僅是軟件生存周期質(zhì)量控制的特殊要求,也是醫(yī)療器械質(zhì)量管理規(guī)范與ISO 13485 對過程控制的要求。注冊人應(yīng)在軟件更新控制程序中規(guī)定軟件更新活動的相關(guān)要求,如更新請求、更新策劃、更新實施等。
對于開源軟件,可能發(fā)生的變更包括需求變更、因缺陷修復(fù)引發(fā)的變更以及外部開發(fā)者公布新版本等情況。開發(fā)者公布新版本時,注冊人應(yīng)評估更新內(nèi)容的必要性,但如果涉及重大網(wǎng)絡(luò)安全更新,建議注冊人選擇新版本的軟件。當開源軟件發(fā)生更新后,需要評估更新影響的范圍,是否對其他軟件項或者已經(jīng)采取的風(fēng)險控制措施產(chǎn)生了影響,并開展相應(yīng)的回歸測試。
2.4 軟件維護
軟件維護從時間順序上在正式發(fā)布、上市銷售之后,屬于軟件生存周期的一部分,注冊人需要制定軟件維護計劃,包括收集用戶反饋的流程、解決軟件發(fā)布后問題的流程、使用配置管理程序來管理變更后的軟件等內(nèi)容。
對于現(xiàn)成軟件組件(開源軟件),注冊人可以制定一個定期維護跟蹤的計劃,如定期跟蹤開發(fā)者公布的缺陷清單、或者在開發(fā)階段確定的需要定期驗證的事項等。
在軟件正式發(fā)布之后,如果涉及對已上市軟件的更新,注冊人除按照變更控制程序發(fā)起、批準、執(zhí)行、驗證變更外,還應(yīng)按照法規(guī)和信息告知程序,告知用戶和/ 或監(jiān)管機構(gòu)已發(fā)布醫(yī)療器械軟件中的任何問題以及不變更繼續(xù)使用的后果,并制定安裝更新的指導(dǎo)文件。
2.5 缺陷管理
高質(zhì)量的軟件開發(fā)離不開清晰明確的缺陷管理流程,注冊人需要在缺陷管理制度中確定軟件缺陷評估、修復(fù)、回歸測試、風(fēng)險管理、配置管理、評審等活動的要求。
注冊人在使用開源軟件時,可以通過開發(fā)者自行公布的問題清單、開發(fā)者論壇、第三方漏洞庫等多種渠道了解軟件缺陷,形成該軟件的已知問題清單。注冊人應(yīng)當對問題清單進行評估,從風(fēng)險管理的角度,分析已知的缺陷是否有可能造成危險情況的事件序列[4]。此外,如果注冊人判定需要對已知缺陷進行修復(fù),就應(yīng)判定缺陷修復(fù)影響的范圍并開展回歸測試,并按照流程更新相關(guān)配置項和版本。
2.6 配置管理
軟件配置管理是一種標識與控制修改的技術(shù),使軟件的變更在開發(fā)過程中處于可控的狀態(tài)。軟件配置管理應(yīng)當建立控制程序并形成文件,規(guī)范軟件版本、源代碼、文件、工具等控制要求,確定配置標識、變更控制、配置狀態(tài)記錄等活動要求。
從配置管理的角度來說,開源軟件的管理與其他類型的現(xiàn)成軟件組件并無不同。現(xiàn)成軟件組件是軟件的一部分,應(yīng)當作為軟件的配置項加以識別。為了易于識別、控制與管理,配置標識一般包括軟件名稱、供應(yīng)商、版本、發(fā)布日期等[4]。配置內(nèi)容通常是已編譯的文件。當現(xiàn)成軟件組件發(fā)生變更時,應(yīng)當按照配置管理控制程序的要求對配置狀態(tài)的變化進行記錄,如在現(xiàn)成軟件組件的變更評審關(guān)閉后,由配置管理人員對變更后的現(xiàn)成軟件組件進行歸檔,更改配置標識,記錄當前配置狀態(tài)。
2.7 版本控制
軟件沒有實體,無法從外觀或結(jié)構(gòu)上觀察到軟件的變化,所以軟件版本是一種標識軟件狀態(tài)的工具。軟件版本與軟件是表里的關(guān)系,當軟件發(fā)生變化時軟件版本也應(yīng)隨之變化[11]。
現(xiàn)成軟件組件是產(chǎn)品的組成部分,其更新也應(yīng)體現(xiàn)在軟件版本的變化中。因此,注冊人在設(shè)計開發(fā)階段,應(yīng)當明確使用的開源軟件的版本,并將開源軟件作為配置項管理。此外,注冊人還應(yīng)制定軟件版本命名規(guī)則,涵蓋開源軟件的更新類型,各字段含義應(yīng)當明確且無歧義無矛盾。
3.小結(jié)
本研究以開源軟件為例,概述了現(xiàn)成軟件的國際監(jiān)管現(xiàn)狀與開源軟件的風(fēng)險,并基于軟件生存周期模型,在一些關(guān)鍵環(huán)節(jié)提出現(xiàn)成軟件組件的質(zhì)量控制建議,為業(yè)內(nèi)及監(jiān)管人士提供參考。