历史上十大最糟糕的编程错误

代码几乎无处不在。现代计算机的出现是在1940年代。在其悠久的历史中,编程使人们能够更好地进行交流,并导致了众多行业的进步。从太空旅行到电信和医疗保健,一切都发生了革命性的变化,并受到代码的影响。

编程可以教授宝贵的生命课程。但是,在过去的故事中,编码也造成了破坏。少量不良代码实例在很大程度上造成了灾难。以下是历史上最严重的10个编程错误。

1。 Y2K错误

2000年的错误,也称为Y2K错误或Millennium Bug,是一个编码问题,预计会导致计算机混乱。在90年代,大多数计算机程序都以缩写形式列出了四位数的年份。因此,1990年的读数为90,1991年的读数为91,等等。通过将四位数的年份缩短为两位数,编码器因此节省了宝贵的内存。但是计算机无法将2000识别为00。进一步加剧了这一问题,2000年是a年。某些软件应用程序并不能解决额外的一天。

许多人担心Y2K可能会使全世界的计算机和电子产品瘫痪。我记得我的第一个DVD播放器带有一个闪亮的“符合Y2K"标签。尽管2000年从软件方面来说相当平稳,但在每个行业中更新计算机和应用程序的成本约为3000亿美元。电脑没有崩溃。生活照常进行。但是并非没有大量的金钱和工作,根据Slate的报告,这可能是浪费。

为什么这是最严重的编程错误之一: Y2K恐慌的代价非常高,达到3000亿美元。此外,资源已重定向以解决此潜在问题。

2。 Heartbleed Bug

出现在OpenSSL库中的Heartbleed Bug是一个危险的安全漏洞。传输层安全性(TLS)协议采用OpenSSL加密库。由于其在TLS中的广泛使用,Heartbleed迅速传播。该错误几乎允许互联网上的任何人在运行受影响的OpenSSL迭代的计算机上读取内存。最多可以读取64 kb的系统内存。虽然Heartbleed Bug于2014年向公众公开,但于2012年推出。

由于TLS心跳扩展中缺少边界检查,输入验证不当导致了该Bug。由于它是心跳扩展中的错误,因此产生了Heartbleed这个名称。 《 The Register》 2014年的一篇文章报道说,1.5%的最受欢迎的启用TLS的网站仍然容易受到Heartbleed错误的攻击。但是,除了OpenSSL之外,TLS的实现都没有改变。因此,Windows版本的TLS和Mozilla的网络安全服务不受Heartbleed Bug的影响。补丁最终解决了OpenSSL版本1.0.1g的问题。通过添加边界检查以防止缓冲区过度读取,成功修复了Heartbleed Bug。

为什么这是最严重的编程错误之一: Heartbleed Bug构成了主要的安全威胁。从启动到修补的时间间隔使受影响的系统容易受到攻击。每当出现计算机漏洞问题时,都会引起巨大的数据安全隐患。

3。完全从字面上接受《魔兽世界》病毒

《魔兽世界》 曾经遭受过另一种类型的计算机病毒。 2005年,一场数字瘟疫渗透到了几台游戏服务器。成千上万的角色沦为血液病毒的牺牲品。 WoW 开发人员Blizzard介绍了血神哈卡(Hakkar)。相当多的敌人用腐败的血液感染了角色。血液感染原本是要折磨Hakkar身体附近的玩家,但玩家之间的转移却发生在境外。这种无意间传播从游戏中宠物身上产生的血液病毒的手段。而且,非玩家角色(NPC)成为了载体。

Archimonde成为第一台被感染的服务器。低级角色立即死亡。即使是强大的角色也不会持续更长的时间。尽管有编码故障会通过NPC和宠物使该病毒永久存在,但该病毒并未计划在Hakkar王国之外发行。在成千上万的玩家死亡的同时,魔兽世界没有永久死亡的特征。暴雪通过滚动服务器重启来修复血液病毒。

