面向对象分析与设计(第3版)(修订版)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

第1章 复杂性

医生、土木工程师和计算机科学家在一起,争论什么是这个世界上最古老的职业。医生说:“在圣经中,上帝用亚当的肋骨创建了夏娃。这显然需要外科手术,所以我当然可以宣称,我的职业是世界上最古老的职业。”土木工程师打断道:“但在‘创世纪’中更早的部分,描述了上帝从混沌中创造了天堂和人间的秩序。这是首次应用土木工程,也是土木工程最伟大的应用。因此,亲爱的医生,您错了,我的职业才是世界上最古老的职业。”计算机科学家斜靠在她的椅子上,微笑着,然后充满自信地说:“啊哈,但你们觉得是谁创造了那片混沌?”

“系统越复杂,就越容易全面崩溃”[5]。建筑师一般不会想要为一幢100层的大楼添加一个新的地下室,因为这样做成本会很高,无疑将失败。但让人吃惊的是,软件系统的用户在提出类似的改动时,都不会多想一下。相反,他们会说,这只是一个简单的编程问题。

由于我们不能控制软件的复杂性,所以导致了项目延迟、超出预算,并导致陈述的需求中存在缺陷。我们常常把这种情况称为软件危机,但老实说,问题持续了这么长时间,必须称之为正常情况。不幸的是,这种危机导致了人力资源(最宝贵的商品)的浪费,丧失了许多机会。没有足够好的开发者来创建用户需要的所有新软件,而且在任何组织机构中,相当一部分开发者必须经常维护或照看老的软件。考虑到软件对大多数产业化国家经济基础的间接和直接贡献,同时考虑到软件可以极大地增强个人的能力,我们不能让这种情况继续下去。