繁体
首页

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

计算机要做的工作在多个阶段中的任何一个都可能会出问题,从系统设计和实现,到系统的管理和使用。(当然,这个特性不是计算机系统独有的。我们可以说用相同的方式来描述建造桥梁、楼房、汽车,或其他任何复杂的系统。)(第8.1.3节)总结了关于系统故障高层次的、与管理有关的原因。在计算机错误和系统故障中的更多因素。我们所描述的例子中阐释了其中的大部分。我们会对其中一些加以评论。

过度自信

过度自信,或对一个复杂系统中的风险拥有不切实际或不足的认识,是一个核心问题。当系统开发人员和用户能够理解风险时,他们有更多的动力利用现有技术构建更可靠和更安全的系统,并且使自己成为更负责任的用户。有多少人不去备份他们的文件或联系人列表,直到他们的计算机崩溃后或他们手机丢掉时,才感到后悔莫及?

发生故障的一些安全关键系统都拥有所谓的“故障保护(fail-safe)”的计算机控制。在某些情况下,程序的逻辑是好的,而出现故障是因为没有考虑到系统与实际用户或现实世界进行交互的问题(如线缆变松、火车轨道上的落叶、一杯咖啡洒落到飞机驾驶舱内等) 。

对可靠性和安全性的不切实际的估计,可能来自真正缺乏了解、粗心大意,或故意的不实陈述。对诚信不是很重视的人,或者在缺乏诚信文化和没有专注于安全的组织中工作的人,有时为了商业或政治压力而夸大安全和隐藏缺陷,其目的是为了避免不利的宣传,或避免因为改正错误或诉讼而造成的费用。

软件复用:阿丽亚娜5型火箭和“禁飞”名单

在法国阿丽亚娜5型火箭首次发射不到40秒后,火箭就偏离了轨道,并作为一种安全预防措施被销毁。火箭和它携带的卫星成本约为5亿美元。引起这起事故是软件错误。在阿丽亚娜5型火箭中使用了一些较早的、很成功的为阿丽亚娜4型火箭开发的一些软件。该软件中包含了在阿丽亚娜4型火箭发射启动后大约会运行一分钟的模块。它在阿丽亚娜5发射之后,并不需要运行,但是当时的决定是不要对在阿丽亚娜4上运行很好的模块进行修改,以避免引入新的错误。在这个模块中,执行了与速度相关的计算。因为阿丽亚娜5的飞行速度高于阿丽亚娜4,因此该计算产生的数字超过了该程序可以处理的范围(技术术语是“溢出”),从而造成系统死机。

一个叫杨·亚当斯(Jan Adams)的女人,和姓Adams并且名字的首字母是J的许多其他人一样,都被标记为可能的恐怖分子,因此在试图登机时会受到阻拦。事实上,在航空安全局发给航空公司的可疑恐怖分子的“禁飞”名单上的名字是"Joseph Adams"。为了与在“禁飞”名单上的乘客名字进行比较,一些航空公司使用的是比较老的软件和策略,其目的是为了帮助机票代理商迅速找到乘客的机票预定记录(例如,如果乘客打电话咨询或要做出修改的时候)。该软件会执行快速搜索,并且“广撒网”。也就是说,它会找到所有可能的匹配,然后由销售代理执行进一步的验证。在该软件的预期应用场景中,如果该程序给代理提供具有类似名称的多个匹配,并不会给大家带来不便。然而,在把乘客标记为可能的恐怖分子的情况下,一个人如果被错误“匹配”,就可能不得不接受安全人员的质询和对行李和身体的额外检查。

这些例子是否告诉我们不应该对软件进行复用?面向对象的代码这类的编程范型的一个重要目标是开发可以广泛使用的软件构件,从而可以节省我们的时间和精力。复用运行良好的软件还可以提高安全性和可靠性。毕竟,它经历过在真实运行环境下的现场测试,我们也知道它可以正常工作;至少,我们认为它可以正常工作。关键是,它可以在不同的环境下正常工作。因此,我们必须重新审视该软件的说明和设计,考虑在新环境下的影响和风险,并对该软件的新用途进行重新测试。

8.2 案例研究:Therac-25

8.2.1 Therac-25辐射过量

计算机技术对医疗保健带来的好处不仅多,而且非常令人印象深刻。它们包括诊断的改进、健康状况检测、新药开发、能够加速治疗和减少错误的信息系统、能够挽救生命的设备,以及可以提高手术安全性的装置。然而,关于致命的软件故障的一个经典案例分析却是一种医疗设备:放射治疗仪。