摘要

  • 1985 年 6 月至 1987 年 1 月期间,共发生六起已知的 Therac-25 事故,涉及大量辐射过量。现有记录证实了严重伤害和死亡,但并未支持将所有后续死亡完全归因于辐射过量,也无法为每位患者确定精确剂量。
  • 两种不同的软件路径已得到充分证实。在 Tyler 事故中,快速编辑治疗模式和能量可能导致显示的治疗参数与机器设置不一致。在第二次 Yakima 事故中,一个 8 位计数器可能归零,并绕过准直器位置检查。前三次事故的确切软件路径仍未知。
  • 更深层的控制失败在于架构。早期的 Therac 机器保留了独立的保护电路和机械连锁。Therac-25 赋予软件更大的安全责任,并未完全复制这些保护措施,从而使软件错误及相关系统状态可能演变为灾难性照射事故。
  • 检测系统在多个层面失效。含糊的消息将危险状况归类为治疗暂停,剂量监测器可能饱和并显示看似剂量不足,频繁的非危险中断训练操作员选择继续,治疗审计记录不完整,不同医院的报告未能及时形成统一的共享事件图景。
  • AECL 负责设计、代码复用、软件文档、危害分析、客户警告及纠正行动计划。医院负责本地操作、患者观察、设备停用及上报。监管机构负责缺陷认定、召回分类及纠正行动审批,但当时美国的报告制度严重依赖制造商,并未规定后来要求的使用设施义务。
  • 修复证据充分但有局限。最终的纠正行动计划增加了不依赖计算机的关闭和转盘连锁,将暂停改为中止,改进了消息,限制了编辑,修复了已知缺陷,并要求进一步测试和安全分析。公开记录中不包含完整的现代化验证包、源代码历史、所有测试结果或长期现场性能数据集。
  • 持久的教训不在于医疗设备必须避免使用软件,而在于绝不允许软件通过单一不受控路径实现灾难性状况。独立的屏障、以危害为导向的需求、真实的交互测试、可操作的警报、审计追踪、快速的跨站点报告以及可供独立审查的纠正行动证据,都是安全案例的必要组成部分。

著名的错误是证据,而非全部解释

Therac-25 被铭记,是因为代码与患者伤害之间的联系异常清晰。这种清晰性很有用,但如果调查始于并止于一个竞态条件或溢出变量,则可能扭曲问责。一个缺陷解释了特定执行路径的行为,但它本身无法解释为何某条路径能将高能束置于不安全配置中、为何物理系统缺乏独立停止机制、为何控制台在大量照射后显示剂量极小或为零、为何训练有素的操作员被允许继续操作、以及为何来自多个设施的警告未能及时汇聚。

Nancy Leveson 和 Clark Turner 在 1993 年发表于《IEEE Computer》的原始调查报告,基于 FDA 材料、加拿大监管记录、信函和诉讼证词,异常明确地指出了其证据局限性。作者记录了六起已知事故、两种软件机制和长期的纠正行动序列,但无法获取 AECL 开发管理、质量控制或每起事件的完整信息。因此,他们的报告支持系统层面的结论,但并不支持围绕该案例积累的所有指控。

官方召回记录提供了一个重要的独立锚点。美国审计总署关于特定设备召回的研究将 Therac-25 列为 I 类召回,涉及五台美国加速器,日期为 1987 年 6 月 3 日,并指出两个软件缺陷可能导致大量辐射过量。该记录比完整的事故历史更为有限。Leveson 和 Turner 报告了 11 台已安装机器,其中五台在美国,六台在加拿大。因此,GAO 的数据应理解为美国召回数量,而非全球 Therac-25 机组数量。

这一区别指向了核心问责问题。制造商无法保证安全关键软件中不包含任何缺陷。但制造商可以决定一个缺陷是否足以产生灾难性能量、是否有独立的物理机制检查机器状态、界面是否传达危险、现场证据是否被保留并合并、以及纠正行动是否针对危害类别而非仅限于最近复现的输入序列。这些事可控的设计和治理选择。

架构将物理安全功能转移到软件中

Therac-25 是一种双模式医用直线加速器。它可以利用加速电子进行浅层治疗,或产生 X 射线进行深层治疗。在光子模式下,机器需要在束流路径中放置靶和束流均整装置。在电子模式下,则需要扫描和其他装置来扩散和控制束流。一个旋转转盘将相关装置移至适当位置。物理危险虽简单明了,但实现复杂:高束流功率加上错误的转盘或准直器状态,可能集中原本应被整形、测量或阻挡的能量。

MIT 保存的转盘描述显示了为什么连锁是安全屏障而非便利功能。三个微动开关将位置报告给计算机。计算机定位并检查转盘。在视场光位置,一个用于患者对准的镜子位于束流路径中,且不应存在电离室,因为不应有治疗束。传统的机电连锁曾用于防止在不兼容状态下运行。而在 Therac-25 中,软件检查取代了其中许多功能。

这种替代代表了 AECL 所依赖的演变过程中的实质性变化。Therac-6 和 Therac-20 在可独立操作的机器上添加了计算机控制,并保留了行业标准的硬件保护。Therac-25 则围绕计算机控制设计。其软件在监控安全操作方面承担了更大责任,而并非所有先前的保护电路都被复制。后来的 Therac-20 无意中提供了一个比较:一个类似的编辑缺陷可能触发保险丝或断路器,但独立的保护电路阻止了束流激活,并未导致类似的患者照射事故。

代码复用本身并非错误。AECL 复用了旧机器的结构和例程,复用可以保留经过测试的行为。问题在于,来自具有独立硬件保护系统的假设被转移到了软件已成为主要安全边界的系统中。幸存下来的软件开发描述称,程序从 Therac-6 代码演变而来,使用 PDP-11 汇编语言编写,并采用了一个自定义的实时执行系统,兼具并发任务和中断处理程序。该描述还记录了文档稀疏的情况,以及 FDA 审查员对缺少规格说明和软件测试计划的担忧。

