繁体
首页

第84章 错误、故障和风险(5)(3 / 3)

为了说明在安全攸关应用中的两个重要原则,我会用摧毁了两架航天飞机的事故作为例子,每起事故都造成航天飞机上的七名宇航员全部遇难。计算机系统和软件并不是造成事故的原因,但是这些悲剧可以很好地说明我们的观点。在挑战者号发射后不久,从火箭泄露出的燃烧气体引发了爆炸,摧毁了整架航天飞机。在预定发射的前一天晚上,工程师主张应该推迟发射。他们知道,寒冷的天气对航天飞机会造成严重的威胁。我们不能绝对证明一个系统是安全的,我们也不能绝对证明它一定会失败并且会造成某些人遇难。在挑战者的案例中,一名工程师的报告说,“他们要求我们证明,在没有丝毫疑点的情况下,发射是不安全的。”对于道德决策者来说,采用的策略应该是,在没有令人信服的理由来证明安全的情况下,应当暂停或延迟该系统的使用,而不是在没有令人信服的理由证明灾难会发生,就选择继续使用。在第二起意外中,在哥伦比亚号航天飞机的发射过程中,一大块绝缘泡沫发生了脱落,并与机翼产生了碰撞。美国宇航局知道此事,但泡沫块也曾经脱落过,并且在之前其他飞行过程中击中过该航天飞机,而没有造成大的问题。因此,美国航空航天局管理人员拒绝采用可用的措施来观察并修复该损害。在其任务即将结束,重新进入地球大气层时,哥伦比亚号发生了解体。这个悲剧说明了自满的危险。专注于安全的组织必须要对模棱两可的风险进行探究。如果该组织已经制定了政策和程序来评估这些风险,那么悲剧发生的可能性会比较小。

需求说明

做得很好的公司会花费大量的精力来了解客户需求,并了解客户将如何使用该系统。优秀的软件开发人员会帮助客户更好地了解自己的目标和要求,而客户可能并不擅长于此。通过长远规划阶段,可以帮助发现和修改不切实际的目标。一家公司开发了一个成功的金融系统,可以每天处理一万亿美元交易,该公司花了数年时间为该系统制定需求说明,然后只花了半年时间编程,之后还进行了精心设计的详尽测试。

用户界面和人为因素

如果你正在编辑一个文档,并且试图不保存修改就退出,那么会发生什么?大多数程序会提醒你,你还没有保存你的更改,并给你一个机会保存它。该程序的设计者知道,人们可能会忘记或有时候点击了错误的命令。这是在涉及软件的时候考虑人为因素的一个简单和常见的例子,但是这样的做法已经为数百万人避免了个人灾难的发生。

精心设计的用户界面可以帮助避免很多问题。系统设计人员和程序员需要向心理学家和人为因素专家进行学习,因为他们了解把工作做好所需的原则和实践[6]。用户界面应该提供明确的指示和错误消息。它们应该是一致的。它们应当包括适当的输入检查,减少因为个人可能会犯的拼写错误或其他错误,就导致重大的系统故障。

在哥伦比亚的卡利(Cali)市附近坠毁的美国航空965航班,就说明了一致性(和良好的用户界面的其他方面)的重要性。在接近机场时,飞行员打算把自动驾驶仪上锁定到名为"Rozo"的灯标上,这样飞机就可以自动降落到该机场。飞行员输入了"R",然后计算机系统显示了6个以"R"开头的灯标。通常情况下,最近的灯标会出现在列表的顶部。飞行员没有认真检查,就点了顶端的第一个。但是,在列表顶端的灯标是"Romeo",它的位置在100英里之外的波哥大(Bogota)附近。这架飞机转了超过90度,飞往了Romeo。在黑暗中,它撞上了山体,造成159人遇难。

在随后的诉讼中,陪审团把责任都归于飞行员的操作失误。飞行员没有认真检查,选择了错误的灯标,并且在飞机转了一个意料之外的大弯之后,还在任之继续下降。一个陪审员把其中一些责任归给了提供计算机系统的公司。虽然很显然,飞行员可以而且应该能够避免此次撞击,由于该系统在显示上的不一致,即没有把最近的灯塔放在列表的顶部,很明显也是造成此次险情出现的原因。