操作员|核能杀手Therac-25:治病机器与杀人软件( 二 )


这起事故发生在美国,美国有个FDA(食品药品监督管理局),但Therac-25上市并没有经过FDA的测试。
FDA的上市认可有两种,一种是PMA(Pre-market Approval)),一种是510K。PMA需要厂家充分证明该设备的安全性,并通过FDA组织的临床试验与实验室测试。而510K则轻松的多,只要证明该设备与市场上已存在的设备具备等同性即可。
Therac-25上市用的是510K,大概是因为他与Therac-20具有某种意义上的等同性。
实际上不仅FDA没有对Therac-25进行过独立测试,AECL也没有,他在1986年提交给FDA的事故报告里承认了这一点。
AECL表示一直以来所有设备(Therac-6、Therac-20、Therac-25)上的软件都是一块进行测试的,没有单独对Therac-25进行过完整测试。Therac-25的很多代码是从Therac-6中移植过来的,大概AECL认为测过Therac-6就相当于测过Therac-25了吧。
另外还需要一提的是,Therac-6的代码都是法国伙伴CGR编写的。
后来的事实证明,AECL对这些代码知之甚少。
1985年7月,加拿大安大略省癌症基金会,第二起。
和第一起类似,患者在治疗过程中感觉到了剧痛和灼烧感,但诡异的是,明明是辐射过量,Therac-25显示器却多次报出了“No DOSE delivered (没有剂量传输)”信息。
随后AECL派了工程师去调查,无法复现错误。
但他还是表现出了一副控制了局面的样子。
他“猜测”问题是由电路故障导致的,然后基于这个猜测,AECL召回Therac-25进行了改造。根据说明,这次改造可以将安全性提升5个数量级,也就是原来的10万倍。
不知道这个数字是怎么来的,更不知道为什么如此安全,AECL还是在改造说明中建议用户使用Therac-25时最好进行“目视检查”。
这起事故的患者三个月后死亡,后来经过测算,当时的辐射强度大概在13000伦琴至17000伦琴之间。
1985年12月,美国雅基玛谷纪念医院,第三起。
这次事故中的Therac-25刚刚经过了AECL的所谓5个数量级安全性的改造。
和之情的情况类似,先是病人在放疗后身体出现了疑似过量辐射的红斑,于是医生联系AECL,之后便是AECL的否认三连:先回复不可能,然后表示从没有出现过类似的情况,最终猜测可能是其它原因。而且这次AECL还附了一个两页纸的说明,详细列举了Therac-25不可能过量辐射的理由。
医生没有办法,最终只能在院方的报告中将事故原因归为未知。
病人没有死亡,但留下了残疾和伴随终生的疼痛。
03 Debugdebug是查找软件bug的过程,其中的关键是复现。
所谓复现,是指找到bug发生的条件,然后模拟这些条件,让bug重复发生。前面事故一件件发生,而AECL始终没有成功复现过问题。
直到第四起和第五起。
这两起都发生在一个地方,前后间隔不过三周,本质就是一次天然复现。
1986年3月,美国东德克斯说肿瘤中心,第四起。
事故的迹象都是一样的,患者的症状也是一样的,AECL的回复同样是一样的:不可能、没听说、应该是其它原因。
这次AECL给出的其它原因是漏电,大概因为患者在描述当时的感觉时说像遭受了电击,并听到了滋滋声吧。
和之前一样,AECL靠着否认三连又一次控制了局面。
但很快,第五起就发生了。
1986年4月,美国东德克斯说肿瘤中心,第五起。
第五起和第四起发生在同一个地方,对医院和患者来说,这显然是一种巨大的不幸。但对整个事件来说,这却像一种幸运,因为正是如此才让Therac-25的bug现了原形。
不过复现bug的不是AECL,而是这个医院的医生。
第五起事故发生后,他不再相信AECL三周前给出的解释,开始自己调查事故原因。