Therac-25案例

Therac-25案例

Therac-25事件是在軟體工程界被大量引用的案例。Therac-25是Atomic Energy of Canada Limited所生產的一種輻射治療的機器。由於其軟體設計時的瑕疵,致命地超過劑量設定導致在1985年6月到1987年1月之間,六件已知的醫療事故中,患者死亡或嚴重輻射灼傷。事後的調查發現整個軟體系統沒有經過充分的測試,而最初所做的Therac-25全分析報告中有關係統安全分析只考慮了系統硬體,沒有把計算機故障(包括軟體)所造成的隱患考慮在內。

設計

該機提供三种放射治療模式:

1、直接電子束治療,其中通過磁體在治療區域上掃描窄電流的高能(5MeV至25MeV)電子束;

2、Megavolt X射線治療,通過將一個狹窄的100倍電流的25 MeV電子束與目標相撞,產生固定的寬X射線束,然後將發射的X射線通過平坦濾波器和準直器;

3、“場光”模式,通過用可見光照射治療區域,使患者能夠正確定位。

問題描述

當X射線模式產生的高電流電子束直接傳遞給患者時,發生了六起事故。兩個軟體故障是罪魁禍首:一,當操作員在快速切換到電子模式之前錯誤地選擇X射線模式時,允許將電子束設定為X射線模式而不需要X射線靶。第二個故障允許電子束在場光模式下激活,在此期間沒有光束掃描器處於活動狀態或目標處於適當位置。

以前的型號有硬體互鎖以防止此類故障,但Therac-25已將其移除,取決於軟體檢查的安全性。

高電流電子束以大約100倍的預期輻射劑量擊中患者,並且在較窄的區域內,提供可能致命劑量的β輻射。患者Ray Cox將這種感覺描述為“強烈的電擊”,導致他尖叫並跑出治療室。幾天后,出現放射性燒傷,患者出現放射性中毒症狀;在三例中,受傷的患者後來因過量服用而死亡 。

根本原因

一個委員會的結論是,主要原因應該歸咎於糟糕的軟體設計和開發實踐,而不是明確地發現了幾個編碼錯誤。特別是,該軟體的設計使得實際上不可能以乾淨的自動方式對其進行測試。

調查事故的研究人員發現了幾個原因。這些包括以下制度原因:

1、AECL沒有獨立審查的軟體代碼。

2、在評估機器如何產生預期結果以及存在哪種故障模式時,AECL沒有考慮軟體的設計。這些形成了稱為可靠性建模和風險管理的一般技術的一部分。

3、系統注意到出現了問題並停止了X射線束,但只顯示了“MALFUNCTION”字樣,後跟1到64之間的數字。用戶手冊沒有解釋甚至解決錯誤代碼,因此操作員按下了P鍵覆蓋警告並繼續進行。

4、AECL人員以及機器操作員最初都不相信投訴。這可能是由於過度自信造成的。

5、AECL從未使用軟體和硬體的組合測試Therac-25,直到它在醫院組裝。

研究人員還發現了幾個工程問題:

僅在控制PDP-11計算機的VT-100終端上輸入特定的非標準擊鍵序列時發生故障:“X”到(錯誤地)選擇25 MeV光子模式,然後是“向上游標”,“E”至(正確)選擇25 MeV電子模式,然後“輸入”,均在8秒內完成。[6]這一系列的擊鍵是不可能的,因此這個問題並不經常發生,並且很長時間沒有被注意到。

該設計沒有任何硬體互鎖,以防止電子束在沒有目標的情況下以其高能模式運行。

工程師重用了舊型號的軟體。這種方法在所謂的貨物崇拜節目中表現出來,其中盲目依賴於先前創建的代碼,該代碼被很難理解並且可能適用或可能不適用。這些模型具有掩蓋其軟體缺陷的硬體互鎖。這些硬體安全無法報告它們已被觸發,因此沒有跡象表明存在錯誤的軟體命令。

硬體無法讓軟體驗證感測器是否正常工作(參見開環控制器)。桌位系統是第一個涉及Therac-25失敗的系統;製造商用冗餘開關對其進行了修改,以交叉檢查其操作。

設備控制任務未與操作員界面任務正確同步,因此如果操作員更快地更改設定,則會出現競爭條件。這在測試過程中被遺漏了,因為在操作員能夠快速工作以觸發此故障模式之前需要一些練習。

軟體通過遞增來設定標誌變數,而不是將其設定為固定的非零值。偶爾會發生算術溢出,導致標誌返回零並且軟體繞過安全檢查。

該軟體是用彙編語言編寫的,可能需要更多關注測試和良好的設計。但是,語言本身的選擇並未列為報告中的主要原因。該機器還使用了自己的作業系統。

Leveson指出,從事件中吸取的教訓是不要假設重複使用的軟體是安全的:“通常假設重複使用軟體或使用商業現成的軟體會增加安全性,因為軟體將被運用重複使用軟體模組並不能保證它們被轉移到的新系統的安全性......“這種對軟體編碼範式知之甚少的盲目信仰被稱為貨物崇拜編程。針對與Therac-25相關的事件,創建了IEC 62304標準,該標準引入了醫療設備軟體的開發生命周期標準,以及使用未知譜系軟體的具體指導。

相關詞條

相關搜尋

熱門詞條

聯絡我們