在良性应用中,继承的假设可能带来不便。在医用加速器中,当新系统移除了先前包含这些假设的独立组件时,这些假设就变得危险。相关的生命周期问题不仅在于复用代码是否已运行多年,更在于每个安全假设是否已针对新的硬件、新的控制权限、新的操作员工作流程和新的后果重新建立。公开记录并未显示在临床使用前进行过如此整合的假设审查。

事故前的安全分析并未测试新的控制源

AECL 于 1983 年 3 月进行了一次故障树安全分析。根据调查,该分析假设编程错误已通过广泛测试减少,并排除了残留的软件缺陷。它将计算机执行错误主要视为硬件故障或随机干扰的结果。然而,软件此时已承担了早期机器中由硬件承担的安全功能。因此,该分析对权限增加最大的组件几乎没有给予多少关注。

这不仅仅是定量问题。为一个模糊描述的计算机事件分配一个极低的概率,并不能证明已识别出危险状态。确定性软件缺陷不会像磨损组件那样随机出现;每当所需的状态和时序吻合时,它们就会重现。如果分析不考虑快速编辑、共享变量交互、计数器溢出、过时的机器配置、饱和监测器或矛盾显示,那么小数值结果对这些路径几乎没有说明意义。

后来事故后的Therac-25 安全分析总结是更严肃审查的证据。它使用了失效模式与影响分析、故障树分析和软件检查。它识别了包括扫描、能量选择、束流关闭和校准在内的安全关键功能,并提出了增加不依赖计算机的连锁的建议。即使后期分析也坦诚其局限性:代码检查无法为复杂的扫描和能量选择功能提供高度信心。这种不确定性支持增加屏障,而非声称检查已证明代码完备。

可支持的推论是,初始安全案例在结构上与设计不匹配。公开证据无法确定谁批准了每个假设、内部提出了哪些反对意见、或者成本是否是未复制硬件保护的决定性原因。但它确实确定了一个事实:分析排除了残留软件错误,而软件正被信任用于防止不安全的物理配置。这足以在不臆测私人动机的前提下,将问责问题定位在系统设计层面。

六起事故在反复伤害后才汇聚成单一事件

时间顺序很重要,因为每起事件都改变了合理可知的信息。合并事件时间线始于 1985 年 6 月 3 日,地点在佐治亚州玛丽埃塔的 Kennestone 区域肿瘤中心。一名接受电子治疗的患者报告了强烈灼热感,随后出现严重辐射伤害。治疗打印输出被禁用,没有留下硬拷贝治疗记录。医院物理学家询问 AECL 机器是否能在无扫描的情况下以电子模式运行;AECL 回复称不能。关于 AECL 何时收到正式通知,各方说法不一,但该公司在 1985 年 11 月已正式获知诉讼。当时没有及时调查确定机器路径。

1985 年 7 月 26 日,汉密尔顿安大略癌症基金会诊所的一名患者经历了反复的治疗暂停和 H-tilt 消息。显示屏显示剂量为零,操作员多次使用允许的继续命令。患者遭受重大局部过量。AECL 无法复现该事件,怀疑是微动开关故障。它重新设计了开关逻辑,并声称实现了极大的安全性改进,尽管其自身解释无法确定原因。加拿大官员和独立顾问呼吁进行更实质性的变更,包括独立的转盘位置检查以及针对相关故障暂停治疗。AECL 当时并未安装所要求的独立连锁装置。

1985 年 12 月,亚基马谷纪念医院的一名患者在接受治疗后出现条纹状皮肤反应。工作人员调查了其他解释,并于 1986 年 1 月 31 日致信 AECL。AECL 于 2 月 24 日回复称,机器故障或操作员错误都不可能造成该伤害,并提及没有类似事件。第一次亚基马事件的描述说明了信息控制的重要性:该设施并不了解完整的跨站点历史,而是依赖制造商的技术自信。直到第二次亚基马事故后,第一次伤害才被确认为可能的过量照射。

1986 年 3 月 21 日,第一位 Tyler 患者在接受电子治疗前,一名经验丰富的操作员快速纠正了最初的 X 射线输入。机器显示故障 54,将该状况分类为治疗暂停,并显示剂量不足。操作员遵循正常流程并继续操作。通往屏蔽治疗室的音频和视频链路当天未工作,延误了识别患者的痛苦。AECL 工程师最初无法复现该故障,再次认为是电气问题。在测试未发现接地问题后,该诊所于 4 月 7 日将机器重新投入使用。

4 月 11 日,第二位 Tyler 患者在相同操作员快速编辑模式后再次遭遇故障 54。这次对讲机正常工作,操作员停止了操作。诊所物理学家 Fritz Hager 将机器停用,并与操作员合作直至他能复现该序列。速度是缺失的条件。一旦 AECL 被告知编辑必须快速执行,它复现了故障并测量到巨大的输出。AECL 于 4 月 15 日向 FDA 提交了事故报告。FDA 于 5 月 2 日宣布该设备存在缺陷,并要求提交纠正行动计划。

1987 年 1 月 17 日,第二位亚基马患者在接受照射时,转盘处于与视场光设置相关的状态。控制台显示除早期胶片照射外无治疗剂量,机器暂停,操作员可以继续。这是一条不同的软件路径。AECL 的初步重建估计每次尝试产生数千拉德,但确切输送剂量仍不确定。该事件表明,针对 Tyler 的具体纠正并非完整的解决方案。FDA 和加拿大当局于 2 月采取行动,建议在永久性改造完成前停止常规使用。

