电脑程序的致命缺陷,导致多起伤亡!

悬案迷局 2024-02-10 13:07:54

1986年4月11日,在美国一家名为东德克萨斯癌症中心的医院里,一位名叫Vernon的66岁公交司机将要与面部皮肤癌进行激烈的战斗。在医生和一名护士的指导下,他悠然步入治疗室,躺上治疗台,身体得到固定,准备接受放射治疗,也就是我们常说的放疗。放疗是一种在可控情况下,用高强度辐射对病人体表或体内的癌细胞进行杀伤的治疗方法。人类自1896年以来一直在探索用放疗治疗癌症,到1986年时,技术已经相当成熟。然而,这一天医生在对Vernon进行治疗时,使用的是当时号称最先进的Therac-25治疗仪。

Vernon躺好后,医生走进控制室,开始对治疗仪进行设置。由于每天需要高效地治疗众多患者,医生对这台机器的使用方法已经烂熟于心。在电脑屏幕上迅速进行操作时,几条报错信息弹了出来。然而,这台机器每天都会弹出许多报错信息,而附带的说明书对这些错误代码并没有解释。医生们通常将这些错误视为机器的小毛病,不予理会。再加上购买这台机器的费用不菲,医院需要快速高效地治疗大量患者才能收回成本。于是,医生熟练地连续按键,关闭了这些提示,然后按下了启动开关,接着发生了可怕的一幕。治疗仪发出一声爆响后,躺在治疗台上的Vernon发出了痛苦的惨叫声。医生急忙跑到他身边,看到Vernon痛苦地扭动身体。稍微镇定后,Vernon描述说随着那声巨响,他感觉自己的脸被一个壮汉狠狠殴打了一拳,同时眼前出现了一道像是闪电的强光,耳朵里传来了烤肉一般滋滋的声响。医生听了描述后吓出了一身冷汗,因为这种状况说明Vernon的头部受到了严重的辐射伤害。但是,在这台被称为最先进最安全的设备上,这样的事情怎么可能发生呢?然而,现实却是如此残酷,仅仅20天后,Vernon离世了。尸检显示,他的大脑和脑干都受到了严重的辐射损伤。他在短短一瞬间就受到了比原计划高百倍的放射线照射。强大的电子束穿透了他的皮肤,直入头部深处,几乎把他大脑的一部分给烧熟了,他听见的滋滋声可能就是大脑被辐射破坏时发出的声响。

Vernon的死亡成为了医疗历史上第一起被记录在案的放疗造成的致命事件,但当时很多听闻这起事件的放射科医生似乎都表现地不是特别惊讶。因为在他们这个圈子里,Therac-25这台机器早就已经恶名远扬了。从一年前的1985年开始,围绕这台当时最先进的Therac-25治疗仪所发生的恐怖医疗事故就没有停止过,以至于医生们心里都清楚,出人命只是早晚的事而已。那么Therac-25究竟是一台怎样的机器呢?Therac-25是由一家叫做加拿大原子能公司(AECL)生产的,之前他们曾经推出过代号为Therac-6和Therac-20两种机型。这两种机型需要医生手动调整机器上的硬件来对输出的强度进行调节,同时使用了各种硬件措施来防止误操作造成的辐射过量。由于这两种机型的体积小巧,安全性高,受到了很多医院的欢迎。不过,随着病人群体的增加,医院需要更加容易操作、更加高效的放射治疗设备。于是,在1983年,加拿大原子能公司开始对外销售最新的Therac-25。这台机器号称使用了当时最先进的电脑控制技术,各项参数和设置都只需要敲击键盘就能在电脑屏幕上完成。安全性上抛弃了之前的硬件保险,而是完全交给了电脑进行管理。原子能公司声称,如果检测到异常,电脑会直接停止治疗,这使得Therac-25成为了高效和高安全性的完美医疗设备。更为优越的是,它有E和X两种治疗模式。当处于E模式时,电子束会被一片磁铁分散到比较大的范围,适合用来杀死皮肤或者皮肤下方比较浅的癌细胞。而当操作员通过电脑让机器上的一个圆盘转动到特定的角度,一片钨靶会转到电子发射口,此时机器就进入到了X模式,发出的电子束更具有穿透性,可以透入人体内部去杀灭内脏器官上的癌细胞。不管是哪一种模式,机器最初产生的高强度辐射都会被中途的磁片或者钨靶降低到人体可以接受的程度。这样一台可以兼顾病人体表和体内癌症的治疗设备,而且所有的模式切换和安全控制也可以在电脑上简单操作,这无疑大大增加了医院的效率。于是,在推向市场后不久,众多加拿大和美国的医院就纷纷进行了采购和装备。

