醫(yī)療器械軟件制造商必須滿足軟件組件的法定要求,以便“批準(zhǔn)”其醫(yī)療器械軟件上市。
1. 什么是軟件組件(software components)/軟件項(xiàng)目(software items)
IEC 62304對(duì)“軟件組件(software components)”有不同的定義,也被稱為軟件項(xiàng)目(software items):
IEC 62304對(duì)軟件項(xiàng)目(software items)的定義如下:計(jì)算機(jī)程序的任何可識(shí)別部分。因此,軟件項(xiàng)目(software items)包括軟件的所有部分,包括軟件系統(tǒng)(software system)本身和所有軟件單元(software unit)。術(shù)語軟件組件(software components)通常與軟件項(xiàng)目(software items)同義使用,但“軟件系統(tǒng)(software system)”除外,它是一個(gè)軟件項(xiàng)目(software items),但不是一個(gè)軟件組件(software components)。
在MDCG 2019-11指南使用的術(shù)語中,軟件項(xiàng)目(software items)/軟件組件(software components)也被稱為軟件模塊(software modules)。SOUP也是軟件組件(software components),因?yàn)樗鼈円彩擒浖到y(tǒng)(software system)的可識(shí)別部分。
2. 監(jiān)管要求
a) 歐洲
MDR, IVDR
歐盟的法規(guī),如MDR和IVDR,沒有對(duì)軟件組件(software components)提出明確要求。但他們確實(shí)需要一個(gè)軟件架構(gòu)。根據(jù)定義,軟件架構(gòu)是將一個(gè)軟件系統(tǒng)(software system)分解為不同的軟件組件(software components)。
IEC 62304
協(xié)調(diào)標(biāo)準(zhǔn)IEC 62304也要求分解為軟件項(xiàng)目(software items)。它對(duì)SOUPs提出了進(jìn)一步的要求。此外,該標(biāo)準(zhǔn)要求制造商必須:
-將軟件項(xiàng)目(software items)分解為軟件單元(software units)(第5.4章);
-指定這些軟件項(xiàng)目(software items)的接口;
-審查軟件項(xiàng)目(software items)的活動(dòng)是否符合規(guī)定;
-將軟件項(xiàng)目(software items)逐個(gè)集成,并測(cè)試它們的相互作用(第5.7章;集成測(cè)試)。
b) 美國
FDA主要在其“General Principles of Software Validation ”中制定了對(duì)軟件的要求。它沒有區(qū)分單元unit、組件component和模塊module這些術(shù)語。然而,它確實(shí)要求制造商:
-具有“模塊化結(jié)構(gòu)(modular structure)”的軟件架構(gòu);
-“單元(模塊或組件)級(jí)測(cè)試”和;
-對(duì)現(xiàn)成的組件進(jìn)行特殊處理。它已就這一問題發(fā)布了進(jìn)一步的指導(dǎo)意見。
指導(dǎo)文件“Content of the Premarket Submission”規(guī)定了制造商必須提交哪些文件。在其中,F(xiàn)DA還規(guī)定了軟件架構(gòu)(例如,“模塊的詳細(xì)圖表”)。
3. 實(shí)踐的七個(gè)技巧
提示1:確定真實(shí)的軟件組件(software components)
一個(gè)項(xiàng)目是一個(gè)邏輯的或物理的實(shí)體。僅僅在PowerPoint中在任意選擇的類周圍畫一個(gè)框架并稱其為 "組件"是不夠的。
提示2:根據(jù)功能考慮確定組件
一旦你有了軟件需求,你可以開始按功能方面對(duì)這些需求進(jìn)行分組。這有助于根據(jù)功能考慮形成組件。一個(gè)組件應(yīng)該正好執(zhí)行一項(xiàng)任務(wù)。
提示3:盡早準(zhǔn)確地定義接口
在開發(fā)的早期階段確定架構(gòu),從而確定軟件組件(software components)和它們的接口。只有這樣,才有可能讓不同的團(tuán)隊(duì)并行工作。微服務(wù)(Microservices)是組件的一個(gè)例子。有了這些,不同的開發(fā)團(tuán)隊(duì)在針對(duì)指定接口進(jìn)行編程時(shí),甚至可以從不同的技術(shù)和編程語言中獲益。
提示4:使用工具來定義和測(cè)試接口
將接口描述為API。對(duì)于基于網(wǎng)絡(luò)的應(yīng)用,諸如OpenAPI(Swagger API的后繼者)這樣的工具很有幫助。
提示5:確保良好的封裝
軟件組件(software components)應(yīng)該對(duì)功能進(jìn)行封裝,并且只通過定義好的接口來提供這些功能。軟件組件(software components)之間的相互依賴性越弱(“弱耦合”),軟件就越容易維護(hù)和測(cè)試。
提示6:使用現(xiàn)有的組件
首先,使一個(gè)軟件組件(software components)可用的最快方法不是開發(fā)。而是,重復(fù)使用已經(jīng)驗(yàn)證過的組件,如庫和其他SOUP/OTS是有幫助的。制造商如果能在不同的醫(yī)療器械上使用經(jīng)過驗(yàn)證的組件、框架或平臺(tái),則開發(fā)速度會(huì)更快。
提示7:自動(dòng)測(cè)試組件
在極端情況下,制造商追求測(cè)試驅(qū)動(dòng)的開發(fā)方法。至少,他們應(yīng)該從一開始就自動(dòng)測(cè)試所有軟件組件(software components)的所有接口,并將這些測(cè)試作為所有變化的回歸測(cè)試來重復(fù)。
4.結(jié)論
處理軟件組件(software components)/軟件項(xiàng)目(software items)的監(jiān)管要求在各國范圍內(nèi)是相對(duì)同質(zhì)的。專業(yè)的軟件開發(fā)要求制造商:
-盡早準(zhǔn)確地定義軟件架構(gòu);
-識(shí)別組件并指定其接口,以及;
-通過軟件測(cè)試確保組件符合該接口規(guī)范。
專業(yè)開發(fā)不僅是高效的:它能帶來高質(zhì)量的軟件,從而帶來更安全的醫(yī)療器械。