时间顺序并不支持某个人忽略了六个相同警报的说法。这些事故发生在不同的设施,产生了不同的消息,且当时并未全部在技术上被理解。但它确实支持一个结论:事件信息仍然分散,早期的“不可能”结论过于武断,纠正行动最初跟随的是可疑组件而非危害类别。每新增一起事件都应降低对“软件及现有检查使过量照射不可能”这一前提的信心。

Tyler 暴露了屏幕与机器之间对时序敏感的不一致

Tyler 的触发因素并非仅仅因为操作员输入太快。操作员输入治疗模式,移动到命令行,返回编辑模式,在机器设置弯曲磁铁的时间窗口内将输入从 X 射线改为电子。屏幕反映了更正。并发的软件任务未能可靠地将编辑后的状态传递给所有机器参数。

详细的Tyler 软件重建描述了键盘处理器、数据输入例程和治疗控制任务使用的共享变量。一个完成标志指示光标已到达命令行,而非编辑真正结束。另一个与磁铁设置相关的标志被过早清除,因此后续编辑可能无法被识别。一个模式与能量变量的低字节和高字节可能影响不同任务。在所需时序下,转盘或准直器定位可能遵循编辑后的值,而其他操作参数仍来自先前的 X 射线选择。

因此,直接触发因素可以狭义地表述为:在特定窗口内的快速编辑允许不一致状态进入治疗。该缺陷只有在以实际专家速度执行工作流程时才可复现。一个按照书面序列操作的慢速工程师可能会错过它。这就是为什么诊所物理学家的重建至关重要。他将操作员专业知识视为测试条件,而非误用证据。

危险结果需要的不仅仅是竞争条件。软件未能在显示治疗、机器配置和束流参数之间进行最终的独立一致性检查。硬件没有独立阻止不兼容的配置。电离室在强脉冲下饱和,可能报告低值。机器将该事件标记为暂停,并提供单键重启。操作员已被许多无害暂停条件化为使用该命令。在第一次 Tyler 事件中,破损的房间监视器移除了最后一个人体检测通道。

将操作员行为称为原因将颠倒控制关系。界面故意支持快速输入和编辑,因为操作员要求效率。继续键是指定的暂停响应。操作员的速度和熟练程度是可预见的,属于预期使用环境的特征。它们触发了缺陷,但 AECL 控制着该交互是否能够创建危险的机器状态,以及该状态是否会被独立阻止。

亚基马通过计数器溢出暴露了不同路径

第二次亚基马机制出现在控制逻辑的后端。一个用于重复设置检查的单字节变量每次通过时递增。由于它只能表示 256 种状态,因此每 256 次通过会归零。零还用于表示无需检查上准直器一致性。如果操作员在归零时刻发出设置命令,位置检查可能会被跳过,治疗可能在转盘仍处于不安全的视场光相关状态下继续进行。

亚基马缺陷的原始重建将其与 Tyler 区分开来。并发的管家任务仅在共享的 Class3 变量非零时执行准直器检查。设置测试在等待机器设置时将该变量递增数百次。在归零时,软件绕过了检查。AECL 的即时代码更正是将变量设置为固定的非零值,而非递增它。

同样,代码修改修复了已识别的触发因素,但本身并未确立安全性。一个在并发任务间共享的安全关键状态值不应该默默地合并计数器和授权状态。更重要的是,不存在独立的物理屏障在转盘配置错误时阻止束流激活。因此,最终的纠正行动既需要代码修正,也需要不依赖相同软件路径的转盘连锁。

幸存记录并未识别 Kennestone、汉密尔顿或第一次亚基马事件的确切代码路径。当时有人猜测汉密尔顿可能与第二次亚基马机制相似,但 Leveson 和 Turner 标记为猜测。未知的竞态或其他缺陷仍有可能。严谨的描述不应仅仅因为物理结果相似就将后来的两种机制套用到早期伤害上。

这个未知并非开脱理由,不应被填充为确定性。它显示了架构为何重要。当多个未知软件路径能够到达相同的灾难性状态时,一次证明并修补一个缺陷是不够的控制策略。独立的屏障可以同时包含已知和未知路径。这就是纵深防御的实用价值:它降低了安全案例对软件行为完全了解的依赖。

界面将矛盾的危险信号转化为常规操作

Therac-25 的操作员界面区分了需要重置的治疗中止和允许单键继续的治疗暂停。它还经常产生通常与不便或剂量不足相关的故障。操作员从重复经验中学到暂停并继续是正常的。培训强化了多种安全机制使过量照射几乎不可能的信念。

在事故中,这种操作模式在多个方面失效。故障编号含糊不清,可用手册中解释不足。严重的剂量相关状况可能以低优先级呈现。饱和的监测硬件在输出危险地高时报告看似剂量不足。控制台尽管物理配置和内部参数不一致,仍可能显示已验证或束流就绪。机器允许重复照射,而无需强制新的治疗处方或独立检查。

这些不仅仅是表面的外观缺陷。警报只有在帮助操作员区分危险状态并采取正确行动时才是控制。允许立即继续的低优先级暂停本身就是授权。低估输送剂量的显示改变了操作员的决策。已验证消息是一种安全声明。当这些信号与患者关于灼烧的报告或物理监测器相冲突时,系统必须引导用户采取更保守的解释。

IAEA 后来的放射治疗意外照射的教训正式化这一原则,而非对 AECL 做出追溯性法律认定。它呼吁调查不一致信号、在反证之前假设更严重的指示、针对临床人机环境进行设计和测试、培训员工解读异常显示,以及使用多层防护。Therac-25 展示了为什么这些元素属于工程系统,而不是留给个人警觉。

实际控制是分散的,但并不平等

AECL 拥有最广泛的预防控制权。它选择了硬件和软件架构,决定了保留哪些连锁,控制了源代码和文档,设置了警报的含义和优先级,设计了重启行为,执行了初始危害分析,接收现场报告,向客户发出通知并提出了纠正行动。它还控制着用户和监管机构是否获得完整的跨站点信息图景。这些权力使得制造商成为系统设计和事件学习风险的主要所有者。

