前言

如果软件工程真的是一门工程学科,那么它是对经过验证的原则、技术、语言和工具的智慧的运用,用于有成本效益地创造和维护能够满足用户需求的软件。本书是有史以来第一本成册的软件工程原则集。[1]原则是关于软件工程的基本原理、规则或假设,不管所选的技术、工具或语言是什么,其都有效。在这本书中发表的大部分原则并非原创,很多是从软件工程从业者和研究者的著作中摘录而来的。这些人无私地和我们分享他们的经验、想法和智慧。我并不认为这 201 个原则是相互独立的。不像 Boehm 提出的7个“基本”软件工程原则,本书中的一些原则的组合可能蕴涵另一个原则。但我也不认为这 201 个原则中的某两个或某几个原则是 100%兼容的。俗话所说的,“距离产生美”和“眼不见,心不烦”都是真理,每个原则都可以应用在我们的生活中,但是它们却不能同时用来证明同一个决定是正确的。本书中包含的原则都是有效的,它们都能够用来提升软件工程的水平,但也许并不能将某些组合应用到同一个项目中。

Manny Lehman [LEH80]已经充分说明,为什么软件工程的基本原则和人类探索的其他领域的基本原则存在根本性的不同。他说,没有理由期待软件工程的原则具备和(比方说)物理学原理一样的精确性和可预测性。原因是,一方面不像物理学或生物学,软件开发过程是由人来管理和实现的;这样,从长远看,软件开发的行为是不可预测的,它依赖于人的判断、奇想和行动。另一方面,软件似乎展现出很多有规律和可预测的特征[LEH80]。这使得很多基本原理可以被列出,并可以被没有经验的或有经验的软件工程师和管理者使用,以增强软件工程过程和软件产品的质量。

本书的目的是,将软件工程的原则集中在一本书中作为参考指南。本书的目标读者为以下三个群体。

1. 软件工程师和管理者。在本书中,你可以弄清什么是好的,什么是不好的。如果在软件工程或软件管理方面你是一个新人,本书可使你明确需要了解哪些知识。

2. 软件工程方向的学生。对学生来说,本书有两个主要用途。首先,这里有基本的、非教条的原则,这些原则是每个软件工程师都应该知道的。其次,本书各页上的参考文献指向软件工程方面最好的一些论文和图书。即使只阅读了参考文献的内容,你也会接触到非常丰富的知识。

3. 软件研究人员。研究人员也许经常发现,找寻一个想法的最初来源是困难的。我提供了参考文献,以指明最初的来源,或引用了可替代最初来源的资料。

我真诚地希望,每位购买本书的读者,都能够努力去阅读尽可能多的参考资料。我对原则的简要描述,希望做到友好、易于阅读和见解深刻。但是要做到真正理解,你还需要阅读参考文献。这些参考文献并不一定是这些想法的最初来源(虽然很多时候它们确实是最初来源)。这里给出的原则,也不一定是这些参考文献的重点内容。然而,在每个案例中,参考文献都包含了和原则有关的大量的对你有帮助的背景、洞察、原因、备查数据或信息。

总之,本书应该成为你查阅任何软件工程思想的第一个地方。然而,这是一本关于原则的书,不是关于技术、语言或工具的。在这里,你无法找到如何使用本书介绍的原则中提到的技术、语言和工具的内容。而且,本书尽力避免提及各种流行趋势,不管是好的还是坏的!在大多数情况下,流行趋势会持续3~10年,然后就“失宠”了。在本书中,读者可能能够看到某个流行趋势背后的基本原理,而不是流行趋势本身。例如,你在这里看不到直接介绍面向对象的参考文献,但是可以看到面向对象之下的基本原则,如封装。

所有的原则都被划分为几个大的类别,以便查找,也便于发现类似的原则。这些类别对应于软件开发的各个主要阶段(即需求分析、设计等),也对应于其他关键的“支持”活动,如管理、产品保证等,本书的组织结构如图P-1所示。

图P-1 本书的组织结构

Alan M.Davis


[1] Winston Royce和Barry Boehm发表了软件工程原则方面最早的两篇论文,分别包含5个原则和7个原则[ROY70,BOE83]。