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

1.2.1 定义软件复杂性

我们确实注意到,某些软件系统并不复杂。这些大多是可以被遗忘的应用,它们是由一个人提出、构建、维护和使用的,这个人通常是编程新手或独立工作的专业开发人员。但这并不是说所有这些系统都是拙劣和不优雅的,我们也不是想贬低它们的创造者。这些系统的目的通常很有限,生命周期也很短。我们可以扔掉它们,用全新的软件代替它们,不必尝试复用、修复它们或者扩展它们的功能。这样的应用开发起来通常难度不大,但比较乏味,因此,我们对学习设计这样的应用兴趣不大。

与之相反,我们对所谓的“工业级”的开发挑战,兴趣要大得多。我们发现,这些应用表现出非常丰富的行为,它们存在于反馈式系统中,由真实世界的事件驱动或发出驱动事件。对这些应用来说,时间和空间都是稀有资源。这些应用维护着数百万条信息记录的完整性,同时允许并发的更新和查询。这些系统发出命令并控制真实世界的实体,例如,控制空中交通和铁路交通。这样的软件系统通常具有很长的生命周期,随着时间的推移,许多用户渐渐依赖于这些软件系统的正常工作。在工业级软件的世界里,我们也会看到一些框架,它们简化了特定领域应用程序的创建,还能看到一些程序模仿了某方面的人类智能。尽管这些应用通常是研发的产品,但它们的复杂性一点也不差,因为它们是增量式开发和探索式开发的方法和基础。

工业级软件的特征是,单个开发者要理解其设计的所有方面非常困难,几乎是不可能的。武断地说,这些系统的复杂性超出了人类智能的范围。不幸的是,我们所说的这种复杂性似乎是所有大型软件系统的基本特征。从根本上来说,我们可以掌握这种复杂性,但不能消除这种复杂性。