这是写错误的编程代码可以证明是致命的

广告

有时,当关键系统故障编程时,它会对股票和财产造成巨大损害。尽管大多数情况下,这种损害处于低范围,但有时后果是无法想象的。这是由于编程不良而发生的一些著名灾难。

Therac-25

任何研究计算机科学的人都可能了解Therac-25报告,就向学生提供了一个重要的案例研究,以了解程序员的致命疏忽。Therac-25是一款用于治疗侵略性癌症的放射治疗机。它基于其较早的型号,即Therac-6和Therac-20。Therac-25具有双重模式,一种以较轻的剂量,第二次强剂量更强。

建立较早型号的设计师在他们的脑海中遇到了过量用药的危险,因此他们制定了防止风险的故障安全机制。当Therac-25的程序员从旧机器复制代码时,他不知道故障安全是否会像上一台机器一样有效地在新机器上工作。以前设备的程序员是一个自学成才的人,没有给未来程序员学习工作的评论。

以前的程序员也留下了机器中的缺陷。如果技术人员错过了击键,则该设备可能会以两种模式意外运行,其次是另一种模式。因此,当这种情况发生时,机器不会将辐射散布在较大的区域上,而是会爆破浓缩的辐射束,并留下强烈的燃烧痕迹。该缺陷至少杀死了五人。

没有开火的爱国者导弹

在生活中,似乎没有重大后果的错误很少存在。而在编程中,最直接的错误可能会造成巨大的灾难。最常见的编程错误之一是滥用浮点数。浮点数的问题在于,它在内存中的空间最小,如果输入更为实质,则系统将剪切数字以将其适合内存。对我们来说,删除一些零可能并不重要,但是对于计算机来说,这个错误可能会成为一场灾难。

1991年2月25日,在第一次海湾战争期间,在沙特阿拉伯达兰(Dhahran)任命了一枚军事爱国者导弹炮弹,以保护军营免受伊拉克伊拉克自发的飞毛弹的侵害。该系统在线持续了100小时,而无需重新启动。该系统依靠一系列计算来预测导弹在任何瞬间的位置。为了跟踪经过的时间,该程序检查了自启动每十分之一以来的时间。然后,该程序将该整数乘以1/10以获取最终答案,但是在猛烈的战争中,这种乘法是一个愚蠢的错误。

这次存储在24位记忆中,以使大于24位的任何数字都将被缩短。乘以1/10创建了一个非终止二进制表示并将其切断,引入了0.000000095秒的漂移。一百个小时后,此错误总计高达0.34秒。当Scud导弹通过时,该系统使用错误的时间分析了其位置,当该区域被扫描时,没有导弹。假设Scud已经超出了范围,则反导者没有开火。Scud击中了军营,杀死了28人,并造成100人受伤。

数字幻觉

只是编码错误的方式可能是致命的,测试可能以相同的方式致命。在巴拿马巴拿马市,美国国家癌症研究所的医生正在使用美国公司Multidata Systems International为医疗目的而制造的软件。该软件用于使过时的钴60放射设备运行。该机器不足,医院的医生过度劳累和压力,并在软件上依靠很多东西来确定患者的辐射剂量。

在此过程中,医生不得不在屏幕上查看患者的模型,并用金属板覆盖身体的健康部位,以阻止辐射,然后他们不得不在屏幕上的模型上绘制矩形块。最令人沮丧的部分是,该软件允许制作四个或更少的街区,而医生希望制作五个街区。医生试图找到一种方法。一位医生发现,如果他们将这五个块作为一个大块块,将一个孔切开,较小的切口和较大的矩形满足,他们就会欺骗该软件。

医生没有意识到的是,该软件以一定的方式分析了块并相应地计算了剂量。程序员不知道的是如何以重叠的侧面绘制形状,以及图纸的方向。当程序试图阅读表单时,它对形状的形状感到困惑。形状就像该程序的光学错觉,但即使到那时,该程序仍计算出剂量,错误的剂量。医生继续进行这项技术七个月,将辐射的双剂量辐射给不确定的人数。在28名已知受害者中,有8名死亡,其余的受伤受了重伤。因为许多患有这种致命疾病的患者在这里接受了治疗,所以没有办法知道有多少人因这种错误而生病或死亡。

查看更多数百个案例中的3个,很明显,程序员的工作并不容易。即使是最简单的错误也可能对用户造成严重破坏。这就是为什么必须在编写程序时要特别注意的原因。此外,应定期进行测试运行和专门的用户培训

广告

发表评论

您的电子邮件地址不会被公开。