QNX軟件公司淺談:醫(yī)療設備安全軟件的10項前提
為醫(yī)療設備爭取上市批準是一項艱辛的任務,制造商必須放眼于純技術性質以外的挑戰(zhàn),集中精力培養(yǎng)以軟件為基礎的醫(yī)療設備開發(fā)所需的環(huán)境和文化。具體來說,應該考慮十項醫(yī)療設備構建和審批的重要前提,但這些前提經(jīng)常被人忽略。
1、安全文化
缺乏安全文化普及的公司,不太可能生產(chǎn)出安全的醫(yī)療產(chǎn)品。安全文化不僅僅是允許工程師提出有關安全問題的文化,而且也是鼓勵他們從安全的角度去考慮每一個決定的文化。一個程序員可能會有這樣的問題:“我可以用A技術或B技術來編寫這個信息交換,但是對如何平衡A的較好性能和B的較高可靠性沒有把握”,并且知道應該和誰來討論這個決定。而我們必須培養(yǎng)這種文化,來鼓勵程序員思考此類問題。
2、專家
我們需要專家。定義一個安全系統(tǒng)必須做什么,并確認它達到了安全要求,都需要專門的培訓和經(jīng)驗。安全系統(tǒng)一定要簡潔,設計一個簡潔的系統(tǒng)對于任何工程師而言都是最大的挑戰(zhàn)。
歸根結底,還是需要相關領域的專家(包括行業(yè)專家、系統(tǒng)架構師、軟件設計師、流程專家、程序員和驗證專家等)來確定要求,選擇合適的設計模式并建立、驗證系統(tǒng)。
這樣的專業(yè)知識是昂貴的,因為它來自經(jīng)驗而非課堂:大學計算機工程本科課程很少涉及嵌入式軟件開發(fā),而教授如何創(chuàng)建足夠可靠性嵌入式系統(tǒng)的課程更是鳳毛麟角。
足夠可靠性:
1)沒有哪個系統(tǒng)是絕對可靠的,我們必須了解如何讓系統(tǒng)實現(xiàn)足夠的可靠性。
2)接受足夠的可靠性能減少開發(fā)費用,并為我們提供可驗證安全指標的方式。
3)如果我們不了解怎樣才算足夠可靠,就可能設計出一個復雜的系統(tǒng),從而故障百出且容易崩潰。
自上世紀九十年代中期以來,軟件設計模式和技術有了很大的進步,但是許多設計人員尚未接觸到這些變化。圖1顯示的是醫(yī)療監(jiān)測設備參考設計每小時故障概率的圖表詳情。借此找出風險所在并準確統(tǒng)計故障概率往往需要高深的專業(yè)知識。
圖1 醫(yī)療監(jiān)測設備參考設計每小時故障概率的圖表
3、流程
IEC 62304注重流程,沒有良好的流程,我們無法證明系統(tǒng)達到了它的安全要求。
對于目前基本上難以衡量的一些內容來說,良好的流程是一個可衡量的相關因素。衡量一個流程是否被遵循比較容易;而評估設計和代碼的質量是否良好就困難得多。雖然不能說一個好的流程就能保證好產(chǎn)品,但好產(chǎn)品不可能源自低劣的流程則是一個眾所周知的十事實。
IEC 62304 列出開發(fā)醫(yī)療設備所需的流程,不是因為這些流程能夠確保安全的產(chǎn)品,而是因為:
A. 它們提供了可以對開發(fā)參數(shù)進行評估的環(huán)境。例如,良好的測試流程有助于測試覆蓋率的統(tǒng)計。沒有這一流程,則不可能對測試覆蓋率作出任何申明。
B. 它們可提供用以保存安全案例證據(jù)鏈的架構?;仡櫺缘厣砂踩咐强赡艿模前嘿F,而且一定會需要重新生成曾存在于項目開發(fā)過程中那些未被保留的證據(jù)。
4、明確的要求
安全指標必須闡明可靠性的程度,以及達到這些程度的限制條件。
FDA已經(jīng)認識到“展示設計和生產(chǎn)常規(guī)的間接流程數(shù)據(jù)的合理性 ”不足以表明軟件的安全性, “注重于展示特定產(chǎn)品設備安全性的設備保證措施”也必不可少。這種展示包含于安全案例中,也反映了上述論題,即優(yōu)質流程的目的不是保證優(yōu)質產(chǎn)品,而是提供用以評估證據(jù)的環(huán)境。
每一個安全案例主要都會提出類似“這一系統(tǒng)將在條件C下,以可靠性B的水平,來操作A,如果不能做A,它會轉移到概率為P的設計安全狀態(tài)下”這樣的聲明。這一聲明及其相應的注意事項都會被列在系統(tǒng)安全手冊中,以便用于系統(tǒng)更高層次的安全案例中。
一個系統(tǒng)的可靠性是指其持續(xù)且 及時準確回應各種情況的能力:是可用性(及時響應要求的頻率)和可靠性(這些響應的正確率)的結合。
安全案例聲明系統(tǒng)的可靠性指標,提供達標的證據(jù)??煽啃灾笜说木窒扌院椭笜吮旧硪粯又匾?。例如,一個醫(yī)療成像系統(tǒng)可以滿足IEC 61508 SIL3要求,實現(xiàn)不超過8小時的持續(xù)工作,8小時后系統(tǒng)必須重置(更新)。由于成像過程通常是短暫的,所以這一限制不會造成不便,哪怕這個系統(tǒng)一天要用 24小時。
5、系統(tǒng)失效
沒有哪個系統(tǒng)對漏洞免疫,特別是Heisenbugs— 那些“曇花一現(xiàn)”,而當我們尋找它們的時候又“消失無蹤”的神秘漏洞, ;失效狀況終究會發(fā)生:我們要建立的系統(tǒng)必須能夠恢復常態(tài)或進入其設計安全狀態(tài)。
表1 缺陷、錯誤和故障分析表
既然所有的系統(tǒng)都將包含缺陷,而缺陷可能導致故障,一個安全系統(tǒng)就必須包含多道防線:
安全關鍵型流程的獨立——找出哪些部件有安全關鍵性,設計時務必保證其不受其它零部件的影響。
防止缺陷演變?yōu)殄e誤——盡管理想的解決途徑是識別并消除代碼故障,但是實際上很難做到。要小心Heisenbug,保證軟件的設計能夠發(fā)現(xiàn)和封閉缺陷,以免它們演變成錯誤。
防止錯誤演變?yōu)楣收?mdash;—相對于軟件來說,諸如復制和多樣化這樣的技術更適用于硬件,然而謹慎使用依然能夠奏效。
故障檢測和恢復——在許多系統(tǒng)中,轉移到預定義的設計安全狀態(tài),并將恢復任務留給更高層次的系統(tǒng)(比如人)是可行的。有些系統(tǒng)則不能如此操作,所以系統(tǒng)必須恢復或重啟。一般而言,在不明確環(huán)境中企圖恢復,不如選擇帶有快速復原的crash-only模式。