1985年6月3日,第一起事故就发生了。当时,美国佐治亚州一名名叫Katie Yarborough的61岁女性来到医院进行乳腺癌的治疗。这是她的第12次放疗,经过之前的11次治疗,她的病情明显好转,医生已经告诉她做过最后这一次治疗,她基本上就痊愈了。进入治疗室后,准备流程和以前没有什么不同。医生精准地将电子束瞄准了她胸部的癌变区域,之后应该会在她没有任何感觉的情况下,让200拉德的辐射能量打进她的体内,去杀死残存的癌细胞。但是,这次Katie明显感觉到胸口产生了剧烈的灼烧感。她立刻就把这个情况告诉了医生,然而在场的医生和技术人员都很确定地告诉她,这是不可能的,肯定是她的错觉。让人想不到的是,很快地在Katie的胸口就出现了一块红斑,之后她后背相对的位置也出现了一块更大的红斑。毫无疑问,她的胸膛被强大的放射线给烤了个对穿。在随后的一段时间里,Katie胸口本来只有一枚硬币大小的红斑开始扩大,表层的皮肤和内部的肌肉组织开始迅速地坏死脱落。Katie的胸口慢慢地出现了一个日渐加深的恐怖大洞,给她造成了剧烈的痛苦。在各种药物治疗和植皮手术都宣告失败后,Katie别无选择,只能切除了本来已经战胜了癌症被保下来的左侧乳房。同时,她的左臂也自此瘫痪,完全丧失了功能。事后的调查结果显示,当天施加在Katie胸口的辐射剂量并不是原计划的200拉德,而是恐怖的15000-20000拉德,几乎是原计划的100倍。

在科学上一般认为,人体在承受了超过650拉德的辐射后就会有很大的机率死亡,所以Katie遭受的辐射是致死剂量的30多倍,相当于她在泄漏的福岛核电站的反应堆旁边连续进出几十次。愤怒的Katie把医院和设备制造商加拿大原子能公司告上了法庭,最后原子能公司和她达成了庭外和解。这起事故发生后不久,医院的一名医生联系了一个专业组织,试图发起一次调查弄明白究竟发生了什么?但是他很快地就接到了加拿大原子能公司的警告电话,告诉他在没有任何证据的情况下就做出这种毁坏公司声誉的行为,会告到他倾家荡产。这名医生在原子能公司的威胁下屈服了,但是机器上的致命错误并不是靠着堵住人们的嘴就能被修复的。一个月后,第二起悲剧就发生了。

