繁体
首页

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

●缺乏清晰的、深思熟虑的目标和需求说明

●在客户、设计师、程序员等之间的管理不善和缺乏沟通

●由于机构或政治压力,鼓励了不切实际的低价投标、不切实际的低预算要求,以及对时间需求的严重低估

●使用非常新的技术,其中可能包含未知的可靠性和问题,而且它的软件开发者也没有足够的经验和专业知识

●拒绝承认和接受一个项目已经出现了问题

遗留系统

在美国航空公司(US Airways)和美国西部航空公司(American West)合并之后,他们把彼此的预订系统结合到了一起。造成了自助登机服务机器无法工作。人们都到登记手续办理柜台区排队,导致数千名乘客和航班的延误。把不同的计算机系统进行合并是非常棘手的,而且问题也很普遍。但是,这起事件说明了另一个因素。根据美国航空公司副总裁的说法,大多数航空公司的系统开发时间都是在20世纪60年代和70年代。在那个时代,专为大型计算机设计的系统取代了在3×5的纸质卡片上的计票预定。航空公司高管说,这些旧系统“是非常可靠的,但是非常不灵活。”这些都是“遗留系统”,即依然在使用中的过时系统(硬件,软件或外围设备都已经过时了),它们通常会配备特殊的接口、转换软件,或其他适应性改变,使它们可以与更现代的系统进行交互。

遗留系统的问题多如牛毛。旧的硬件会发生故障,而更换部件都很难找到。旧软件通常运行在新的硬件之上,但它仍然是旧软件。程序员不再学习老的编程语言。旧程序往往很少或根本没有说明文档,写软件或操作该系统的程序员都已经离开了公司、退休或去世了。即使有好的设计文档和手册,它们也可能不再存在或无法找到了。有限的计算机内存导致了模糊和简洁的编程习惯。程序员现在可能用"flight_ number"来表示的变量,在当时可能会被简单地表示为“f”。

计算机在初期的主要用户包括银行、航空公司、政府机构和像电力公司这样提供基础设施服务的公司。这些系统是逐步成长的。完全重新设计和开发一个新的现代系统,当然是昂贵的。这将需要一个大规模的培训项目。转换到新的系统可能需要一些停机时间,这也可能是破坏性的。因此,遗留系统仍然在坚持。

我们将继续创造新的编程语言、范型和协议——我们稍后还会把他们添加到我们以前开发的系统中。在遗留系统给计算机专业人员提供的经验教训中,有一点是:我们需要意识到在30或40年后,还有人可能会使用你的软件。因此,为你的工作准备文档是非常重要的。它对于设计的灵活性、可扩展性和升级都是很重要的。

8.1.4 哪里出了毛病?

计算机系统故障一般有两个原因:它们正在做的工作本来就很难,以及有时候它们没有把工作做好。之所以它们的任务很困难,是因为有几个因素交织在一起造成的。计算机系统需要与现实世界(包括机械和不可预测的人类)进行交互,包括复杂的通信网络,它们拥有许多功能和相互连接的子系统,它们的规模非常大。汽车、客运飞机和喷气式战斗机上都包含数百万行计算机代码。智能手机也拥有数百万行的代码。计算机软件在这个意义上是“非线性的”,意味着在机械系统中的一个小错误可能会导致一个小的性能下降,而在计算机程序中一个地方敲错就可能会导致行为上的巨大差异。

●设计和开发:

不够重视潜在的安全风险

与不能按预期工作的物理设备之间的交互

软件和硬件,或应用软件和操作系统的不兼容性

没有对意外的输入或场景进行规划和设计

容易混淆的用户界面

测试不足

从另一个系统复用的软件没有进行足够的检查

对软件的过度自信

粗心大意

●管理和使用:

数据输入错误

对用户培训不足

在解释结果或输出时出错

未能保持数据库中的信息是最新的

用户对软件过度自信

对故障的规划不足;没有备份系统或程序

●虚假陈述,隐瞒问题;对报告的问题回应不够

●没有足够的市场或法律激励来把工作做得更好