專業精神/Therac-25

The Therac-25 是一款程式編寫不當的放射治療機,在 1980 年代中期給多位患者帶來了過量輻射。[1]
加拿大原子能有限公司 (AECL) 是加拿大政府的皇冠公司,在 1970 年代後期開始開發 Therac-25,並在 1982 年將其完全計算機化並推向醫療保健市場。[1][2] Therac-25 與其他醫用直線加速器(包括其前身 Therac-6 和 Therac-20)一樣,使用高能電子束來破壞腫瘤,而不損傷附近的健康組織。[1] 根據腫瘤是靠近皮膚還是在更深的組織中,Therac-25 將以電子束或 X 射線模式執行。[1] Therac-25 在技術和經濟方面都優於其前身。它採用摺疊式直線加速器,能夠實現更高的能量,並且能夠更好地避免腫瘤附近的健康組織。[1] 摺疊式直線加速器(也稱為“雙程加速器”)佔地面積更小,使用的能量源比傳統加速器便宜。[1]
Therac-25 與其前身 Therac-6 不同,它具有 X 射線和電子束模式,並且與 Therac-20 不同,它可以完全透過軟體控制。[1] 將 X 射線和電子束模式組合到一臺機器中意味著需要將用於 X 射線模式執行的束流擴散板移入和移出束流場。這種漏洞在一些事故中發揮了關鍵作用。[1] 軟體控制是 Therac-25 的賣點。AECL 選擇透過軟體控制許多安全功能,而不是實施所有昂貴的硬體互鎖和感測器。不幸的是,舊硬體和新軟體的拼湊導致了無數安全漏洞。
在 1985 年至 1987 年期間,記錄了六起涉及 Therac-25 的事故,導致患者接受了大量輻射過量。所有這些事件都導致死亡或嚴重傷害。[2]
第一起事故發生在 1985 年 6 月 3 日,地點是佐治亞州馬裡埃塔的肯內斯通地區腫瘤中心。患者被處方在鎖骨區域進行 10 MeV 電子治療,但當機器啟動時,她感到“巨大的熱力... [一種] 赤熱的灼痛感”。治療結束後,沒有明顯的組織損傷跡象,但回家後,該區域開始腫脹,並變得極其疼痛。患者的燒傷一直延伸到她的背部;最終,她不得不切除乳房,並失去了肩膀和手臂的活動能力。在這起事故之後,醫院物理學家向 AECL 詢問是否可以在沒有束流擴散板的情況下進行電子束照射。AECL 錯誤地回應說這是不可能的。[2]
第二起事故發生在 1985 年 7 月 26 日,地點是加拿大安大略省漢密爾頓。患者正在接受臀部附近區域的放射治療。操作員嘗試了六次進行治療,但機器因“H-傾斜”錯誤訊息而關閉。操作員不知道這意味著什麼,但將其報告給了醫院技師。每次嘗試治療後,機器的顯示屏都顯示“無劑量”,但當患者幾個月後死於癌症時,屍檢顯示患者遭受了如此嚴重的輻射灼傷,需要進行髖關節置換手術。這起事故已報告給 AECL。[2]
第三起事故發生在 1985 年 12 月,地點是華盛頓州雅基馬。與第一例類似,患者接受了過量輻射,但沒有找到原因。醫院的技師聯絡了 AECL 詢問此事,但 AECL 回覆說不可能出現過量輻射,也沒有收到過其他事件的報告。[2]
第四和第五起事故發生在 1986 年 3 月和 4 月,地點是德克薩斯州東部癌症中心。這兩起事故相似,因為兩位患者都被處方了電子束照射,但在兩次治療的設定過程中,操作員無意中按下了X代表 X 射線,然後迅速將其更改為E代表電子束,然後開啟束流。兩次顯示屏都顯示故障 54並顯示了一個嚴重不足的劑量。操作員手冊中沒有提到故障 54。在第一次情況下,操作員迅速重啟了治療,但收到了相同的錯誤訊息。這時,患者正在猛烈地敲打治療室的門,並抱怨接受了電擊。醫院關閉了機器一天,在此期間,來自醫院和 AECL 的工程師和技師測試了機器,但無法複製錯誤。在第二次導致另一個明顯過量的事件之後,醫院醫生進行了自己的測試,最終能夠複製錯誤,並確定它是由從 X 射線模式切換到電子束模式的速度引起的。不幸的是,參與這兩起事件的兩名患者都死於輻射暴露。[2]
涉及 Therac-25 的第六起也是最後一起事故發生在 1987 年 1 月,地點是華盛頓州雅基馬。與前三起事故類似,操作員試圖進行治療,但顯示了一個模稜兩可的錯誤訊息。操作員認為沒有或幾乎沒有輻射被髮射,於是再次嘗試。患者再次抱怨灼熱感,並且像上次雅基馬事故一樣,出現了明顯的皮膚髮紅。後來確定患者接受了過量輻射,但仍不清楚它是如何發生的。AECL 開始調查這起事件,並確實發現了更多的軟體錯誤。不幸的是,這位患者在當年 4 月死於與過量輻射相關的併發症。[2]
Therac-25 存在一些工程故障,可以透過使用獨立驗證、正式軟體規範 或更重要的測試來避免。AECL 對這些缺陷的初始響應存在缺陷,直到 1987 年 7 月,也就是第一起事件發生兩年後,FDA 強迫他們釋出糾正措施計劃,他們才做出了重大改變。[1]
Therac-25 的錯誤程式碼,比如臭名昭著的故障 54,沒有在操作手冊中提及,只在維護手冊中有所記載。操作人員也不知道是否有任何錯誤會影響病人安全。最常出現的錯誤資訊並不重要,因此實際嚴重的錯誤有時會被忽略。[1]
在德克薩斯州泰勒的醫院,操作員在機器上貼了一張錯誤程式碼表。它表明故障 54意味著“劑量輸入 2 錯誤”(第 17 頁),這也沒有在任何地方解釋。它原本只供 AECL 內部測試使用,最終一名 AECL 技師解釋說這意味著“劑量過高或過低”(第 17 頁)。[1]
當 AECL 對其他軟體錯誤做出回應時,他們表示文件優先順序很低。直到他們同意更換MALFUNCTION程式碼,在糾正行動計劃中使用更具描述性的錯誤資訊,他們才進一步解決這個問題。[1] 文件是任何複雜軟體系統的重要組成部分,尤其是在錯誤可能對人類生命造成影響的系統中。
從 Therac-20 中重複使用的程式碼導致了在德克薩斯州泰勒發生的意外。錯誤發生在操作員試圖從 X 射線束切換到電子束,然後非常快地開始治療時。如果操作員速度足夠快,在移動光束平坦器後,但 X 射線束關閉且電子束開啟之前,光束就會被啟用。Therac-20 和 Therac-25 使用相同的軟體來控制電子束和 X 射線束之間的切換。但是,如果在 Therac-20 上發生相同的序列,機器只會熔斷並關閉,因為它有硬體互鎖,可以防止 X 射線在沒有光束平坦器的情況下發射。Therac-25 只有軟體互鎖,它們有缺陷。[1]
最初,AECL 對這個問題的解決方案是物理停用所有 Therac-25 操作員鍵盤上的“向上”鍵。然後,如果操作員輸入了錯誤的光束型別,或在任何資料輸入中出錯,他將被迫重新啟動該過程。所有 Therac-25 的硬體和軟體更新作為糾正行動計劃的另一個部分,是在很久以後才進行的。添加了類似於 Therac-20 的硬體互鎖,以防止 X 射線束在沒有光束平坦器的情況下發射,並且軟體錯誤也被修復。[1]
從一個專案複製解決方案到另一個專案而不考慮它們之間的差異,是一種糟糕的工程實踐。 Ariane 5,一種無人駕駛火箭,是程式碼重複使用導致失敗的另一個案例。第一枚試驗火箭在中途爆炸,因為它的軟體來自 Ariane 4。Ariane 5 的初始軌跡與 Ariane 4 截然不同,這種差異導致軟體異常,最終停止了計算,阻止了正確導航,並觸發了自毀機制。[3]