1985年7月26日,加拿大的一名患有宫颈癌的妇女在接受Therac-25的放射治疗时,同样的意外发生在了她的身上。本来应该接受150拉德放射治疗的她,最后承受的剂量是惊人的17000拉德,这让她的整个臀部都开始红肿溃烂。3个多月后,这名妇女就死去了。官方对外的说法是她死于癌症的恶化和扩散,但是验尸报告也显示,她的整个臀部肌肉和髋骨都被高强度的放射线所摧毁。就算癌症没有杀死她,她的后半生也需要不断地进行各种痛苦的手术治疗,可谓生不如死。这起事件发生后,加拿大原子能公司总算意识到可能是他们的产品有缺陷,于是派了一名技术人员前来查看机器。最后得出的结论是,那个负责给机器进行模式切换的圆盘有微小的瑕疵,以至于当机器发出强力电子束时,对它进行约束和弱化的磁片或者钨靶没能到位,所以才会发生这样的意外。在对所有的机器简单地更换了一些零件,做了微小的调整后,原子能公司就自信地宣布故障已经排除,而且比以前安全了9万倍。然而,即便是发出了这样的豪言壮语,意外依然在不停地发生。就在机器恢复使用的几个月后,在1985年12月,另一名治疗宫颈癌的妇女再一次地受到了超过18000拉德的放射伤害。幸运的是可能因为个人体质的不同,这名妇女在接受了多次手术,留下了一些轻微的残疾和疤痕后,幸存了下来。之后,美国和加拿大的医生们都开始在私下里互相通信来讨论发生在Therac-25这台设备上的意外,但是原子能公司却采取鸵鸟政策。对于医院反馈给他们的各种设备问题,不闻不问,直到两起真正致命的事故发生。

1986年3月21日,一名叫做Ross的男性患者来到了东德克萨斯癌症中心治疗背部的肿瘤。医生设定的照射剂量是180拉德,连续对患病部位照射两次。当电子束第一次照射到Ross的背部时,他因为巨大的灼烧感而痛苦大叫了起来,高声要求停止治疗。由于治疗室里的对讲机失灵,另一个房间里的操作员根本没有听见他的声音。于是,Ross强忍着痛苦从治疗台上坐了起来,而操作人员却完全没有意识到,再一次启动了机器。瞬间,一股强大的放射线贯穿了Ross的手臂,让他感觉自己的手被人给撕扯了下来。于是,他再一次痛苦地叫出了声。之后,他跳下了机器,跑到了大门旁拼命地捶门,终于引起了人们的注意。在听了他的讲述后,医生表示有可能是机器漏电造成了Ross的那些痛苦,让他回家静养一下可能就会好了。听了医生的解释后,Ross半信半疑地回家了。医生们则是在对机器进行了几项简单的检查后,就继续治疗后面的病人了。但是几周后,Ross就再一次被送回了医院。此时的他已经全身瘫痪,不停地往外吐血。原来在那天治疗时,他受到的辐射高达25000拉德,几乎破坏了他胸腔里所有的神经系统还有关键器官。在病床上痛苦地煎熬了5个月后,Ross就死去了。而原子能公司方面在这起事故发生后,只是装模作样地进行了17天调查后,就对外宣称所有机械故障已经排除,可以继续使用了。但是就在机器恢复使用仅仅四天后,发生了我们文章开头所说的那起悲剧。66岁的Vernon为了治疗面部癌症来接受放疗,却连大脑都被强力的放射线给烤熟了。这起惨烈的悲剧也终于成为了压到骆驼的最后一根稻草。

美国食品和药物管理局 (FDA) 勒令所有医院停止使用Therac-25,原子能公司必须找出意外发生的根本原因进行上报。这可难坏了这家公司,因为就连他们也不清楚问题究竟出在哪里?原来那个他们号称最完善、最安全的操作系统,完全是公司里一名编程发烧友一样的员工用汇编语言写成的,而且这名现在都不知道其姓名的员工还在1986年从公司离职了,所以软件方面的维护和修改完全变成了不可能的任务。这段有着10万行代码的程序会存在各种冲突和错误也是必然的,而原子能公司在没有进行过任何像样的测试的情况下,就采用它来控制放疗设备,也真的可以说是无知者无畏了。在后续的使用过程里,果然是错漏不断。医院的技术人员们表示,他们每天至少会遇到4次系统提示发生关键性错误。这些错误被以1-65进行编号,但是这些编号究竟代表着什么样的错误,会在什么情况下发生,原子能公司自己都不是很清楚,更别提给医院提供什么详细的故障解释和排除手册了。所以医生和操作员们遇到这种情况时,也习惯了简单地按键关闭这些报错信息,继续对病人进行治疗。

