经过 在专题文章中 几个月前,有人在评论中指出,他们还没有听说过Therac-25事件。我很惊讶,然后对我认识的开发人员进行了一次非正式调查,结果发现只有大约一半的开发人员无需搜索就知道它是什么。我认为重要的是,我们行业中的每个人都必须了解此事件,在深入研究细节后,我对WTF的数量感到震惊。今天的文章不是很有趣,也不是很有趣。它描述了由错误的软件工程流程引起的死亡和致残事件。如果这不是您今天想要的,请从我们的档案中获取随机的文章。
当您将患者绑在能够发射25MeV粒子束的电子枪上时,遵循以下程序至关重要。在东德克萨斯癌症中心(ETCC)操作Therac-25放射治疗机的技术人员一直在运行这台机器以及类似机器,运行时间足够长,以至于她不得不停止例行检查。
1986年3月21日,技术人员将患者带入治疗室。她检查了他们的处方,并将它们放在Therac-25的床上。在患者上方的是发射器的终点,这是一个转盘,可以让她选择设备将发射哪种光束。首先,她将转盘设置为简单的光学激光模式,然后使用该模式对患者进行定位,以使光束撞击到他的上背部的一小部分,正好在脊柱的一侧。
在患者处于正确位置的情况下,她再次旋转了转盘。还有另外两个职位。可以在光束和病人之间放置一排磁铁。这些将塑造和瞄准光束。另一个在光束和病人之间放置了一块金属。当被25MeV电子束撞击时,金属会辐射X射线。
这个病人的处方是用电子束的,所以她放了转盘,离开了房间。在隔壁房间中,防辐射端子是控制终端。技术人员开始键入处方以开始治疗。
如果事情完全按照常规进行,她将能够通过对讲机与患者进行通信,并通过摄像机监控患者。可悲的是,该系统今天已经崩溃了。不过,该患者已经接受了多种治疗,因此他们知道会发生什么,因此几乎不需要沟通。实际上,Therac-25和所有支持设备始终是挑剔的,所以有些事情行不通。实际上是例行工作的一部分。
技术人员已经多次运行此过程,因此她开始键入处方。她至少在此设备上成为非常快的打字员,也许太快了。在光束类型的字段中,她不小心为" x-ray"输入了X。这是一个自然的错误,因为大多数患者都接受了X射线治疗,这并不是什么大问题:计算机会看到转盘的位置不正确,并拒绝给患者剂量。她迅速点击了" UP"键盘上的箭头返回到该字段,将电子值校正为" E"并确认其他参数。
她的手指悬停在" B"上方。当她确认输入数据时,按下键盘上的键。一旦确定一切正确,就按" B"为" beam start"。没有噪音,没有噪音,但片刻之后,终端显示:" Malfunction 54&#34 ;,然后是" Treatment Pause"。
错误代码不足为奇。技术人员在控制台旁边保留了一张图表,其中记录了所有错误代码。在这种情况下,"故障54"表示"剂量输入2"错误。
那可能什么都没解释,但是技术人员习惯了错误代码是神秘的。这是“治疗暂停”,这意味着下一步是恢复治疗。根据航站楼的说法,尚未发出任何辐射,因此她撞上了" P"取消暂停光束的键。
病人已经经历了许多这样的疗程,并且知道他们不应该有任何感觉。然而,技术人员第一次激活光束时,他感到烧灼感,后来被描述为“热咖啡”。被倒在他的背上。在没有任何对讲机寻求帮助的情况下,他开始离开治疗台。当技术人员松开光束时,他仍在为自己振作,尖叫着寻求帮助,这时他感觉到了巨大的电击。
首先是诊断。机器故障必须引起电击。病人被送回家,医院的物理学家检查了Therac-25,确认一切正常,没有任何故障的迹象。它似乎并不会再次发生。
作为为期六周的治疗计划的一部分,患者被处方了180拉德的剂量,该剂量总计将产生6,000拉德。根据Therac-25的说法,患者接受的剂量不足,仅为辐射的一小部分。尚无人知道,但故障实际传递了16,000至25,000拉德。病人看起来还不错,但实际上他们已经死了,没人知道。
ETCC事件不是Therac-25系统的第一个故障,可悲的不是最后一个故障。在1985年6月至1987年7月之间,加拿大原子能公司(AECL)制造了6起涉及Therac-25的事故。每一次都是严重的辐射过量,导致严重的伤害,致残和死亡。
当第一批事件开始出现时,没有人完全确定正在发生的事情。辐射中毒很难诊断,特别是如果您不期望这样的话。与ETCC事件一样,尽管患者服药过量,但机器仍报告剂量不足。当医院物理学家怀疑药物过量时,他们甚至联系了AECL,但被告知这种事情是不可能的。
几周后,ETCC又出现了第二次用药过量,大约是在那个时候,FDA和新闻界开始介入。早期,关于原因的猜测很多。有趣的是1986年RISKS邮件列表中的此评论。
这是我对发生的事情的推测:我怀疑在X射线模式下电子束中的电流可能要大得多(因为您希望在两种模式下使用相似的剂量率,并且X射线的产生更间接)。因此,当您选择X射线时,我敢打赌目标会落入原位,并且电子束电流会增加。我怀疑在这种情况下,电流在目标移动到位之前就被增强了,并且非常高的电流电子束进入了患者体内。
这怎么可能发生?我的猜测是,软件人员不会认为有必要防范这种故障模式。机器设计人员传统上使用机电联锁装置来确保安全。治疗机的计算机控制是一个相当新的发展,它位于而不是代替旧的机电机制之上。
Therac-25是第一台完全由软件控制的放射治疗设备。正如上面Jacky所说的那样:大多数此类系统使用硬件互锁装置来防止在未正确配置目标时发射光束。 Therac-25没有。
该软件包括在PDP-11上运行的许多关键模块。首先,有单独的过程来处理系统的每个关键功能:用户输入,光束对准,剂量跟踪等。每个过程都在PDP-11组件中实现。控制这些过程的是一个实时OS,它也在Assembly中实现。从单个过程到操作系统本身,所有这些软件都是单个软件开发人员的工作。
但是,AECL对该软件充满信心,因为它不是新软件。该软件的最早版本出现在Therac-6上。开发工作始于1972年,该软件于1976年适用于Therac-25。Therac-20也使用了相同的内核。在AECL中,人们认为该软件必须是安全的,因为他们已经使用了很长时间了。
实际上,当AECL在1983年对Therac-25进行内部安全性分析时,他们是基于以下假设进行的:
1)通过在硬件模拟器上以及在远距离治疗设备上进行的广泛测试,减少了编程错误。分析中不包括任何残留的软件错误。2)程序软件不会由于磨损,疲劳或再现错误而衰减。3)计算机软件错误是由硬件组件故障和“" soft"由alpha粒子或电磁噪声引起的(随机)错误。
换句话说:我们已经使用了很长时间的软件,并且软件始终可以完美地复制和部署。因此,我们看到的所有错误都必须是由辐射或硬件错误引起的暂时性错误。
在ETCC发生第二次事故后,医院的物理学家使Therac-25停止使用,并与技术人员一起复制了导致药物过量的步骤。触发故障54并非易事。错误消息,尤其是当他们尝试有条不紊地复制确切步骤时,因为事实证明,如果缓慢输入数据,就不会出现问题。
要触发过量,您需要快速键入,这是经验丰富的操作员可能具有的速度。物理学家一直练习直到他可以复制错误,然后通知AECL。当他进行测量以查看超剂量时,AECL回了电话。他们无法复制该问题。 "它可以在我的机器上运行,"本质上。
在按照要求的速度接受训练后,AECL技术人员返回到该速度,并确认他们可能会导致服药过量。当医院的物理学家进行测量时,他们在过量中发现了大约4,000拉德。 AECL进行了类似的测试,引发了25,000拉德的超剂量。现实情况是,根据时间的不同,输出可能是随机的。
有了这些信息,根本原因就更容易理解:存在种族状况。具体而言,当技术人员输入错误的" X"时,对于X射线,计算机将计算出束激活顺序以传递高能束以产生X射线。当技术人员击中" UP"箭头来纠正他们的错误,它应该强制重新计算该激活顺序-但是,如果用户键入得太快,UI将会更新,并且重新计算将永远不会发生。
到1986年中,食品药品监督管理局(FDA)介入其中,并要求AECL提供纠正行动计划(CAP)。随之而来的是一个漫长的修订过程,因为AECL将提供其CAP,而FDA将跟进问题,从而导致CAP的新修订。
例如,FDA审查了第一个CAP版本,并指出它不完整。具体来说,它不包括测试计划。 AECL回应:
该软件没有单独的测试计划和报告,因为硬件和软件都经过了多年的单独测试和测试。
我们还对您不打算对软件的将来修改执行[测试]协议表示关注。我们认为,每次进行修改时都必须进行严格的测试,以确保修改不会对系统的安全性产生不利影响。
尽管AECL努力将诸如测试之类的复杂任务包含在其CAP中,但他们已经发布了说明,该说明允许进行临时修复以防止将来发生事件。不幸的是,在1987年1月,又发生了另一起事件,这是由另一个软件错误引起的。
在此错误中,存在一个由多个进程共享的变量,这是一个标志,用于确定是否需要检查转盘中的光束准直器以确保一切都位于正确的位置。如果该值不为零,则需要执行检查。如果值为零,则不为零。不幸的是,该软件会增加该字段,并且该字段只有一个字节宽。这意味着每第256个增量,当变量应为非零值时将为零。如果那个不正确的零点与操作员的动作对齐,则光束会以全能量发射,而转盘不会位于正确的位置。
AECL对此有一个修复程序(停止递增并仅设置该值),并修改了其CAP以包括该修复程序。 FDA意识到这可能会解决问题,但仍然存在担忧。在内部备忘录中:
我们的立场是,可以合理地预期拟议的CAP可以纠正开发它们的缺陷(Tyler)。我们不能说我们对整个系统的安全性有合理的信心……
通过CAP的多次修订,这种反复进行。在该过程的每个步骤中,FDA都会发现测试问题。到目前为止,AECL的测试过程只是运行机器并记录是否出了问题。由于该软件在某些版本中已经使用了十多年,因此他们没有发现测试软件的任何理由,因此没有能力或计划在FDA要求时实际测试该软件。
令人惊讶的是,提供的测试数据表明,为应对Therac-25中的编辑问题而进行的软件更改很合适,证明了相反的结果。 …我只能假定修复不正确,或者输入的数据不正确。
最终,该软件已修复。进行了立法和法规更改,以确保将来不会发生此类事件,至少不会以相同的方式发生。
值得注意的是,有一位开发人员编写了所有这些代码。他们于1986年离开AECL,但值得庆幸的是,没有人透露他们的身份。尽管将责任归咎于他们(他们做出了每种技术选择,他们编写了每个错误)可能很诱人,但这样做绝对不公平。
由于AECL仍然无法解释如何测试其设备,因此应该清楚地发现问题是系统性的。不论您的软件开发人员有多出色,都无关紧要。因为您有优秀的开发人员,所以软件质量不会出现。这是一个过程的最终结果,该过程既可以通知您的软件开发实践,也可以通知您的测试。您的管理。甚至您的销售和服务。
尽管ETCC上的事件最终推动了变化,但这些事件并不是最初的事件。医院物理学家已经向AECL报告了问题。至少一名患者已经提起诉讼。但是这些信息并没有在整个组织中传播。没有人将这些零件放在一起以识别设备有故障。
在这个网站上,我们开玩笑了很多,却以这个世界的宝拉·比恩斯和罗伊斯为代价。但是,无论TDWTF文章的反对者多么无能,鲁re,多么无知,它们都是系统的一部分,而该系统使它们处于该位置。
IT中的故障很少是个别故障。它们是过程故障。它们是系统性故障。它们是组织上的失败。 AECL和Therac-25的故事说明了组织失败的后果有多严重。
AECL没有软件过程。他们没有将软件视为更大整体的组成部分。在那种环境下,在安全性至关重要的系统上工作,没有开发人员会完全成功。考虑到这种情况,生命几乎如命如焚,因此构建一个能够生产安全,优质软件的系统似乎应该成为当务之急。不是。
尽管Therac-25事件是古老的历史,但软件变得更加重要。尽管我们希望安全性至关重要的软件具有严格的流程,但我们知道并非总是如此。 737MAX是一个臭名昭著的最新示例。但是随着软件在现代世界中的重要性,甚至更多的琐碎软件问题也可能成倍增加。无论是机器学习加强种族主义,社交网络变成虚假信息的泄漏池还是安全性差的IoT设备变成僵尸网络,我们的软件都存在并与世界互动,并在现实世界中产生影响。
如果没有别的,我希望本文能使您考虑一下用于创建软件的过程。是否建立了生产质量的流程?有哪些质量障碍?质量是重中之重吗?如果不是,为什么呢?您的过程是否考虑了大规模的质量?您可能知道软件的故障模式,但是您了解组织的故障模式吗?它的盲点?它所做的假设可能并非在所有情况下都有效?
让我们回到导致ETCC事件的比赛状态。这是由于用户过快地按下向上箭头而导致系统无法正确注册其编辑。在FDA CAP流程不断发展的同时,AECL希望确保人们仍然可以安全地使用Therac-25,这意味着发布用户可以应用于其设备的快速修复程序。
主题:THERAC-25线性加速器操作程序的更改即刻生效,直到另行通知,用于将光标移回处方序列的键(即,带有向上指向的光标" UP"箭头)不得用于编辑或任何其他目的。为避免意外使用此键,必须取下键帽,并用胶带或其他绝缘材料将开关触点固定在打开位置。对于后者的帮助,您应该联系当地的AECL服务代表。禁用此键意味着,如果输入的任何处方数据不正确,则&R" R"必须使用reset命令,并重新输入整个处方。对于“多端口”选项的那些用户,这还意味着将无法在端口之间编辑剂量率,剂量和时间。
一方面,这是一条简单的指令,可以有效防止ETCC事件再次发生。另一方面,令人难以置信的是,病人的生命垂悬在撕开的键帽和胶带上。
本文旨在作为事件的简要摘要。本文中的大多数技术细节都来自Therac-25事件的详细介绍。这是该主题的权威资料,我建议阅读全文。它包含更多细节,包括对软件选择和组织故障的更深入研究。
[广告]根据您的业务需求,使用BuildMaster放心地发布软件。立即下载!
约翰·梅尔维尔(未注册)我是一名在医学院毕业之前获得计算机科学学位的医生。我经常以Therac-25事件为例,说明为什么我们需要在两个领域都经过培训的双重专家。我必须在这个奇妙的摘要中添加两点。
Therac-25的影子比记住它的人更长。我认为,这一事件使医学信息学倒退了20年。在整个80年代和90年代,即使个别医生都不知道为什么,在医学中也只有计算机有危险的感觉。这就是为什么当我在2002-2006年居住时,我们仍然在纸上写下所有订单和注释的原因。直到美国联邦政府在2000年代中期重拳出击并表示除非您采用电子健康记录,否则计算机才真正涉足临床医学,除非您采用电子健康记录,否则直到付款。
医学界和管理它的政府机构习惯于冒险并拥有管理它的系统。公关
......