这并不使医院处于被动地位。设施控制着房间音频和视频是否工作、治疗打印输出和审计功能是否启用、重复故障如何记录、设备何时停用、医学物理学家调查的速度,以及向州或联邦当局报告的内容。第一次 Tyler 事件展示了本地检测失败:视听链路不可用,治疗后来继续进行。第二次 Tyler 事件展示了有效的本地控制:操作员上报,物理学家停止使用,该设施重建了触发因素。第一次亚基马调查展示了当制造商否认设备可能造成所观察到的伤害、且无法获取其他站点证据时,本地专业知识的局限性。

操作员控制数据输入、患者设置以及暂停后继续的即时决策,但他们并不控制隐藏的并发模型、警报分类、饱和的剂量监测器行为或缺失的独立连锁。应该对照预期工作流程和可用信息来评估他们的行动。训练有素的操作员快速纠正常见输入错误不是不可预见的对抗性输入。按下界面为治疗暂停提供的命令不是用户接受未披露过量风险的证明。

医学物理学家拥有重要的诊断能力。Tyler 的 Hager 提供了复现序列,这是常规服务测试和最初较慢工程重建都未能发现的。用户还形成了一个群体,交流信息,并推动硬件变更、更好的消息、独立软件审查和审计追踪。然而,他们缺乏源代码访问权限,也无法及早获得完整记录以充当协调的安全网络。

监管机构控制法律认定和纠正行动的门槛。FDA 可以宣布辐射发射产品存在缺陷,要求通知购买者,并审查 AECL 的纠正行动计划。加拿大辐射当局可以要求合规并建议停止使用。他们不操作治疗室或编写软件,并且美国的报告系统尚未要求用户设施像后来法律那样进行报告。他们的问责涉及警告是否被收集、权力是否及时使用、拟议修复措施是否受到质疑、以及结案是否基于证据而非断言。

患者拥有最直接的伤害证据和最少的系统控制权。有几人立即报告与机器显示相矛盾的灼热、烧灼或冲击样感觉。他们无法检查机器状态、获取跨站点事件历史或禁用设计特征。一个在患者证词与已知可能饱和的显示之间优先选择后者、认为患者证词可信度较低的安全系统,将证据权力赋予了最不可靠的信号。

检测在响应失败之前就已失败

区分检测与响应是有用的。当系统未能保留或解释表明发生不安全事件的证据时,就发生了检测失败。Kennestone 缺失的硬拷贝治疗数据、饱和的电离室、显示剂量低或为零、含糊的故障代码、不完整的手册、禁用的房间监测以及无法复现对时序敏感的序列,都降低了可观测性。跨站点碎片化意味着每个诊所似乎都在经历孤立的异常。

响应失败始于可用证据未能触发足够广泛的预防措施。在汉密尔顿事件后,AECL 处理了可疑的微动开关逻辑并减少了允许的重试次数,但并未安装所要求的独立位置连锁,也未将所有相关暂停转换为中止。在第一次亚基马报告后,该公司称机器故障和操作员错误都不可能造成伤害。在第一次 Tyler 事故后,未能复现故障 54 支持了电气假说,机器重新投入使用。只有当现有安全模型比不利证据更受信任时,这些行动才可理解。

这一序列揭示了一个反复出现的认知错误:无法复现被过分视为不可能的证据。对时序敏感的并发软件可以是确定性的,但如果在测试中未重现特定的时序、工作负载和专家交互,它仍能逃脱检测。阴性结果应减少或转移假设,而不应当在后果严重且身体伤害与过量照射一致时关闭对危害的探究。

沟通本身也是一种控制。了解 Kennestone、汉密尔顿和亚基马事件的操作员评估故障 54 的方式,与被告知没有过量照射事件的操作员不同。及时收到制造商和设施报告的监管机构能更快地识别模式。拥有精确审计日志的维修工程师能区分配置不匹配和电气瞬变。缺乏共享证据延长了危险运行存续的时间。

可支持的推论是,更早的汇总和保守的升级本可缩短暴露于危险的时间。公开记录无法确定任何特定后续事故是否一定会被阻止,因为确切的早期机制仍未知,且治疗需求不同。但它可以表明,拥有信息和控制权的机构有机会在 1987 年 1 月之前停止常规使用、增加独立屏障或发出更强有力的警告。

报告制度是促成条件,而非完全借口

在首批事故发生时,美国医疗设备报告制度严重依赖制造商和进口商。医院和卫生专业人员尚未受到后来联邦用户设施报告义务的约束。Tyler 的报告在 AECL 提交详细医疗设备报告之前,已通过得克萨斯州卫生部门送达 FDA。这种结构使联邦早期预警系统容易受到本地不确定性和制造商信息流的影响。

这一弱点并非理论上的。GAO 同时期的1986 年医疗设备低报审查发现了医院、制造商和 FDA 在沟通设备问题方面的严重差距,并建议加强报告关系。其后来对FDA 医疗设备报告实施情况的审查发现合规评估、数据处理以及报告如何导致纠正行动的文件记录存在缺陷。1989 年GAO 国会证词得出结论,报告系统未能提供预期的早期警告,且 FDA 在召回方面的法定权力有限。

国会在事故后改变了框架。1990 年《安全医疗设备法案》要求设备用户设施报告合理表明设备导致或促成患者死亡或严重伤害的信息,规定了报告截止日期,并扩大了更正、移除和召回权限。该法律是后来针对广泛监控弱点的政策回应证据。不应将其描述为 Therac-25 事故导致每项条款的司法认定,也不应将其后来的义务追溯适用于 1985 年的医院。

