专业精神/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 介入,以加快监管和纠正行动计划。