繁体
首页

第80章 错误、故障和风险(1)(1 / 3)

8.1 计算机系统中的故障和错误

8.1.1 概述

“导航系统把汽车导到了河里”

“数据录入错误造成美国数百万寻呼机被静音”

“在追踪核材料的软件中发现了缺陷”

“软件故障使滑板车车轮突然反转方向”

“国税局计算机发送了包含680亿美元处罚的账单”

“机器人杀死了工人”

“加州放弃了花费1亿美元开发的儿童支持系统”

“因为FBI计算机数据故障,造成某人被捕五次”

这些新闻头条描述的都是真实事件。从消费者软件到控制通信网络的系统,大多数计算机应用都是如此的复杂,以至于几乎不可能生产出没有错误的程序。在接下来的几节中,我们会描述各种错误、问题和故障,以及对它们负责的一些因素。有些错误是不重要的。例如,一个文字处理器软件可能会在对一行末尾放不下的单词进行断词时出现错误。有些事件是有趣的。有些则是悲惨的。有些还会耗资数十亿美元。研究这些失败和风险,有助于了解其原因,并帮助防止未来的失败情形。

是不是计算机系统用起来太不可靠,太不安全呢?或者,像许多其他新闻故事一样,新闻头条和恐怖故事中都会强调坏的消息,即戏剧性的却不常出现的事件?我们经常听到关于车祸的报道,但我们并不会听到新闻报道说,本市今天司机安全完成了200,000次驾车出行。虽然大多数汽车旅行是安全的,只报道撞车事故其实也是有好的原因的:它告诉我们风险是什么(例如,在浓雾中驾驶),它提醒我们要负责和谨慎驾驶。正如许多因素会造成车祸(例如,设计错误,制造或维修不良,路况不好,司机不小心或缺乏训练,混乱的路标等),计算机故障和系统故障也有无数的原因,包括设计错误、实施马虎、粗心大意或训练不足的用户,以及糟糕的用户界面。通常来说,可能会存在一个以上的因素。由于计算机系统的复杂性,就必须在开发和使用它们的过程中,遵循良好的规定过程和专业实践。有时候,并没有人做任何显然是错误的事情,但不管怎样,还是有意外发生。有时候,我们可以把软件开发人员和管理人员的不负责任类比为醉酒开车。

如果计算机系统固有的复杂性意味着他们不会是完美的,那么我们如何能分辨:哪些是为了该系统带来的好处,作为取舍我们可以接受的错误;而哪些是由于不可原谅的疏忽和无能或不诚实而造成的错误?要有多好才是足够好?我们,或政府,或一个企业,应该在什么时候决定一个计算机系统或应用程序如果使用的话会太过于冒险?为什么有些耗费数百万美元的系统结局会如此悲惨,以至于为它们投资的企业和机构宁愿在完成前放弃它们?我们不能完全回答这些问题,但是本章会提供一些有关的背景和讨论,可以帮助我们得出一些结论。我们应该从我们所扮演的几个角色的角度来理解这些问题:

●计算机用户。无论我们使用的是自己的平板电脑或工作中的复杂的、专业化的系统,我们都应该理解计算机系统的局限性,以及对适当培训和负责任使用的需要。

●计算机专业人员。如果你正在规划把计算机专业人员作为你的职业(例如,系统设计者、程序员,或质量保证经理),那么了解计算机系统的故障,可以帮助你成为一个更好的专业人员。如果你将负责购买、开发或管理一个复杂的系统,把它用于医院、机场,或公司的话,那么了解故障的根源和后果也是很有价值的。本章中的例子讨论的内容包括有关如何避免类似问题的许多隐性和显性的教训。

●社会中受过教育的成员。有很多关于社会、法律和政治决策的个人决定,取决于我们对计算机系统故障的风险认识。我们可能会被选到参加一个陪审团。我们也可能成为立法游说组织的积极成员。我们可能需要决定是否由机器人进行手术。此外,我们还可以把本章中的一些解决问题的方法和原则应用到计算机系统之外的其他专业领域。

我们可以通过多种方式对计算机错误和故障进行分类,举例来说,可以根据影响的严重性,或者根据应用程序领域。不管我们用什么方式组织讨论,都会出现某些类别中的重叠,或是在其他类别中出现不同例子的混合情形。下面将采用三个类别:个人遇到的问题,通常是他们作为消费者的角色;可能会影响大量人和/或花费大量金钱的问题;以及可能会伤害或杀死人的安全攸关型应用程序的问题。我们将会专门深入探讨一个安全攸关的案例(第8.2节):Therac-25。它是一种计算机控制的放射治疗机,存在大量的缺陷,并因此导致几个病人死亡。在第8.3和8.4节,我们试图讨论一些可能会让人觉着混乱的例子。第8.3节会更加深入探查其根本原因,并介绍在它们发生时,用来预防故障和正确处理它们的专业做法和其他方法。第8.4节会以不同的角度分析其风险。