那么造成众多病人重伤甚至是死亡的原因,会不会就隐藏在那些错误代码当中呢?最终解开了之前那些惨案谜团的,是一位在东德克萨斯癌症中心工作的名叫Fritz Hager的医生。在对技术人员们进行了详细地询问后,Hager医生发现,这些事故发生前,电脑上都会显示代码为54的报错信息。但是这个错误究竟是什么,究竟要怎么样才能触发这个错误都不得而知。为了弄清楚其中的问题,Hager医生开始在电脑上疯狂地模拟着技术人员在给病人治疗时有可能进行的操作。终于在连续好几天废寝忘食地尝试后,他成功地重现了54号错误。原来技术人员在进行快速操作的时候,往往会发生一些疏漏,比如明明需要把机器设定到E模式,却一不小心选择了X模式。在发现自己的错误后,技术人员往往会立刻进行修改,让机器返回到E模式。这种切换在键盘上实现起来非常迅速,可能只需要2-3秒的时间。而反应到Therac-25这台机器上,就不是这么简单的情况了。我们之前说过它的模式切换都是靠着一个圆盘的旋转来实现的。从一个模式跳转到另一个模式时,圆盘需要旋转至少8秒钟。而在这期间如果技术人员再次进行模式切换的操作的话,圆盘就会卡在半途中停下,然后计算机就会发出54号报错信息,代表着射线强度过低或者过高。此时如果技术人员选择关闭报错信息,继续进行治疗的话,没有经过任何限制和减弱的强力放射线就会毫不留情地贯穿病人的身体,造成之前提到的那些惨剧。而这种灾难性的错误,在之前依靠硬件连锁的物理机制进行安全保障的老型机器上,是完全不可能发生的。只能说在那个刚刚开始使用电脑的时代,这些公司对于软件的重要性完全没有意识。Hager医生把这个错误上报后,FDA立刻宣布Therac-25存在致命缺陷。在原子能公司确定修复好这个错误前,所有医院都不准继续使用。之后原子能公司针对这个错误提供了软件补丁,并且开始处理和事故中伤亡者家属的官司。在进行了巨额的赔偿后,这些官司都在庭外和解了。1986年底确定解决了54号错误的Therac-25得到了FDA的批准,重新投入使用。但是隐藏在那10万行代码里的致命陷阱,并不止于此。

1987年1月,在恢复使用1个多月后,一名叫做Glen的65岁老人来到医院治疗胸部的癌症。医生设置的辐射强度是86拉德,但是在按下按钮后,一道10000拉德的电子束轰击到了老人的胸口,让他一时间痛苦地连话都说不出来,几天后一条恐怖的红斑出现在了老人的胸口,3个月后他死于辐射引起的并发症。事后调查发现,Therac-25的控制程序里有一段负责安全的代码,它会自动检测机器上用来调整放射线强度的圆盘的位置。当发现圆盘不在正确位置时,它就会发送一个错误数字。收到这个报错信息后,程序就会阻止机器的运行。随着圆盘被调整到正确的位置,这个数字就会归零,然后程序才会允许机器发射电子束。但是当初编写程序的那个发烧友只分配了一个字节的记忆空间给这个程序来储存错误代码,也就是说它能存储的最大错误数字是255。超过这个数字的话就会发生数据溢出,计数器会自动归零。这时明明控制放射线强度的圆盘没有完全就位,系统也会认定已经安全了。当操作人员按下治疗按钮后,足以致命的强力射线就会穿透病人的身体。这起死亡事件也带来了Therac-25的终结,所有医疗机构认定这台机器缺陷太多过于危险,所以很快地就把它淘汰了。之后Therac-25作为机械和软件工程的经典反面案例,进入了很多的教科书,以它为教训。现在几乎所有的放疗设备,虽然也大量使用电脑进行操控,但是在安全性方面都采用了软件和机械联锁的保险装置,确保当存在危险情况时,能以物理方式阻止机器的启动,至此以后类似的惨剧就很少发生了。

0 阅读:55