前 言
本书第2版出版以来,弹指之间已过十年。在此期间,软件构架领域的关注点在拓宽和延展,从主要面向内部——人们是如何对软件进行设计、评估和编档的——到关注影响软件的外部因素——更深入地理解这些因素对软件构架的影响,更透彻地理解架构对软件生命周期、组织和管理的影响。过去的十年中,我们也看到软件系统的类型也发生了巨大的变化。十年前,大数据、社交媒体和云计算都还处于萌芽期,但现在,成熟已经足以形容它们的发展,而应该说它们已经相当具有影响力了。
我们听取了读者对前两版的一些批评建议,在新版中包含了更多与模式相关的素材,重新组织了与质量属性相关的素材,并单独用一章的篇幅来介绍作为质量属性之一的互操作性。我们还向读者提供了如何为自己喜欢的质量属性生成场景和策略。
为了能包含如此丰富的新鲜素材,我们不得不做出一个艰难的选择。具体说来,本书的这一版再也不像前两个版本一样包含扩充性的案例学习。这个决定也体现了软件构架这一领域已走向成熟,从某种意义上来讲,为软件构架提供案例学习已经不如十年前那样流行,而且对读者而言,这样的案例学习对帮助他们认识到软件构架的重要性已经没有多大必要了。然而,前两个版本的案例学习还是有的,可以从本书配套网站获得,网址为www.informit.com/title/9780321815736。此外,在这个配套网站上,我们还提供了幻灯片以便老师们在教学中使用这些案例。
在第3版中,我们对所涉及的主题进行了全面和彻底的修订。具体说来,我们意识到我们所呈现的方法——对于构架设计、分析和文档——只是通过一种方式来说明如何达成特定的目标,但其他还有好多种方式。考虑到这一点,我们从底层的理论出发,单独详细介绍书中提及的每一种方法。在第3版的新增主题中,包括以构架为中心的项目管理;构架能力;需求建模与分析;敏捷方法;实现与测试;云计算和技术前沿。
与前面两个版本一样,我们可以担保,书中介绍的主题都经过读书小组或者课堂的充分讨论,最后,我们在每章最后都提供了一些讨论题。这些讨论题大部分是开放式的,没有任何答案是绝对正确或者绝对错误的,所以,作为读者,重点在于如何判断你的答案,而不是只管回答完问题。
读 者 指 南
本书分为五个部分。第一部分介绍软件构架和各种不同的上下文视角,具体如下所示。
* 技术角度。软件构架在一个系统或子系统中所扮演扮演的是什么技术角色?
* 项目角度。软件构架是如何与软件开发生命周期中的其他阶段发生关系的?
* 业务角度。软件构架的出现是如何影响组织的商业环境的?
* 职业角度。软件架构师在一个组织或一个开发项目中扮演的是什么角色?
第二部分聚焦于技术背景。这部分描述了决策的制定过程。决策的依据是一个系统的预期质量属性,第5章~第11章描述了七大不同的质量属性以及达成这些质量属性所需要的技术。这七大属性分别是可得性(availability)、互操作性( interoperability)、可维护性(maintainability)、性能(performance)、安全(security)、可测试性(testability)和易用性(usability),第12章描述如何在此七大属性上再添加额外的质量属性,第13章讨论模式和策略,第14章讨论各种类型的建模与分析方法。
第三部分专门探讨软件构架与软件生命周期的其他部分是如何发生关系的。特别要说明软件构架如何应用与敏捷项目。我们单独讨论了软件生命周期的其他方面:需求;设计;实现和测试;恢复与一致性;评估。
第四部分分别从经济角度、组织角度和类似软件系统系列的构造这三大角度来阐述软件架构。
第五部分要讨论几个重要的新技术,阐述软件构架是如何与这些技术关联的。
致 谢
我们的这个新版本有很多了不起的评审人员,在他们的帮助下,这本书得以进一步完善。他们是Muhammad Ali Babar,Felix Bachmann,Joe Batman,Phil Bianco,Jeromy Carriere,Roger Champagne,Steve Chenoweth,Viktor Clerc,Andres Diaz Pace,George Fairbanks,Rik Farenhorst,Ian Gorton,Greg Hartman,Rich Hilliard,James Ivers,John Klein,Philippe
Kruchten,Phil Laplante,George Leih,Grace Lewis,John McGregor,Tommi Mikkonen,Linda Northrop,Ipek Ozkaya,Eltjo Poort,Eelco Rommes,Nick Rozanski,Jungwoo Ryoo,James Scott,Antony Tang,Arjen Uittenbogaard,Hans van Vliet,Hiroshi Wada,Rob Wojcik,Eoin Woods,and Liming Zhu.
此外,本书新版本还得到了以下人员的参与和贡献,他们是Liming Zhu,Hong-Mei Chen,Jungwoo Ryoo,Phil Laplante,James Scott,Grace Lewis和Nick Rozanski,在他们的帮助下,我们这本书变得更符合大众的口味(相对于我们三个作者所写的东西而言)。
第12章中,“构建效率”这个议题来自Raytheon的Rolf Siegers和John McDonald。John Klein和Eltjo Poort分别为可测试性贡献了两个策略:抽象系统时钟(abstract system clock)和沙盒模式(sandbox mode)。第3章的项目干系人清单来源于《软件构架编档(第2版)》。第28章中的一些素材,灵感来源于Anthony Lattanze在2011年发表的一次演讲,演讲主题为“组织设计思维”(Organizational Design Thinking)。
Joe Batman帮助我们创立了第4章所描述的七大设计决策类别。此外,在第18章中,围绕着安全视角、沟通视角和非常规视角来展开的描述,都基于Joe在进行真实系统体系结构之文档规划时所写的一些素材。与可修改性策略相关的大部分新素材都基于Felix Bachmann和Rod Nord的工作成果。James Ivers在安全策略方面为我们提供了帮助。自本书第2版出版以后,Paul Clements和Len Bass都有了新的职位,我们感谢他们各自的新的管理层(对Paul而言,是BigLever Software;对Len而言,是NICTA)无怨无悔地支持我们完成新版本。我们还要感谢我们在软件工程研究所(SEI)的(前)同事,感谢他们积极为新版本贡献的写作构想。
最后,我们一如既往地感谢我们的编辑,Addison-Wesley的Peter Gordon,感谢他们在写作和制作过程中所提供的指导和支持。