加拿大当局通过不同的结构运作。《辐射发射设备法案》禁止销售、租赁或进口不符合适用标准或产生特定辐射风险的设备,并提供了检查、通知和监管权力。加拿大辐射防护局在汉密尔顿事件后要求进行硬件和软件变更,后来与 FDA 协调建议停止常规使用。记录仍然显示,从首次要求独立连锁到通过最终纠正行动安装,存在延迟。

监管碎片化在美国也很重要。NRC 当前关于辐射管辖权的描述解释了各州监管辐射产生机器(如 X 光机和粒子加速器),而联邦机构拥有不同角色。因此 Therac-25 涉及医院、州辐射当局、FDA 和加拿大机构。分散管辖不一定有缺陷,但它需要明确的路线,使本地治疗异常成为全国性和跨境的产品信号。

根因、促成条件和触发因素必须保持分开

Tyler 的直接触发因素是在时序窗口内的快速编辑。第二次亚基马的直接触发因素是在 8 位变量归零时刻的设置操作。这些事件选择了软件中的不安全路径。它们不是根因,因为两者都无法解释为什么该路径有权在无独立停止的情况下激活危险能量。

记录支持的核心根因命题是架构性和组织性的:安全责任从独立硬件连锁转移到了软件,但没有进行与潜在伤害相称的危害分析、软件生命周期、集成验证、界面设计和事件学习系统。设计允许单一软件控制链设置配置、判断一致性、呈现状态并授权治疗。共同依赖破坏了多重检查的表象。

促成性工程条件包括:复用的例程并未显示其假设在新架构中已重新验证;共享变量和并发任务具有不安全的语义状态;缺乏最终一致性检查;可能饱和的监测器;允许重启的故障处理;含糊的消息;稀疏的软件文档;以及最初未包含真实专家速度编辑的测试实践。原始故障树对软件的处理方式,降低了这些路径在部署前被检查的可能性。

促成性操作条件包括:频繁的无害暂停、强调安全机制充裕的操作员培训、缺失或禁用的审计和房间监测通道,以及设施间有限的比较事件能力。决定恢复运营是重要的,但它发生在制造商设计并影响的信息环境中。

促成性治理条件包括:薄弱的事件跟踪、在未复现根因的情况下关于不可能性或巨大安全改进的强力声明、不利信息传播不完整、缺乏所要求软件细节和测试计划的纠正行动提交、以及在将独立硬件保护建议转化为已安装屏障方面的延迟。调查中引用的 FDA 记录显示了对文件、交互分析、有意义的消息和安装测试的反复要求。

响应失败也应与恢复失败区分开来。当机器在危害仍不确定的情况下继续常规临床使用时,响应迟缓。当多次 CAP 修订要求修改、且修改识别出新的未覆盖子系统时,恢复成为一项单独的挑战。无法在每台设备上一致安装、测试和验证的修复尚不是恢复的车队。

影响不能简化为单一剂量或单一死亡人数

确认的影响是严重的。六起已知事故涉及大量过量照射。患者遭受辐射伤害、残疾、长期疼痛以及在时间上(在某些案例中医学上已记录关联)与照射相关的死亡。根据调查,两名 Tyler 患者因过量相关伤害死亡。第二位亚基马患者在事故前已患晚期癌症,并在过量并发症后死亡;幸存者声称照射缩短了生命并增加了痛苦,索赔已和解。汉密尔顿患者死于侵袭性癌症,而尸检记录确定了严重的辐射损伤,否则需要重大治疗。

确切的剂量声明必须有所保留。机器的电离室饱和,不同设施复现了不同的输出,脉冲率各异,某些疗程缺乏硬拷贝数据。事后模拟产生了范围而非直接测量结果。因此,文章不会将每个估计值转换为测量的患者剂量,或将局部暴露与全身致死性进行比较,仿佛生物效应等同。

操作影响超出了六名患者。11 个设施依赖于一个无法通过自身显示确定安全状态的设备。诊所不得不暂停或限制治疗、检查机器、更改工作流程、参加用户会议并管理需要持续治疗的患者。操作员和物理学家承担了在没有源代码或完整事件信息的情况下重建行为的负担。监管机构和用户花了两年多时间才从 Tyler 的发现过渡到最终安全分析。

法律和财务影响较难衡量。源调查记录了数起诉讼和庭外和解,但此处审查的公开主要记录并未提供责任分配的是非判断、完整和解条款、保险赔付或总损害赔偿。和解确认了争端的解决,而非裁决的疏忽或承认。将私人结果转化为精确的企业成本或法律裁定具有误导性。

更广泛的系统性影响是医疗设备安全所需证据的变化。后来的法律加强了不良事件报告和召回权限。后来的法规增加了设计控制。现代指南要求基于风险的软件文档、验证和人为因素工作。Therac-25 与这些控制相关,但相关性并不证明单一事故序列单独产生了整个现代体系。

纠正行动从键帽变通方法发展到独立屏障

AECL 在 Tyler 事件后发布的第一条用户指令侧重于禁用向上光标键,包括物理阻止其使用,以便操作员重新输入整个处方。FDA 认为该通知不充分,因为它未解释缺陷或危害,且语气未传达紧迫性。这是操作变通与安全修复之间的问责区别。变通可以减少一个触发因素,同时使用户无法判断剩余风险。

1986 年 6 月的第一个正式纠正行动计划更进一步。它提出修复 Tyler 行为、更改脉冲监测、将许多故障从暂停转换为中止、添加电路以在过量脉冲后抑制调制器、限制编辑键以及修订手册。FDA 同意该方向,但反复要求提供更多软件文档、交互分析和详细的测试计划。AECL 最初回应称不存在单一的软件测试计划和报告,因为硬件和软件已经过多年测试。

监管和用户响应记录显示了为什么 CAP 需要五次修订。FDA 反对为剂量率和束流倾斜故障保留暂停行为,要求有意义的消息,并希望对每项未来的软件修改进行严格测试。在第二次亚基马事故后,该机构得出结论,仅靠软件无法确保安全运行。加拿大当局得出了平行结论。在永久性变更开发完成期间,不鼓励常规使用。