为什么这是最严重的编程错误之一?好的,所以魔兽世界< / em>可能不会出现数据安全问题或危及生命的情况-但游戏玩家会认真对待娱乐。暴雪花费了数小时来重置服务器。有趣的是,游戏中玩家的行为模仿了现实世界中流行,爆发,恐慌和文明崩溃的流行病。还没玩 WoW 吗?开始使用此完整的新手指南。

4。 Therac-25

尽管许多编程错误会导致漏洞或游戏玩家死亡,但错误的代码实际上可以杀死它们。 Therac-25放射治疗机发生了Therac-25灾难。 Therac-25由加拿大原子能公司生产,导致意外的辐射剂量过量,导致至少六名患者死亡。调查发现不良的软件和不足的系统开发会导致辐射过量。这些主要是由于难以执行自动化软件测试所致。

Therac-25辐射剂量过多提醒人们创建易于测试的代码。杀死人类的机器听起来像是科幻小说,但Therac-25事件证明并非如此。但这实际上是导致这些问题的人为编码错误。包括Nancy Leveson在内的专家发现,经验不足的编码人员会创建错误的软件。而且,只有一名程序员创建了该软件,并且该软件基于Therac-6和Therac-20的代码。

为什么这是最严重的编程错误之一:在人类生命中,编程错误绝对是不良代码中最糟糕的例子之一。

5。古代水手1

NASA的飞行使用了大量技术。它的New Horizo​​ns Probe使用PlayStation CPU。 NVIDIA解决方案架构与工程副总裁Marc Hamilton定期发布博客,介绍NASA对NVIDIA硬件的使用情况。水手1号火箭发射升空并准备探索金星。然而,在发射后不久,火箭偏离了其预期的飞行路线。起飞后不久,水手1号被摧毁。

程序员的一个小错误导致了水手1号错误。尽管报告有所不同,但迹象表明缺少连字符。根据NASA存档文件,“水手1号飞行后审查委员会确定,在数据编辑程序中,省略编码的计算机指令中的连字符允许向航天器传输错误的引导信号。"著名作者Arthur C. Clarke(< em> 2001:太空漫游()将水手1灾难称为“历史上最昂贵的连字符。"

为什么这是最严重的编程错误之一:水手1的失误本来可以很容易避免的。公益公告:亲爱的开发人员,请测试您的软件。

6。 AT&T网络出现故障

您现在能听到我说话吗?否。1990年1月15日,AT&T的网络崩溃了50%以上。在9个小时内,有7500万个电话无人接听。虽然最初的报告指责黑客,但真正的罪魁祸首是:标准软件更新。下次您抱怨Windows 10更新时,请记住这一点。仅一行代码中的错误使AT&T的网络瘫痪了几个小时。交换机会自行重置,但该错误意味着第二个交换机发送了另一条消息。从本质上讲,随着网络继续重复其错误,开始产生了多米诺效应。最终,AT&T通过减少网络负载设计了一种解决方案。然后,交换机将自行重置。

尽管进行了沉重的测试,但只有一条语句使网络瘫痪。该程序是用C语言编写的。if子句中的break语句仍嵌套在switch子句中。 1990年AT&T的大故障似乎是一个简单的问题。很多未接来电,或者像今天这样,很多未接短信,Instagram,Twitter和Snapchat通知。然而,缺乏沟通带来了巨大的金钱影响。美国航空等公司蒙受了财务损失。由于中断,美国航空的电话减少了三分之二。 1990年的故障仍然是测试很重要的一个很好的例子。此外,AT&T中断也提醒了技术与经济之间的内在联系。

为什么这是最严重的编程错误之一:不仅AT&T的网络崩溃了,几个小时后,价格持续下跌造成了财务危机。

7。活死人的日子:圣玛丽慈悲医院

2003年,一个软件故障错误地“杀死"了8,500人。密歇根州大急流城的圣玛丽医疗医学中心错误地报告说,许多患者死于其患者管理软件系统中的故障。与Therac-25死亡人数相比,这种糟糕的代码灾难是相当无害的,因为实际上没有人死亡。不过,阅读有关自己的死亡的信息令人感到困惑,特别是当您还活着的时候。

