Therac-25并不是一台所有人都乐意见到的机器,这是一台放疗治疗仪。简单来说这是一台用来对付癌症的“癌症武器”。它的原理是使用X射线或者电子束,进行线性加速之后以人类为目标进行发射,针对人体内部的癌细胞组织进行杀灭。这台医疗仪器有普通房间那么大,在杀灭癌细胞的同时对周围的正常细胞也有一定损害。当然它的目的其实和化疗一下,希望尽可能多的杀灭癌细胞,从而治愈病人,而不是上海他们。
但在1986和1987年,有6个不行的病人由于接受了Therac-25的过量放射治疗,造成了较严重的伤害。他们由于接受了过量的辐射,最终造成4人死亡,2人终生残疾的伤害。
在调查过程中发现,首先,软件控制的错误是导致此次事故的最大原因;其次,该机的设计依赖于控制计算机的安全性,但在设计中并没有一套系统用来保证当产生错误时不会导致灾难性的后果。
Therac-25案例是历史上比较有名的一起由于软件错误造成的医疗事故。我们应该引以为戒。
历史和发展
Therac-25机器是由加拿大原子能公司(AECL)生产的。它是公司的第三版仪器,前面两版分别是Therac-6和Therac-20,这两台是该公司与一家法国公司联手制造的。当时当在建造Therac-25时,两家公司的合作关系已经终止了。然而两家公司都有权利使用前两版软件的代码,所有三台机器使用的都是名为PDP-11的计算机。
Therac-6和Therac-20的操作使用不需要连接电脑,他们被设计成能够作为独立的设备进行操作。在手动模式下,放射治疗技术人员会设置机器各个部分的配置,包括转盘的放置和其他几个部件。在电子模式下,扫描磁铁将被用来输出辐射,这样能够覆盖更大的范围。在X射线模式中,目标被放置在能够被电子束照射到的位置,以将产生的X射线照射到病人。最后,会有一面镜子放置在波束的前方。当镜子被放置在正前方时,电子束将不会启动。同时镜子能够反射光线,这将有助于放射技术人员更精确地瞄准目标。
在Therac-6和Therac-20机器中,有硬件连锁装置防止操作者做出错误的操作,比如选在高功率的X射线对准非靶点的目标。试图在无效模式下启动加速器会使保险丝烧断,是的操作终止。相关硬件组件和PDP-11计算机的添加扩展也很容易,技术人员能够使用一处预留的端口,使得电脑和伺服系统和转台等设备相连。相比人工操作,医院更愿意使用电脑操作,因为这样意味着有着更多的时间能够接待更多的患者。
所以当制造Therac-25机器时,人们决定使用计算机进行控制。他们不仅取消了以前使用的手动控制功能,更取消了硬件连锁机制。他们认为计算机能够跟踪机器的设置,如果它检测到危险情况时会将机器关掉。
事故发生了
Therac-25进入实际使用是在1983年。在前面使用的几年中,并没有出现什么问题。在1985年6月3日,有一位妇女在接受乳腺癌的治疗,她的治疗方案是接受200辐射吸收剂量的照射。但当机器供电之后,病人感到了巨大的热量,在她不知情的情况下,病人已经接受了10000到20000剂量的照射。最后病人还活着,但由于辐射的关系,她失去了左乳房和她的左手臂。
7月26日,加拿大州安大略市安大略癌症基金会的一名患者被烧伤。这个病人死于那年的11月。验尸报告认为,死因是由于宫颈癌晚期。但如果她还活着,她需要进行一个髋关节置换术用来纠正由于Therac-25造成的损害。
1985的12月,第三个女人是由一个安装在华盛顿医院的Therac-25被烧伤。伤口在她的臀部,靠近Therac-25的放射部位。这名病人还生活,但最终需要皮肤移植来修复由于辐射造成的烧伤。
1986年3月21日,一个病人在泰勒,德克萨斯接受他的第九轮Therac-25治疗。医生开了180放射剂量针对背上的小肿瘤。当机器打开时,他感到热和疼痛,这是意想不到的,因为放射治疗通常是一个无痛的过程。Therac-25本身也开始以一种不寻常的方式嗡嗡作响。当他被一秒脉冲辐射的时候,病人开始从治疗台上坐了起来。这一次,他起床,开始到门口寻求帮助。他获得了大量的过量辐射。因此而住院,最终在5个月后死亡。
调查
之后的每一起事故,当地医院会上报到国家医疗机构监管局。一开始,人们并不认为是Therac-25提供给了过量的辐射,这台机器有很多的保障机制,当辐射量与规定的剂量不符合是经常会显示错误并暂停操作。在安达略时间后,人们发现了一个很明显的错误:如果转盘处在一个特定的位置,可能会产生过量的辐射。如果这时射线并没有对准靶位的话,病人就会接收到过量的辐射。
AECL在经过测试之后始终没有重现错误的情况。他们估计可能是三个微动开关在确定转台位置时失效造成的故障。所以微动开关被进行了重新设计,是的任何一个微动开关都能够在发生故障时被计算机检测到。这个改动很快自己起中实现并拯救了以后的病人。
放疗技师全程参与到此次事件的调查中。他们工作到夜间,并通过周末试图重现问题。与技术人员一起运行机器,希望能够找出问题。最后发现如果用户选择X射线模式,机器将开始设置高性能X射线机。这个过程花了大约8秒。如果用户在这8秒钟内切换到电子模式,该转盘将不会切换到正确的位置,转盘将处于一个未知的状态。
由于测试条件的限制,这种测试很难确定到底该由谁来负责。最后,工作人员在芝加哥一家癌症研究中心的物理学家证明,在therac-20上的软件还存在的缺陷。通过对他的老型号的机器上执行的程序,他找到了类似的错误,这时机内保险丝会断。但保险丝是一个硬件联锁已在Therac-25被删除了。
为了调查和诉讼的进展,Therac-25软件被审查。Therac-25的PDP-11是完全用汇编语言编程。不仅是应用程序,也包括底层的执行代码,这是一个操作系统的部分。该计算机负责处理该机的实时控制,其正常运行和安全系统。今天这种工作可以由一个或两个微控制器,与一个运行一个图形用户界面前端的电脑完成。
该公司从未公开发布源代码,但一些专家包括调查发现。他们的发现是令人震惊的。这个软件似乎是由一个程序员编写的,他很少有实时系统编码的经验。而且并没有任何证据表明,针对时序分析已经完成。据该公司反映,是一个程序员写的基于therac-6 20的软件。然而,这个程序员不再为公司工作,也无法找到了。
1986年4月11日,一次事故发生在泰勒,德克萨斯。这个时候,病人正在接受治疗在他的耳朵的皮肤癌。在三月二十一日的事故中,同一个操作员正在运行这台机器。治疗开始时,患者看到了一个明亮的光,并听到煎鸡蛋的声音。他说,感觉自己的脸上着火了。患者三周后死亡,由于辐射烧伤他的大脑和脑干的右侧颞叶。
最后的事故很晚才出现,这一次在一月雅基马谷医院,1987年。这个病人后来因受伤而死亡。
后果
最终FDA宣布Therac-25的“缺陷”。该公司发布的补丁软件和硬件进行了更新,最终使机器恢复服务。诉讼在法庭上解决了。这似乎是直到1987年1月17日才解决问题,当在华盛顿另一个病人被过量辐射后。他们又找到了一个新的问题:计数器溢出。如果操作员发出命令,在准确的时间计数器溢出,机器会跳过设置一些配件–包括移动瞄准镜等。结果是又一次的光束,和过量。病人3个月后死亡。
重要的是要注意,软件是Therac-25事故的起因,这不是根本原因。整个系统设计是真正的问题。安全临界载荷被放置在一个计算机系统中,而不是设计来控制它们。不执行时序分析。单元测试从未进行。不创建硬件和软件故障系统。这些任务不仅是软件工程师的责任,而且是项目的系统工程师的责任。Therac-25是淘汰了,但它的遗产将留下来。这是一种分水岭事件,说明当生命关键系统软件没有正确的设计和充分的测试时,会有多糟糕的事情发生。
優態客(Yourtechnic)的博客:www.yourtechnic.com
優態客(Yourtechnic)的联系方式:postmaster@yourtechnic.com