代码历史上最昂贵的 7 个错误

算法或程序中的一个小技术错误就可能造成数百万美元的损失。本文带大家看看迄今为止历史上因程序错误而带来后果最为昂贵的 7 个错误。

美国宇航局火星气候轨道器:1.93 亿美元

代码历史上最昂贵的 7 个错误

水手1号事件,也被称为人类历史上最昂贵的连字符,是美国宇航局的另一个失误,虽然很小,但导致公司损失了数百万美元。

水手号的计划中发射了一系列为探索火星、金星、水星等而设计的无人太空船。这个计划夺得多项第一,包括:第一次跨星系星际飞越、第一个行星探测器以及第一个以重力加速航行的太空船。

水手 1 号于 1962 年 7 月 22 日上午 9 点 21 分发射,距离发射不到 5 分钟,任务被迫中止;人类历史上最具历史意义的一次飞行坠毁于地面,而这只是因为数学代码中的一个小错误。

美国宇航局在其网站上引述道:“靶场安全官检测到计划外的偏航提升动作之前,助推器的表现都是让人满意。但引导命令的错误应用导致无法转向,并将导致航天器坠毁,可能坠毁于北大西洋航道或有人居住的区域,因而‘一名靶场安全官随后下令进行破坏性中止’。”

事故发生几天后,《纽约时报》发表了一篇文章,解释了坠机的原因。它说这个错误是“在一些数学数据中遗漏了一个连字符”的结果。据称,美国宇航局的一名程序员在将“大量编码信息”输入计算机系统时遗漏了这个符号。

几天后,美国宇航局官员理查德·莫里森向国会提交了销毁火箭的案例,并强调了微小遗漏的重要性:“连字符提示航天器在恢复雷达联系前,需忽略计算机提供的数据。当该连字符被省略时,虚假信息被输入航天器控制系统。在这种情况下,计算机将火箭向左转,机头朝下,火箭服从该命令并坠毁。”

阿丽亚娜 5 号航班 501:800 万美元

代码历史上最昂贵的 7 个错误

Pentium FDIV 漏洞是最著名、或者说是最臭名昭著的英特尔微处理器漏洞。它旨在变得更快、更准确,但结果却被窃听并导致作为英特尔 SRT 算法一部分的查找表出现错误。

为了将浮点标量代码的执行速度提高 3 倍,向量代码的执行速度提高 5 倍,与 486DX 芯片相比,英特尔决定使用 SRT 算法,该算法可以在每个时钟周期生成两个商位,而传统的 486 移位和减法算法每个周期仅生成一个商位。此 SRT 算法使用查找表来计算浮点除法所需的中间商。Intel 的查找表由 1066 个表条目组成,其中由于编程错误,有五个没有下载到可编程逻辑阵列 (PLA) 中。当浮点单元 (FPU) 访问这五个单元中的任何一个时,它 (FPU) 取零而不是 +2,这应该包含在“缺失”单元中。

在最坏的情况下,此错误的发生率可能高达十进制数的第四位有效数字,但发生这种情况的可能性为 3600 亿分之一。错误出现在第 9 位或第 10 位十进制数字中是最常见的,这种情况发生的几率为 90 亿分之一。然而,心怀不满的客户认为每个用户都应该得到正常工作的硬件并要求更换。

莫里斯蠕虫:1 亿美元

代码历史上最昂贵的 7 个错误

如果美国股票市场的一个关键利益相关者开始以高价买入,以低价卖出,会怎么样起来不是一个好的贸易策略,对吧正是发生在奈特身上的事情,差点导致他们破产。

2012年8月1日上午,发生了一件任何一位CEO都会做的噩梦。花了17年时间才建成的建筑在几个小时内几乎倒塌。一些新的交易软件中有一个bug,只有在纽约证券交易所当天开市时才被激活。这个错误的软件让Knight掀起了一场收购狂潮,很快,该公司就在交易的第一个小时内购买了约150家不同公司的股票,价值约70亿美元。

2012 年 8 月 1 日上午,发生了对任何一位 CEO 都是噩梦的事情:花了 17 年的时间建造的东西几乎在几个小时内就崩溃了。一些新的交易软件有一个bug,该bug在当天纽约证券交易所开盘时才被激活。这个错误的软件让Knight掀起了一场收购狂潮,很快,该公司就在交易的第一个小时内购买了约150家不同公司的股票,价值约70亿美元。

Knight 试图取消交易,但美国证券交易委员会 (SEC) 主席 Mary Schapiro 拒绝了。除六支股票的交易被撤销,Knight的其他购买狂潮并未达到取消门槛——使所购股票的价格上涨超过 30%。在其他情况下,交易成立。

这对Knight来说是个坏消息,一旦明确交易会成立,Knight别无选择,只能抛售它购买的股票。就像早上的疯狂购买推高了这些股票的价格一样,大规模的市场抛售很可能会迫使价格下跌,可能会跌至Knight无法弥补损失的地步。

高盛(Goldman Sachs)介入,以花费Knight4.4亿美元的价格收购了Knight不想要的全部头寸。

千年虫:5000 亿美元

代码历史上最昂贵的 7 个错误

一位数能带来什么危害在 1999 年,它就耗资 5000 亿美元。Y2K 错误,也称为千禧年错误,是一种计算机缺陷。由于其中的年份只使用两位十进制数来表示,因此当系统进行跨世纪的日期处理运算时(如1999 年 12 月 31 日之后的日期),就会出现错误的结果,进而引发各种各样的系统功能紊乱甚至崩溃。

在 1960 年代到 1980 年代编写复杂的计算机程序时,计算机工程师使用两位数的代码来表示年份。“19”被排除在外。日期不是 1970 年,而是 70。计算机工程师缩短了日期,因为在那个时代,计算机中的数据存储成本高昂并且占用大量空间。

随着 2000 年的临近,计算机程序员意识到计算机可能不会将 00 解释为 2000,而是将其解释为 1900。每天或每年编程的所有活动都会受到损坏或有缺陷。当1999年12月31日变成2000年1月1日时,计算机会将1999年12月31日解释为变成1900年1月1日。

每天计算利率的银行和其他金融机构面临着实际问题。计算机将计算负 100 年的利率,而不是一天的利率。发电厂、交通运输和许多其他部门也将受到这一变化的影响。

美国政府通过了《2000年信息和准备披露法》为此次活动做准备,并成立了一个由政府高级官员和联邦应急管理局(FEMA)等机构官员组成的总统委员会,监督私营公司为活动准备系统的工作。研究公司Gartner估计,避免千年虫的全球成本可能高达6000亿美元。

吸取了上述七个教训,要记得务必在初始阶段测试软件,以避免损坏和修复的高成本。

来源:陈琦聊测试

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年4月3日
下一篇 2022年4月3日

相关推荐