為醫(yī)療設(shè)備爭取上市批準(zhǔn)是一項(xiàng)艱辛的任務(wù),制造商必須放眼于純技術(shù)性質(zhì)以外的挑戰(zhàn),集中精力培養(yǎng)以軟件為基礎(chǔ)的醫(yī)療設(shè)備開發(fā)所需的環(huán)境和文化。具體來說,應(yīng)該考慮十項(xiàng)醫(yī)療設(shè)備構(gòu)建和審批的重要前提,但這些前提經(jīng)常被人忽略。
1、安全文化
缺乏安全文化普及的公司,不太可能生產(chǎn)出安全的醫(yī)療產(chǎn)品。安全文化不僅僅是允許工程師提出有關(guān)安全問題的文化,而且也是鼓勵(lì)他們從安全的角度去考慮每一個(gè)決定的文化。一個(gè)程序員可能會(huì)有這樣的問題:“我可以用A技術(shù)或B技術(shù)來編寫這個(gè)信息交換,但是對如何平衡A的較好性能和B的較高可靠性沒有把握”,并且知道應(yīng)該和誰來討論這個(gè)決定。而我們必須培養(yǎng)這種文化,來鼓勵(lì)程序員思考此類問題。
2、專家
我們需要專家。定義一個(gè)安全系統(tǒng)必須做什么,并確認(rèn)它達(dá)到了安全要求,都需要專門的培訓(xùn)和經(jīng)驗(yàn)。安全系統(tǒng)一定要簡潔,設(shè)計(jì)一個(gè)簡潔的系統(tǒng)對于任何工程師而言都是最大的挑戰(zhàn)。
歸根結(jié)底,還是需要相關(guān)領(lǐng)域的專家(包括行業(yè)專家、系統(tǒng)架構(gòu)師、軟件設(shè)計(jì)師、流程專家、程序員和驗(yàn)證專家等)來確定要求,選擇合適的設(shè)計(jì)模式并建立、驗(yàn)證系統(tǒng)。
這樣的專業(yè)知識(shí)是昂貴的,因?yàn)樗鼇碜越?jīng)驗(yàn)而非課堂:大學(xué)計(jì)算機(jī)工程本科課程很少涉及嵌入式軟件開發(fā),而教授如何創(chuàng)建足夠可靠性嵌入式系統(tǒng)的課程更是鳳毛麟角。
足夠可靠性:
1)沒有哪個(gè)系統(tǒng)是絕對可靠的,我們必須了解如何讓系統(tǒng)實(shí)現(xiàn)足夠的可靠性。
2)接受足夠的可靠性能減少開發(fā)費(fèi)用,并為我們提供可驗(yàn)證安全指標(biāo)的方式。
3)如果我們不了解怎樣才算足夠可靠,就可能設(shè)計(jì)出一個(gè)復(fù)雜的系統(tǒng),從而故障百出且容易崩潰。
自上世紀(jì)九十年代中期以來,軟件設(shè)計(jì)模式和技術(shù)有了很大的進(jìn)步,但是許多設(shè)計(jì)人員尚未接觸到這些變化。圖1顯示的是醫(yī)療監(jiān)測設(shè)備參考設(shè)計(jì)每小時(shí)故障概率的圖表詳情。借此找出風(fēng)險(xiǎn)所在并準(zhǔn)確統(tǒng)計(jì)故障概率往往需要高深的專業(yè)知識(shí)。
圖1 醫(yī)療監(jiān)測設(shè)備參考設(shè)計(jì)每小時(shí)故障概率的圖表
3、流程
IEC 62304注重流程,沒有良好的流程,我們無法證明系統(tǒng)達(dá)到了它的安全要求。
對于目前基本上難以衡量的一些內(nèi)容來說,良好的流程是一個(gè)可衡量的相關(guān)因素。衡量一個(gè)流程是否被遵循比較容易;而評估設(shè)計(jì)和代碼的質(zhì)量是否良好就困難得多。雖然不能說一個(gè)好的流程就能保證好產(chǎn)品,但好產(chǎn)品不可能源自低劣的流程則是一個(gè)眾所周知的十事實(shí)。
IEC 62304 列出開發(fā)醫(yī)療設(shè)備所需的流程,不是因?yàn)檫@些流程能夠確保安全的產(chǎn)品,而是因?yàn)椋?/p>
A. 它們提供了可以對開發(fā)參數(shù)進(jìn)行評估的環(huán)境。例如,良好的測試流程有助于測試覆蓋率的統(tǒng)計(jì)。沒有這一流程,則不可能對測試覆蓋率作出任何申明。
B. 它們可提供用以保存安全案例證據(jù)鏈的架構(gòu)?;仡櫺缘厣砂踩咐强赡艿模前嘿F,而且一定會(huì)需要重新生成曾存在于項(xiàng)目開發(fā)過程中那些未被保留的證據(jù)。
4、明確的要求
安全指標(biāo)必須闡明可靠性的程度,以及達(dá)到這些程度的限制條件。
FDA已經(jīng)認(rèn)識(shí)到“展示設(shè)計(jì)和生產(chǎn)常規(guī)的間接流程數(shù)據(jù)的合理性 ”不足以表明軟件的安全性, “注重于展示特定產(chǎn)品設(shè)備安全性的設(shè)備保證措施”也必不可少。這種展示包含于安全案例中,也反映了上述論題,即優(yōu)質(zhì)流程的目的不是保證優(yōu)質(zhì)產(chǎn)品,而是提供用以評估證據(jù)的環(huán)境。
每一個(gè)安全案例主要都會(huì)提出類似“這一系統(tǒng)將在條件C下,以可靠性B的水平,來操作A,如果不能做A,它會(huì)轉(zhuǎn)移到概率為P的設(shè)計(jì)安全狀態(tài)下”這樣的聲明。這一聲明及其相應(yīng)的注意事項(xiàng)都會(huì)被列在系統(tǒng)安全手冊中,以便用于系統(tǒng)更高層次的安全案例中。
一個(gè)系統(tǒng)的可靠性是指其持續(xù)且 及時(shí)準(zhǔn)確回應(yīng)各種情況的能力:是可用性(及時(shí)響應(yīng)要求的頻率)和可靠性(這些響應(yīng)的正確率)的結(jié)合。
安全案例聲明系統(tǒng)的可靠性指標(biāo),提供達(dá)標(biāo)的證據(jù)??煽啃灾笜?biāo)的局限性和指標(biāo)本身一樣重要。例如,一個(gè)醫(yī)療成像系統(tǒng)可以滿足IEC 61508 SIL3要求,實(shí)現(xiàn)不超過8小時(shí)的持續(xù)工作,8小時(shí)后系統(tǒng)必須重置(更新)。由于成像過程通常是短暫的,所以這一限制不會(huì)造成不便,哪怕這個(gè)系統(tǒng)一天要用 24小時(shí)。
5、系統(tǒng)失效
沒有哪個(gè)系統(tǒng)對漏洞免疫,特別是Heisenbugs— 那些“曇花一現(xiàn)”,而當(dāng)我們尋找它們的時(shí)候又“消失無蹤”的神秘漏洞, ;失效狀況終究會(huì)發(fā)生:我們要建立的系統(tǒng)必須能夠恢復(fù)常態(tài)或進(jìn)入其設(shè)計(jì)安全狀態(tài)。
表1 缺陷、錯(cuò)誤和故障分析表
既然所有的系統(tǒng)都將包含缺陷,而缺陷可能導(dǎo)致故障,一個(gè)安全系統(tǒng)就必須包含多道防線:
安全關(guān)鍵型流程的獨(dú)立——找出哪些部件有安全關(guān)鍵性,設(shè)計(jì)時(shí)務(wù)必保證其不受其它零部件的影響。
防止缺陷演變?yōu)殄e(cuò)誤——盡管理想的解決途徑是識(shí)別并消除代碼故障,但是實(shí)際上很難做到。要小心Heisenbug,保證軟件的設(shè)計(jì)能夠發(fā)現(xiàn)和封閉缺陷,以免它們演變成錯(cuò)誤。
防止錯(cuò)誤演變?yōu)楣收稀鄬τ谲浖碚f,諸如復(fù)制和多樣化這樣的技術(shù)更適用于硬件,然而謹(jǐn)慎使用依然能夠奏效。
故障檢測和恢復(fù)——在許多系統(tǒng)中,轉(zhuǎn)移到預(yù)定義的設(shè)計(jì)安全狀態(tài),并將恢復(fù)任務(wù)留給更高層次的系統(tǒng)(比如人)是可行的。有些系統(tǒng)則不能如此操作,所以系統(tǒng)必須恢復(fù)或重啟。一般而言,在不明確環(huán)境中企圖恢復(fù),不如選擇帶有快速復(fù)原的crash-only模式。
6、驗(yàn)證
測試不足以證明可靠性;需要其他方法來補(bǔ)充:形式化設(shè)計(jì)、統(tǒng)計(jì)分析和回顧性設(shè)計(jì)驗(yàn)證等。
測試的設(shè)計(jì)是通過引發(fā)錯(cuò)誤和故障來間接地找出設(shè)計(jì)或?qū)嵤┲械娜毕?。測試的首要作用是對發(fā)現(xiàn)和孤立Bohrbug,即一種即便在調(diào)試程序應(yīng)用時(shí)仍保持不變的連續(xù)重現(xiàn)的漏洞。但是測試在面對Heisenbug時(shí)作用較小,因?yàn)橥蝗毕菰诿看伟l(fā)生時(shí)表現(xiàn)為不同的錯(cuò)誤。
圖2 一臺(tái)醫(yī)療監(jiān)測設(shè)備系統(tǒng)級(jí)故障樹細(xì)節(jié)
在圖2所示的醫(yī)療監(jiān)測設(shè)備系統(tǒng)級(jí)故障樹中,使用的貝葉斯網(wǎng)絡(luò),可以天衣無縫地地融入采用貝葉斯技術(shù)的安全案例之中。
要證明我們的系統(tǒng)滿足其安全要求,我們必須采用包括測試在內(nèi)的多種手段:
靜態(tài)分析-——受到包括FDA在內(nèi)的多家機(jī)構(gòu)的推薦,靜態(tài)分析對于定位可疑代碼十分有價(jià)值。它包含針對編碼標(biāo)準(zhǔn)的語法檢查、故障概率估計(jì)、針對代碼指令的正確驗(yàn)證,以及符號(hào)執(zhí)行(靜態(tài)/動(dòng)態(tài)混合)。
實(shí)地使用和曾用數(shù)據(jù)——對建立可靠性指標(biāo)至關(guān)重要,使用時(shí)間和該段時(shí)間內(nèi)的故障情況的搜集應(yīng)該貫穿整個(gè)產(chǎn)品生命周期:樣本越多,我們對提出的指標(biāo)也就越有信心。
故障輸入——故意輸入故障既可以檢驗(yàn)用來處理錯(cuò)誤檢測的代碼,還可以幫助預(yù)估剩余故障的數(shù)目。和隨機(jī)測試分析一樣,故障輸入的結(jié)果需要細(xì)致的統(tǒng)計(jì)分析。
形式化和半形式化的設(shè)計(jì)驗(yàn)證——傳統(tǒng)上是在執(zhí)行前完成,設(shè)計(jì)驗(yàn)證也可回顧性執(zhí)行。
7、COTS和SOUP
無論是COTS,甚或是SOUP,只要這個(gè)部件有足夠證據(jù)來支持系統(tǒng)的整體安全案例,就可以采用。
建立一個(gè)安全軟件系統(tǒng)的最佳途徑通常不是完全自力更生,因?yàn)檫@樣所承擔(dān)的風(fēng)險(xiǎn)要比建立一個(gè)采用選定COTS(commercial off-the-shelf,商業(yè)成品)零部件的系統(tǒng)要大。建立操作系統(tǒng)、通信棧和數(shù)據(jù)庫需要專門的知識(shí),而相應(yīng)的COTS也許會(huì)有上千萬小時(shí)的使用歷史優(yōu)勢。
雖然如此,對醫(yī)療設(shè)備開發(fā)者來說,COTS軟件通常是SOUP(software of uncertain provenance,不確定出處軟件),因而應(yīng)該謹(jǐn)慎對待。IEC 61508和IEC 62304都假定SOUP會(huì)被用到。關(guān)鍵在于要有充足的可靠證據(jù)來量化SOUP對系統(tǒng)安全指標(biāo)的影響。
這些證據(jù)將包括在實(shí)地使用數(shù)據(jù)、故障歷史記錄和其他歷史數(shù)據(jù)。我們應(yīng)該要求獲得源代碼和測試計(jì)劃,這樣可以利用靜態(tài)代碼分析工具來檢驗(yàn)軟件。供應(yīng)商還應(yīng)該提供用來構(gòu)建軟件的詳細(xì)流程,或者是外部審核員的聲明,肯定這些流程適用于IEC 62304設(shè)備。
8、經(jīng)認(rèn)證的零部件及其供應(yīng)商
具備安全認(rèn)證的零部件,比如通過IEC 61508認(rèn)證的操作系統(tǒng),可以加速開發(fā)和驗(yàn)證,有助于加快審準(zhǔn)步伐。
如果使用COTS,采用獲得相關(guān)批準(zhǔn)的零部件很有幫助。諸如FDA、MHAR、加拿大衛(wèi)生部以及其他國家的同等部門的組織所審批的不是這些零部件,而且面向市場的整個(gè)系統(tǒng)或設(shè)備;即便如此,獲得類似IEC 61508或IEC 62304認(rèn)證的零部件可以簡化審批流程,縮短上市時(shí)間。
要獲得認(rèn)證,a)這些零部件必須在一個(gè)流程和質(zhì)量管理都到位的環(huán)境中進(jìn)行開發(fā),b)它們必須經(jīng)過合理的測試和驗(yàn)證,c) COTS軟件供應(yīng)商必須提供所有必要的文檔,來支持最終設(shè)備獲得批準(zhǔn)。
9、審核員
審核員是我們的朋友,要盡早與他們合作。
在安全軟件開發(fā)的世界中,認(rèn)證審核員是我們的朋友。他們知道我們要如何建立獲得認(rèn)證的流程,也能幫助我們構(gòu)建安全案例。越早讓審核員參與項(xiàng)目幫助我們,日后需要修改的地方就越少,開發(fā)周期的效率也越高。
在把證據(jù)加入安全案例之前,同審核員探索所提出的安全案例論點(diǎn)架構(gòu)尤為有用。如果用類似GSN或BBN這樣的形式化構(gòu)架來表達(dá)論點(diǎn),清晰地將論點(diǎn)架構(gòu)從證據(jù)中分離出來,那么我們就可以問審核員:“若我們給出該論點(diǎn)的證據(jù),你能滿意嗎?”這可以減少審核過程中的意外。
10、產(chǎn)品發(fā)布不是終點(diǎn)
我們對安全系統(tǒng)所肩負(fù)的責(zé)任不會(huì)因產(chǎn)品發(fā)布而終結(jié);它將一直持續(xù)到最后一個(gè)設(shè)備和最后一個(gè)系統(tǒng)的功成身退。
以下數(shù)字雖然有點(diǎn)陳舊,但是有說服力:軟件的更新會(huì)影響其完整性:FDA在1992-1998年間的一項(xiàng)研究表明,在3140個(gè)召回器件中,有242個(gè)(7.7%)是由于軟件故障。其中192個(gè)(幾乎占80%)的故障是由軟件維護(hù)中引入的缺陷引起。
換句話說,這些缺陷是在設(shè)備進(jìn)入市場之后引入的。因此,我們用以確保軟件達(dá)到其安全要求的流程必須包括軟件的整個(gè)生命周期,包括修復(fù)和更新。
評論
查看更多