用户参与显著改善了计划。在 1987 年 3 月的一次会议上,用户、AECL、FDA、加拿大监管机构和技术代表审查了所有六起事故。用户要求进行独立软件评估、源代码访问、硬拷贝审计追踪以及额外的硬件修改。记录显示未提供源代码,且内存限制被引述为反对审计选项的理由。这些决定留下了一些透明度缺口,但会议创建了一个直接机制,以根据临床经验测试 AECL 的提议。

1987 年 7 月的最终 CAP 改变了架构和操作。剂量测定中断成为中止而非可恢复暂停。操作员必须重新输入参数。添加了单脉冲关闭保护,包括过程中先前描述的硬件保护。增加了转盘位置和弯曲磁铁连锁。当转盘处于视场光位置或中间位置时,束流激活被阻止。含糊的故障代码被替换为有意义的消息,编辑行为受到限制,已知的 Tyler 和亚基马缺陷已被修复,手册得到修订,许多其他软件更改解决了审查期间发现的故障。

FDA 的批准有条件于最终测试结果、独立安全分析、修订后的文档以及安装完成。后来的安全分析识别了早期 CAP 修订未完全覆盖的其他安全关键子系统,展示了审查超出已复现缺陷的危害的价值。其建议增加了扫描和能量选择的不依赖计算机的保护,并将软件维护延续到后续版本。

GAO 召回记录将美国行动归类为 I 类召回,即存在合理概率导致严重不良健康后果或死亡。它将召回日期定为 1987 年 6 月 3 日,而叙述表明该过程在此管理日期前后延伸。召回日期、CAP 批准、安装和最终安全分析报告是不同的里程碑。将任何一个视为修复的瞬间,都会掩盖保障措施建立所需的时间。

修复证据是真实的,但现代读者无法重现完整的安全案例

最有力的修复证据是从常见的软件依赖到独立物理保护的转变。在过量脉冲后硬件关闭,以及独立检查转盘、扫描和能量选择状态,可以包含尚未发现的软件缺陷。中止阻止操作员反复授权未解决的剂量测定状况。更好的消息改进了检测。安装测试和未来的修改协议降低了正确设计被复制或配置错误的风险。

监管挑战是另一种形式的证据。FDA 并未接受最初的用户通知或第一个 CAP 为充分。它要求规格说明、测试计划、交互分析、更清晰的图表、未来修改的测试以及安装验证。它识别了矛盾的测试数据,并要求进行独立安全分析。加拿大当局和用户也敦促设置硬件屏障。这一记录比制造商单独发布的公告更有力。

然而,公开记录并未提供完整的可重现保证包。它没有公开完整的源代码树和版本历史、所有修改前后的需求、每项测试输入和预期结果、时序和溢出状态的覆盖率、每个连锁的独立性分析、每台设备的安装记录、未解决的缺陷日志,或基于软件和硬件版本的长期现场数据。最终分析总结本身承认,对于某些复杂功能,检查无法提供高度信心。

改装后没有其他公开记录的 Therac-25 灾难,与有效修复一致,但这并非受控测试。车队规模小,使用情况发生变化,机器老化退役,公开报告也不完美。可维护的结论是,CAP 实质性加强了系统,并特别阻止了已知的灾难性路径。而关于每个危险的软件路径都已被发现并消除的更强主张既无必要也缺乏支持。

后来的法律和标准展示了缺失的证据,而非 1985 年时的法律要求

Therac-25 投入使用时,美国还没有后来的设计控制框架。1990 年的法规扩大了报告和召回机制。FDA 的1996 年质量系统最终规则于 1997 年生效,在研究发现在相当比例的召回和软件相关故障背后存在设计缺陷后,增加了生产前设计控制。这些后来规则不应被视为 AECL 在其存在之前就已违反的要求。它们是识别历史记录中缺失的控制类别的基准。

FDA 的《软件验证的一般原则》后来将验证描述为生命周期证据而非最终测试事件。该机构当前关于设备软件功能的上市前提交指南要求与风险相称的文档,包括架构、需求、危害分析、验证与确认、修订历史以及未解决的异常。引用这些文件的目的是进行比较:它们使现代审查员期望但无法在幸存 Therac-25 记录中找到的工件变得可见。

现代人为因素期望也涉及界面路径。FDA 的人为因素和可用性指南将预期用户、使用环境、关键任务和使用相关危害视为设计输入。在这种方法下,经验丰富的操作员的快速纠正、频繁暂停、含糊消息和单键继续命令将作为安全问题的一部分进行测试,而非被斥为工程控制之外的行为。

FDA 认可IEC 62304作为医疗设备软件生命周期标准。其流程框架并不保证安全的软件,也不能单独验证最终设备。但它确实要求一个持续维护的开发和维护流程,使需求、风险控制、配置、问题解决和变更影响更具可审计性。这与跨 Therac 世代继承并后来通过多次 CAP 修订打补丁的代码直接相关。

截至本文发表日期,FDA 的《质量管理体系法规》自 2026 年 2 月 2 日起生效,并引用了 ISO 13485:2016。它为当前监管机构提供了更广泛的质量管理和检查框架,包括设计和开发、投诉调查和记录。这是当前问责基线的证据,而非证明四十年前对 AECL 的检查会有什么发现。

报告框架现在也更加明确。FDA 的MDR 法规历史追溯了 1990 年后向用户设施的扩展,其当前的报告概述区分了制造商、进口商和设施义务。更好的规则提高了一家医院的异常成为产品信号的可能性。它们仍然依赖于员工认识到事件可能与设备相关,并保留足够证据进行调查。

不能仅从技术控制推断责任

