Therac-25事件檢視原始碼討論檢視歷史
Therac-25事件是在軟件工程界被大量引用的案例。Therac-25是加拿大原子能有限公司(AECL)所生產的放射線療法機器,在Therac-6和Therac-20之後推出(以往的Therac-6和Therac-20是加拿大原子能有限公司和法國的CGL公司合作開發)。在1985年到1987年之間,在美國及加拿大至少有六起和Therac-25相關的醫療事故[1],因為軟件設計時的瑕疵,使病人受到了過量的輻射。軟件的瑕疵是因為競爭危害(二個同時進行程式之間時序衝突造成的問題),有瑕疵時會使病患接受到比正常劑量高一百倍的輻射,因此造成患者死亡或重傷。
此一事故突顯了安全關鍵系統若使用軟件控制時的潛在危險性,也是軟件工程及醫學信息學的經典案例。另外因為工程師的過度自信,而且沒有進行適當的盡職調查來修復已知的軟件問題,這也是一個極端的例子,工程師因為對其初期的工程過度自信,沒有相信終端用戶提出的問題,最後產生了嚴重的結果。Therac-25事件也因而喚醒軟件開發工程化管理方法論的省思。
設計
Therac-25可以進行二種放射線療法:
- 直接電子束療法,會在短時間內給予短劑量的高能(5 MeV至25 MeV)電子束。
若是要進行直接電子束療法,設備會直接產生低能量的電子束,利用電磁鐵掃描方式讓電子束分散到安全的劑量範圍。若是要進行百萬伏特級X射線療法,設備會轉動四個零件調整電子束的路徑,使電子束進入X射線腔中,而X射線腔也有設備會偵測電子束的強度。
問題描述
此事件發生時,所發射的是高能量的電子束,而不是預期的低能量電子束,而且設備對應的零件沒有讓電子束進入X射線腔中。以前的機種有硬件互鎖機制以避免這種情形發生,而Therac-25取消了硬件互鎖機制,為了安全起見改用軟件的互鎖機制。軟件互鎖機制在有競爭危害時會失效。其缺陷如下:有一個測試程序中一字節的計數器常常會溢位,若操作員恰好在計數器溢位時輸入命令,軟件互鎖機制會失效[2]。
高能量的電子束給予的能量是理想輻射劑量的100倍,是可能會造成β輻射的致命劑量。患者Ray Cox描述其感覺像「強烈的電擊」,他因此尖叫跑出診療室。幾天後病人開始出現輻射灼傷,病人也開始出現輻射過量的症狀,其中有三個病患後來因為輻射過量而死亡。
視頻
Therac-25事件 相關視頻
參考文獻
- ↑ 放療事故回顧:Therac-25案例 ,搜狐,2020-07-10
- ↑ 軟件工程的史前時代 -- Therac-25 事件,知乎