虚假死亡报告不仅限于患者。这封信去了保险公司和社会保障办公室。因为社会保障和保险提供者确保合格的患者享有Medicare,所以这是一个很大的问题。 St. Mary’s Mercy的员工将错误告知患者,政府机构和保险提供商。最终,编程错误并没有引起太多关注。目前尚不清楚编码错误是否得到纠正。但是,没有进一步的假死亡报告出现。

为什么这是最严重的编程错误之一?值得庆幸的是,实际上没有人死亡。但是确保继续提供医疗保险的损害控制一团糟。

8。阿尔法囚犯:早期释放

密歇根州在2003年至2005年之间发生了数据处理故障。在此期间,计算机编程漏洞通过降低密歇根州囚犯的刑罚导致23名囚犯提前释放。幸运的囚犯从39天减少到161天的刑期而受益。尽管任何意外的徒刑终止都是有问题的,但值得庆幸的是,这些都是较小的违规行为,例如毒品和挪用公款。

软件通常旨在实现流程自动化。通过减少手工任务,理论上我们的生活会更轻松。但是,密歇根州囚犯从监狱中提早出狱的这一案例再次证明了软件测试的价值。轻微的编程错误会带来巨大的后果,尤其是在此示例中。试想一下,如果释放的囚犯涉嫌更严重的罪行。

为什么这是最严重的编程错误之一:本事件本来可能会更糟,但是提前释放囚犯令人恐惧。

9。哈特福德体育馆瀑布

尽管1978年的哈特福德体育馆倒塌造成了9000万美元的损失,但情况可能更糟。球迷撤离场地后数小时,哈特福德体育馆(Hartford Coliseum)倒塌。它的钢格板屋顶无法支撑湿雪的重量。建筑物因简单的编程错误而倒塌。用于设计Hartford体育馆的CAD软件的编码器无法说明多个变量。取而代之的是,软件程序员认为钢制屋顶支架只能承受纯压缩。

工程师面临许多挑战。使用软件应该使他们的工作更轻松。然而,未能考虑几个变量会导致巨大的挑战。虽然您可以简单地修补 Minecraft 中的错误,但CAD软件会直接影响现实世界的结构。

为什么这是最严重的编程错误之一:至少没有人死亡。但是,估计损失9000万美元的经济损失是巨大的。

10。我遇到了99个问题,奔腾是一个

通常,英特尔处理器的性能要优于AMD处理器。但是,AMD提供了出色的性价比。但是在1994年,英特尔的Pentium微处理器遇到了一个主要问题。 486DX和Pentium CPU具有浮点单元(FPU)。该FPU是数学协处理器。上一代英特尔CPU使用整数处理数学。通过包含一个内置的FPU,该下一代Pentium芯片有望大大加快数值计算。

Pentium FPU使用了基数4 STR算法。输入信息不正确会导致计算略有错误。但是,即使是很小的变化,也可能意味着大规模的问题,例如在哈特福德(Hartford)倒塌或Therac-25事故中所表现出来的。千分之五的参赛作品被排除在外,从而失去了奔腾的长期分裂能力。英特尔正式宣称脚本错误导致查找条目问题。无论哪种方式,奔腾的数学都归因于错误的代码。随着各种领域中代码的使用不断扩展,这种趋势可能不会很快消失。

有很多编程错误的例子。有些漏洞相当无害,例如魔兽世界错误。其他人则导致死亡(真实死亡(Therac-25)或想象中的死亡(圣玛丽))。不要让这些著名的例子妨碍您进行编码。查阅本指南,选择正确的Web编程语言。

您还记得哪些不良代码的历史示例?在下面对您的编程失误进行评论!

图片来源:通过Shutterstock.com提供的nouskrabs和McIek

标签: 历史记录 编程