实际控制是调查责任的严谨方式,但它不能替代法院对法律的适用。AECL 的设计权力、知识和纠正行动角色支持强有力的工程问责。医院的运营和报告权力支持对本地决策的审查。监管机构的权力支持对时机和充分性的审查。所有这些观察都不构成特定管辖权和案件中疏忽、因果关系、产品缺陷、法定违规或损害赔偿的要件。

原始调查利用了证词,并报告几项索赔已庭外和解。和解可能反映诉讼成本、不确定性、保险、保密、同情或风险分配。在没有公开条款和裁决结论的情况下,它不能确定承认或总损失。在本文使用的主要记录中,不存在解决主要 Therac-25 伤害索赔的公开可访问的是非裁决。

企业身份也需要谨慎。AECL 是加拿大皇家公司,其医疗业务后来更改了名称和所有权。明显的主题是加拿大原子能有限公司,因为 AECL 在事故和 CAP 期间控制了产品。后续实体在没有证明该关联的交易和公司记录的情况下,不应自动继承事实了解或法律责任。

在不夸大责任的情况下,问责仍然是可能的。文章可以识别谁能够预防、检测、限制和修复风险;比较这些权力与实际行动;并保留对法律结果的不确定性。这比从软件缺陷中认定罪责或将机密和解视为赦免更能产生有用的结果。

早期的反事实比完美的代码幻想更有用

最薄弱的反事实是,更好的程序员本可以编写无缺陷的代码。这无法测试且设定了错误的标准。并发实时软件可能尽管工作称职仍包含缺陷。安全案例应假设某些缺陷存在,并防止单个缺陷达到灾难性能量。

最强的反事实始于架构。如果 Therac-25 保留了与 Therac-20 保护相当的独立扫描和转盘连锁,共享的编辑缺陷可能导致关闭而非照射。这一点得到了后来在 Therac-20 上发现同类缺陷而未致患者伤害的支持,也得到了最终 CAP 中选择的独立屏障的支持。它并不证明六起事故中的每一起都会被阻止,因为前三起的确切路径未知。

第二个反事实始于 Kennestone 事件后。如果物理学家的疑问、患者伤害和诉讼通知进入了一个与所有用户和监管机构共享的正式风险日志,后来的设施将有理由怀疑看似剂量不足的情况和声称的不可能性。机器可能被限制使用,同时针对最坏情况状态测试扫描和连锁行为。记录无法证明 1985 年 6 月可用的证据足以进行最终召回,但它足以进行保守的、有记录的调查。

第三个始于汉密尔顿事件后。加拿大官员和独立顾问建议使用独立位置连锁以及针对剂量率故障的不可恢复处理。在常规使用恢复之前,对整个车队安装这些变更将比修改微动开关逻辑更广泛地解决不安全配置类别。后来的 CAP 采用了密切相关的控制。因此,可以合理推断早期实施可能降低风险,同时避免声称它肯定会阻止未知的 Kennestone 或第一次亚基马机制。

第四个始于 Tyler 第一次检测。任何严重的剂量矛盾都需要治疗中止、患者评估、保留机器状态以及供应商-监管机构升级的规则,这将防止立即单键继续。正常工作的音频和视频会改进人体检测。两种控制都不能修复软件,但都能限制重复照射并改善证据。在第一次事件后,将机器保持在临床服务外直至故障 54 被复现,很可能可以防止该装置上的第二次 Tyler 照射。

第五个涉及测试。重放专家速度编辑、随机化任务时序、强制字节溢出、注入过时和矛盾的共享状态、饱和测量输入以及验证最终物理配置与处方,比普通重复使用更有可能暴露已知路径。Tyler 物理学家如何复现缺陷以及亚基马如何最终得到解释支持了这一推断。公开证据无法显示哪种技术会在发布前发现哪种缺陷。

确认的事实、可支持的推论和公开的未知

确认的事实包括六起已知事故;Therac-25 软件承担了更大的安全角色;缺少早期机器中保留的某些独立保护;1983 年分析排除了残留软件错误;Tyler 对时序敏感的编辑路径;亚基马计数器溢出路径;误导性或含糊的界面行为;分散的事件沟通;FDA 的缺陷认定和反复的 CAP 反对;加拿大要求变更;美国 I 类召回;以及最终纠正行动增加了独立硬件保护、软件更改、更强的中止行为和修订文档。

同样确认的是,FDA 记录并未接受 AECL 的几项保证。该机构拒绝了不充分的初始用户通知,要求更多细节和测试,对不支持声称修复的数据提出质疑,要求超出 Tyler 缺陷的变更,并有条件地批准 CAP 须经最终结果和独立分析。用户和加拿大官员为最终控制集做出了贡献。因此,修复是经过多个机构协商和测试的,而非作为一个无争议的补丁交付。

可支持的推论始于这些事实的相互作用。早期的独立屏障可能阻止了至少一些灾难性照射,因为相同类型的软件不一致在 Therac-20 上被硬件包含,且最终 CAP 选择了那些屏障。共享的风险日志和快速的跨站点警告可能加速了识别,因为每个设施对不可能性的信念部分源于缺少事件信息。更现实的集成测试可能暴露了时序和溢出条件。这些结论是可能的控制效果,而非重建的替代历史。

几个事实存在争议或不确定性。AECL 早期了解的时机和完整性在公司、医院和诉讼描述中有所不同。汉密尔顿机制从未被确切复现。前三起事故无法从公开证据归因于特定的软件缺陷。确切的患者剂量因重建和机器条件而异。对于某些患者,癌症和辐射伤害都影响了结果,因此简单的死亡人数不能表达医学因果关系。设计选择背后的私人推理以及公司权力在指定个人之间的分配不为公开。

法律和财务未知情况很显著。核心主要记录中无法获得和解金额和条款。没有公开的是非裁决在 AECL、医院、临床医生或服务机构之间分配责任。保险覆盖、赔偿、法律费用和赔偿总额不可用。这些记录的缺失并不意味着没有成本或责任;它阻止了精确的声明。