導致雅基馬谷紀念醫院發生第二次過量的錯誤,是 整數溢位 造成的。在治療的設定階段,程式使用計數器來指示輸入的引數是否與規定的治療相匹配。如果引數匹配,計數器的值將被設定為零,並且可以進行治療。否則,計數器會遞增。問題是計數器被儲存為 8 位整數,因此它可以容納的最大值為 255。如果計數器再次遞增,它將環繞回零。如果操作員試圖在計數器環繞回零的精確時間開始治療,那麼他們可能會以錯誤的處方開始治療。[1]
解決方案是選擇一個任意非零數字,當引數不正確時將其分配給計數器,這樣它永遠不會為零,除非正確輸入了處方。[1] 雖然這種計時在測試期間很難發現,但正式的軟體規範可以描述計數器在哪些精確條件下將具有零值。另一個程式設計師對程式碼進行獨立分析也可能能夠發現這個錯誤。
這種職業過失案例引發了關於安全實踐的各種擔憂,尤其是在醫療系統中。兩個重要的話題是醫院工作人員和 AECL 對 Therac-25 事件發生的反應。
與 Therac-25 上市之前的測試非常相似,AECL 對 Therac-25 使用者投訴的反應也不充分。AECL 的傲慢和持續的輕蔑導致他們反覆未能履行職業義務。雖然無視肯尼斯通地區腫瘤中心的第一次聯絡是一種職業失誤,但反覆發生的事件的知識強烈表明存在系統性問題,因此“偶然事件”的說法是站不住腳的。無視單一事件是一種職業失誤;無視一種模式是一種獨立的、公然的職業失誤。
AECL 並沒有履行其作為安全關鍵系統製造商的職業義務,但醫院員工,尤其是負責監督機器的物理學家,也應對此類事故負有責任。鑑於製造商的錯誤資訊可能導致的潛在代價是人的生命,物理學家應該更加懷疑,並進行更多獨立測試。在使用他們的 Therac-25 之前,加拿大多倫多普林斯瑪格麗特醫院的物理學家安裝了一個可以測量機器輸出並在出現故障時關閉機器的槍口。[4] 透過採取這些預防措施,普林斯瑪格麗特醫院展示了極高的職業道德,並防止了潛在的生命損失。在發生事故的醫院,物理學家應該更加努力地進行獨立測試。弗裡茨·哈格是東德克薩斯癌症中心的物理學家和定義 4 職業人士,他是唯一一個嚴格測試 Therac-25 並在實踐中失敗的相同條件下測試 Therac-25 的物理學家。因此,他能夠證明 AECL 不能聲稱這些事件是偶然事件。[4]
如果沒有資訊共享,預防措施和測試是不夠的。不幸的是,普林斯瑪格麗特物理學家們的先見之明只限於他們的醫院。由於他們的醫院沒有發生事故,他們直到 1986 年 3 月在第一次使用者組會議上才分享了他們的槍口想法。[4] 到 1986 年 3 月,六起事故中的五起已經發生了。考慮到當時只有 11 家醫院使用 Therac-25,肯尼斯通地區腫瘤中心的運營商本可以聯絡其他使用者,以低成本共享他們的資訊,並以挽救生命為好處。此外,使用者本可以更早地讓 FDA 介入,以加快監管和糾正行動計劃。