1.2 Frederick Brooks观点:非根本复杂性与根本复杂性
OOD启思录
Frederick Brooks在1987年10月份的IEEE Computer上发表了一篇有趣的文章,标题是Conceptual Essence of Software Engineering or There Is No Silver Bullet [参考文献1]。Frederick Brooks是The Mythical Man-Month [参考文献2]的作者。The Mythical Man-Month记录了他管理软件开发项目的经验,包括担任IBM360项目经理那两年的经验,是软件工程领域的必读书。他的书描述了他的项目中做对和做错的地方,并且解释了为什么。每个同软件生产有关的人,特别是项目经理,都应当读一下这本书。那篇“No Silver Bullet”(没有银弹)文章是关于他对软件工程的洞察的续篇。在该文中,他谈论了我们为什么会遇上软件危机,为什么没有解决所有问题的万能方法,在未来我们能使用什么有潜力的技术来缓解这个危机。
该文提出的一个基本观点是,造成软件危机的有两种复杂性,一种是非根本复杂性(accidental complexity),另一种是根本复杂性(essential complexity)。非根本复杂性来自不适合于应用软件的范型、方法学和/或工具。只要有足够的资源来创建或者购买各种互为补充的工具,这类复杂性是可以消除的。面向对象编程有助于消除非根本复杂性,因为它提供了一种一致的软件开发范型,包容了分析、设计、实现各个阶段。这不是说面向对象的软件项目不包含非根本复杂性。MIS(Management Information Science,管理信息科学)1世界和其他领域面对的是一种特殊类型非根本复杂性。这些组织已经把大笔资金投入到关系数据库技术中去了,而现在正从面向动作往面向对象迁移。关系数据库模式语言的表现力不足以直接描述面向对象世界中数据和行为间的复杂关系。结果就是,面向对象设计者需要把这些复杂的关系翻译成关系数据库中简单的关系。这一翻译带来了非根本复杂性,而大多数MIS公司都愿意接受这一复杂性,因为否则的话他们就需要抛弃已经在用的久经考验的关系数据库产品,而去购买未经严格测试的面向对象数据库。即便在这样的情况下,面向对象范型也使得我们可以通过包装器(wrapper)来控制这种复杂性2。包装器是指把应用软件的一个部分同其他部分的非根本复杂性隔离开来的抽象层。我们将在第9章再讨论这种包装器机制。第9章覆盖了面向对象的物理设计问题。
软件危机的真正原因是根本复杂性。根本复杂性来自这一事实:软件本质上就是复杂的,没有哪种方法学或者工具可以消除这一复杂性。软件具有根本复杂性的理由如下:
1.从规模上来说,软件应用程序是人类创建的最复杂的实体。
2.软件是难以把握的,而且大部分是无形的。
3.软件不会像具有移动零件的机器那样会在传统意义上磨损折旧。但是,人们常常会以软件编写者从未想到的方式来使用软件(并常常会发现错误),而且最终用户始终希望他们的软件得以扩展。
1译注:现在更多是指管理信息系统。
2译注:现在很多O/R Mapping产品就是这样的wrapper。
本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。