修复未知情况也存在。公开来源没有提供每项 CAP 测试结果、完整独立审查工作表、所有设备的安装记录、源代码控制历史或长期事件发生率。它们没有证明每台改装机器在退役前的行为。后来的监管和标准框架展示了当前证据包会包含什么,但它无法追溯制造缺失的工件。

可能改变结论的证据包括完整的 AECL 风险日志、源代码和变更历史、原始需求和安全分析、内部审查记录、所有设施服务日志、调查中未复制的监管机构通信、完整的 CAP 测试数据、安装验收结果以及解密的和解或法院记录。这些材料可以细化谁在何时知道什么。它们不会改变基本物理事实:独立屏障在事故前缺失,并在修复过程中添加,但它们可能实质性地改变组织责任的分配和时机。

对软件依赖的医疗安全进行持久的问责测试

第一个测试是危害所有权。对于每种危险能量状态,是否有一个指定的组织所有者,对需求、架构、验证、现场监控和纠正行动拥有权力?该所有者是否维护跨产品代际和复用组件的危害?分散在硬件、软件和临床团队之间且没有一个负责的整合点的风险,很可能在它们之间滑落。

第二个测试是屏障独立性。是否存在单一软件缺陷、过时的共享变量、损坏的配置或错误的命令可以同时击败控制动作及其检查?在同一处理器上运行、读取相同状态并使用相同假设的第二个软件例程,可能在代码上是冗余的,但在安全上并不独立。灾难性能量需要一个屏障,其失败不由同一路径引起:物理位置感应、硬件连线切断、独立监控或其他可证明的分离机制。

第三个测试是跨复用假设的控制。每个复用例程是否带有关于硬件连锁、时序、数值范围、调度器行为、传感器有效性和操作员工作流程的文档化假设?当软件进入新产品时,这些假设是否得到重新验证?在受保护的前任中长期的运行历史,对于移除了保护的后继者来说,并不是现场证据。

第四个测试是以危害为导向的软件证据。需求是否从不安全的物理状态和所需约束开始,还是从功能和预期行为开始?审查者是否可以追溯每个危害到需求、架构、代码、测试、剩余风险和现场监控?未解决的异常是否根据最坏可信后果而非频率单独评估?通过普通治疗并不能锻炼罕见状态组合。

第五个测试是真实的交互测试。是否观察专家用户以全速执行常见更正?是否故意注入中断时序、快速编辑、重复暂停、溢出边界、任务抢占和矛盾的传感器值?测试是否包括最快和最经验丰富的操作员,而不仅仅是慢速脚本序列?预期的效率必须被视为操作环境的一部分。

第六个测试是保守的人机权限。显示是否以操作员可行动的语言传达危险?严重的矛盾是否默认中止?重启是否被阻止,直到状态被重新建立并独立检查?在使不安全继续正常化之前,是否测量并减少了频繁的滋扰警报?教导用户忽略它的警报系统已经消耗了自身的风险裕度。

第七个测试是真实的测量。监测器是否能在没有饱和或误导性回退的情况下表示最坏可信输出?当独立指示冲突时,系统是否保留两者并假设更危险的状态?是否保留原始读数、范围限制和传感器有效性?当仪表意味着它已超过容量而非什么都没有发生时,显示的零是危险的。

第八个测试是可审计的事件记录。每次治疗是否保留处方、编辑、软件和配置版本、物理连锁状态、束流命令、监测器读数、警报、重启和时钟同步?物理学家是否无需依赖记忆即可重建序列?记录是否受到保护以防常规禁用,并按产品寿命调整大小?当系统丢弃重要的状态时,调查就变成了猜测。

第九个测试是跨站点升级。任何设施是否可以在未首先证明设备导致问题的情况下报告可疑的严重事件?报告是否按产品和危害跨国家、服务组织和公司部门汇总?用户是否及时收到事实性警告,区分已确认机制和未解决风险?制造商不应在共同后果是灾难性的情况下等待相同的伤害。

第十个测试是纠正行动广度。响应是仅修复复现的触发因素,还是识别了通向危险状态的所有路径?临时变通是否被如此标记,并附有剩余风险和到期日?最终修复是否包括变更影响分析、回归测试、独立审查、安装验证和上市后监控?键帽限制可以争取时间;它不能关闭安全案例。

第十一个测试是可供监管机构使用的证据。制造商是否可以在要求时提供需求、规格说明、测试计划、结果、异常记录和安装数据,还是必须在伤害后重建?监管机构是否有权力和报告网络,使其能在制造商完全确定之前采取行动?批准是否指定了条件和完成的证明?当文档跟随修复而非先于并指导它时,安全保证就会削弱。

第十二个测试是持久验证。独立屏障是否定期在现实故障条件下接受挑战?软件变更是否针对原始危害进行评估,即使员工和所有权发生变化?滋扰警报、现场异常和未遂事件是否被趋势化?组织是否发布足够的汇总证据,使医院和监管机构知道控制仍然嵌入?没有报告的灾难并不等同于性能证明。

因此,Therac-25 不应被简化为关于粗心编码或不专心操作员的道德故事。它是一个控制系统,其中软件权限扩大,而独立保护、可观测性和制度学习并未随之扩大。已知的缺陷使这种不平衡变得可见。早期未经证实的机制和不完整的记录显示,为什么问责不能依赖于在伤害发生后发现每个错误。

修复朝着正确方向前进,因为它改变了谁和什么可以停止束流。独立连锁、单脉冲关闭、不可恢复的安全故障、更清晰的消息、更广泛的分析以及经过监管机构测试的纠正行动,使系统减少了对完美代码和完美解释的依赖。剩余的教训是证据性的:安全关键制造商必须能够在部署前和每次严重信号后证明,没有单一隐藏路径可以将常规临床工作转化为灾难性照射。