内容简介本书主要介绍了大型系统的
软件体系结构开发,详细描述了本书作者已经成功使用过的大量的开发大型系统所需的
技术和体系结构表示。本书主要关注uml对软件体系结构的应用,还讨论了软件架构师的角色,以及体系结构的开发是怎样适应软件开发过程的。
本书旨在成为一本实践指南,主要适合于正在或即将从事软件
设计和开发的人员,以及那些希望更好地理解成功的软件体系结构方法的大型软件开发者。软件架构师或具有软件体系结构团队经验的开发人员将从本书中获益更多。
图书目录第1章导论
11.1什么是软件体系结构
11.1.1软件体系结构不是什么
31.1.2软件体系结构属性
41.1.3与体系结构有关的其他关键术语的定义
51.1.4其他类型的体系结构
61.2为什么要有体系结构
81.3体系结构视点概要
91.4其他软件体系结构方法
121.4.14+1视图
121.4.2rm-odp视点
131.4.3bass的体系结构的构造
141.4.4hofmeister的软件体系结构视图
141.5推荐读物
15第2章软件体系架构师的角色
172.1在开发组织中与其他关键角色的关系
202.2架构师的技能和背景
232.3引入体系结构经验
252.4体系结构团队的构成
252.5与软件架构师相关的陷阱和圈套
262.5.1明确领导的定位
272.5.2软件架构师汇报的组织结构
272.5.3软件架构师和技术领导的地理位置
272.5.4体系结构团队的规模和组成
282.5.5软件体系结构生命周期
292.6推荐读物
29第3章软件体系结构和开发过程
313.1迭代开发的概要
313.1.1开发过程中的全部阶段的概述
323.1.2生命周期阶段
333.1.3体系结构和灵活过程
353.1.4早开始,不断细化
373.2需求管理
383.2.1用例和需求工程
383.2.2影响体系结构的补充需求
393.2.3需求跟踪
403.3技术路线(roadmap)的管理
403.3.1外部软件产品
403.3.2软件技术管理的陷阱和圈套
423.3.3组织技术路线
443.4有效的技术会议
443.4.1非正式技术会议
443.4.2同事审查和检查
453.4.3设计审查
453.4.4设计
通信会议
463.4.5管理会议
463.4.6供货商陈述会议
463.4.7分散式的技术会议
473.5软件体系结构过程活动中的陷阱和圈套
473.5.1开发者和架构师之间缺乏及时沟通
473.5.2
分析瘫痪
483.5.3复用设计
483.5.4用例
483.5.5计划表
483.6
计算机辅助软件工程(case)工具
493.7推荐读物
50第4章实例系统概要
514.1系统概要
524.2系统接口概要
524.3约束
544.4主要的操作和软件的需求
55第5章uml快速浏览
575.1uml图示概括
575.2通用作图习俗
595.2.1通用特征:构造型、标记值、多实例
595.2.2视图标签
625.3图示
625.3.1构件实例图
625.3.2类和子系统图
635.3.3交互(顺序和协作)图
645.3.4部署图
665.3.5状态图
675.3.6活动图
675.4管理复杂度
685.4.1关注建模的用例
695.4.2关注建模的元素
695.4.3细节层
705.4.4模型数量的
控制
705.4.5使用附加的文本
信息
715.5推荐读物
72第6章系统环境和领域分析
736.1概念图
736.2环境视点
756.3领域分析技术
786.3.1正式的分析技术
796.3.2找出领域实体的其他技术
826.3.3分析的捷径
836.4分析视点
846.4.1交互分析视点
846.4.2焦点分析视点
856.4.3整体分析视点
876.4.4候选子系统标识
886.5推荐读物
90第7章构件设计和建模
937.1概述
937.1.1基于构件的开发
937.1.2术语
947.1.3通信和接口
967.1.4发现构件
967.1.5构件设计的质量
977.2构件视点
977.2.1构件通信
987.2.2构件接口
997.2.3基于消息的构件建模
1027.2.4组合接口和消息
1047.2.5接口和消息的比较
1067.2.6机制和性能注释
1077.3构件交互视点
1097.3.1构件和构件之间的交互
1097.4构件状态建模
1117.5高级可配置构件体系结构的建模
1147.6推荐读物
115第8章子系统的设计
1178.1术语
1178.2对子系统、接口和分层进行建模
1198.2.1子系统接口依赖性视点
1198.2.2利用分层加强子系统依赖视图的功能
1218.2.3顶层依赖
1238.2.4分层子系统视点
1238.3子系统和层与实现的映射
1288.3.1子系统、层和构造树
1288.3.2子系统和构件
1308.4推荐读物
131第9章事务和数据设计
1339.1逻辑数据体系结构
1339.1.1逻辑数据模型的稳定性
1359.1.2稳定的逻辑数据模型的影响
1369.2逻辑数据视点
1379.2.1逻辑数据视图实例
1379.2.2消息传递的逻辑数据视图
1409.3数据模型的设计——其他要考虑的因素
1419.3.1数据模型和层
1429.3.2数据模型和映射
1429.3.3将对象映射到关系
数据库
1439.4事务设计
1469.4.1事务概念
1469.4.2事务动态性建模
1479.4.3事务和接口设计
1509.5推荐读物
151第10章进程和部署的设计
15310.1
物理数据视点
15310.1.1其他存储属性的建模
15510.1.2详细的物理存储建模
15710.2进程视点
15810.2.1进程和构件
16110.2.2进程和构件管理
16110.2.3进程状态视点
16410.3部署视点
16810.3.1可伸缩节点的设计
17110.3.2备份/归档设计
17110.4推荐读物
174第11章体系结构技术
17511.1体系结构开发技术
17511.1.1共性和可变性的分析
17611.1.2可变性设计
17711.1.3生成
程序设计技术
17811.1.4构造一个框架系统
17811.1.5原型构造
17911.1.6接口开发——契约式设计
18011.1.7体系结构描述语言
18111.1.8体系结构的评价
18111.2软件划分策略——关注划分
18111.2.1功能分解
18211.2.2分离配置数据
18311.2.3分离特有硬件(hardware-specific)构件
18311.2.4分离时间关键(time-critical)构件
18311.2.5从用户接口中分离领域实现模型
18311.2.6从实现技术中分离领域实现模型
18411.2.7从监控中分离主要功能
18411.2.8分离错误恢复处理
18411.2.9外部接口的适配性
18511.3软件可变性和依赖性管理
18511.3.1稳定性依赖原则(sdp)
18611.3.2无环依赖原则
18711.3.3接口分离原则
18711.4使用体系结构模式
18811.5集成策略
18911.5.1纯数据(data-only)集成
19011.5.2可执行集成
19111.6建立体系结构以支持开发
19211.6.1配置和变化的管理
19211.6.2构造管理
19211.6.3连续集成
19311.6.4预期的多语言开发
19311.6.5预期技巧性开发(改编技术)
19411.7推荐读物
195第12章视点的应用
19712.1自底向上的体系结构开发
19712.2自顶向下的体系结构开发
19912.3消息协议和接口开发
20112.4对现存系统的再开发
20212.5体系结构文档化
20312.6结论
20412.6.1成为一个软件架师
20412.6.2实践的现状
20612.6.3未来前景
20712.6.4最后的思考
20912.7推荐读物
209附录a体系结构视点总结
211参考文献
217索引
225
序言/前言序软件体系结构(softwarearchitecture)是近年来软件工程领域中的一个热点研究方向。它的出现为软件复用,特别是设计方案的复用带来了新的前景。在学术界研究软件体系结构的同时,工业界也看到了新的希望。uml的出现及其与体系结构研究结论的结合,为体系结构的应用带来了新的契机。在这样的背景下,对于广大工程技术人员和在校学生而言,学习与研究软件体系结构就显得特别有意义。基于体系结构的开发被认为是处理大型项目复杂性的一项技术,然而,关于如何有效地开发和描述软件体系结构,现在仍然没有取得共识。《大型软件体系结构:使用uml实践指南》的作者jeffgarland和richardanthony为需要了解大型软件的软件开发架构师、开发者和管理者提供了他们在一些大型软件开发项目中已经取得的经验,并描述了他们已经成功使用过的技术和体系结构表示。本书不是一本理论
教材,而是一本实践指南,其重点是大型系统的软件体系结构开发,这意味着本书要处理的是企业系统和大型分布式系统。当然,本书中讨论过的绝大部分技术和视点也可以用于小型项目和嵌入式系统开发。本书是这样组织的,在前几章中给出总的概述,在后面章节中讨论特定体系结构视点。第1章讨论了对什么是“软件体系结构”这一概念的许多看法。第2~3章讨论与体系结构相关的角色和过程。第4章给出了
银行系统实例的概述,这一例子将被用在以后各章中,以说明各种视点。第5章小结了uml图示符号和以后各章节所要描述的视点。第6~10章讨论并描述了软件体系结构的各种视点。第11章描述了体系结构开发的技术和原则。每章结束时,通过推荐读物列出了主要参考书籍和
论文,这些参考
资料包括了有关本章主题方面的更多信息。这些推荐书籍、论文和网址给我们提供了各章节中所没有涉及到的全部细节。全书由叶俊民、汪望珠、罗景、赵良、涂新辉、陈利、胡金柱、蔡玲如、杨治、胡龙江、杨明霞、牟书霞等人翻译,全书由叶俊民统一整理书稿。由于译者水平有限,不足之处在所难免,特别在一些新的技术术语的翻译上,可能与一些书籍和论文中不同,我们尽量使译文翻译得正确,并符合中文的习惯。如有不当之处,希望广大读者能够提出宝贵意见。叶俊民华中师范大学计算机科学系前言本书的目的是为大型软件体系结构的开发提供实际的表示方法和技术,其目标是使软件结构师、开发者和管理者有效地借鉴一些大型软件开发项目方面的经验。本书描述了我们已经成功使用过的技术和体系结构表示。本书旨在成为一本实践指南。我们的目标是要做到简明扼要。在软件体系结构的定义上,我们只包括指导软件结构师的基本信息,同时提供了进一步阅读的指导,而对这些文献没有进行详细描述。理想情况是,使软件开发团队把体系结构作为一种工具来指导软件开发,而不是采用在软件已经开发出来后,再去捕捉体系结构的这种常见做法。统一建模语言(uml)的使用将贯穿全书。我们省略了很多uml模型,只是将我们认为最有用的部分介绍出来。结合软件密集型系统
最新的ieee1471
标准,我们描述了有助于软件体系结构开发和文档化的一些体系结构视点。在阅读完本书后,你将理解相关的技术和视点,这些技术和视点能提高你在系统中对软件体系结构的建模能力。本书的重点是大型系统的软件体系结构,这意味着要处理的是企业系统和大型分布式系统。当然,在此讨论的绝大部分视点和技术也可以用于小型项目和嵌入式系统的开发。典型的大型软件项目应有如下特点。l
有大量源代码(通常有上百万行)l
有大批开发人员(可能有数百人,且工作位置在地理上常常是分散的)l
构件之间的交互高度复杂l
广泛使用了外购构件(off-the-shelf)l
多种程序设计语言l
多种持久机制(如文件、关系数据库、面向对象数据库)l
多种硬件平台l
构件分布在很多硬件平台上l
高度并发性即使对最有经验的软件设计者和开发者而言,对大型系统本身所具有的复杂性的处理也是一种挑战。大型软件系统包括数百万个元素,这些元素通过交互来完成系统功能。但这些元素的交互非常不明显,尤其是对于为典型的软件项目所创造的工件。这些工件对在项目中的各个阶段加入的新团队成员特别关键。这些阶段包括系统的开发、集成、测试和维护。然而,更具有挑战性的是,当系统的必要功能需要升级时,必须能理解和修改这些元素。为正确地做到这一点,不仅需要理解设计的基本原则,而且要理解这些元素的交互。遗憾的是,人类对管理复杂性尚不得法。人的短期记忆通常可以同时保持5~9项事务(著名的魔数定理)。团队之间的沟通对于合作是至关重要的,实际上,团队成员间却常常因使用不精确的语言造成了沟通上的困难,为此,需要提供一种共同语言来改善沟通。近年来,软件领域借鉴了其他工程领域的做法,开始开发了一些管理复杂性的方法,这些方法包括uml、面向对象技术、设计模式、预制软件构件和框架的使用等。基于体系结构的开发常被认为是处理大型项目的复杂性的一项技术,然而,关于如何有效地开发和描述软件体系结构,现在仍然没有取得共识。使用uml进行设计的这一方法尚不通用,人们对使用uml作为工具来开发和描述体系结构也难以达成共识。uml提供了大量的构造工具来描述软件体系结构,这些工具中还有很多扩展特征。uml的这些灵活机制为软件体系结构的表示提供了极大的可能性。另一方面,软件体系结构和uml方面的大部分书籍和文章都没有涉及大型项目开发问题,也不会为怎样开始入手定义软件体系结构提供指南,更没有提供特定的表示来给软件体系结构开发团队传达合适的信息。本书试图去满足以上需求,而这些对软件结构师和软件开发团队来说恰恰是很重要的。本书能够提供实践指南的部分包括:l
对体系结构的建模,包括构件、子系统、依赖性、事务和接口l
对环境元素的建模,包括进程、节点和物理数据库l
为软件体系结构开发而剖析的有用技术l
各类软件体系结构开发过程l
软件结构师和体系结构小组的角色和责任l
体系结构开发中的陷阱和圈套l
对可复用的及外购的软件框架和构件的利用l
解决诸如性能和可维护性等方面的非功能需求本书并没有号称是对软件体系结构的最佳描述或惟一表示方法。有些系统可能需要本书以外的一些表示方法,而另一些系统则只需要本书表示方法的一部分。当然,绝大多数软件开发项目应该能从本书提供的一些技术和体系结构表示方法中受益。我们在本书中坚持无扩展的uml表示,在某些情况下,这会导致一些形式或模型语义上的限制。尽管有这些限制,本书中的那些视点已经帮助我们解决了大型系统中的复杂问题。注意,在一些项目的开发过程中,这些得到改进后的视点,可以使用uml来描述。在很多情况下,在uml发展到当前状态之前,我们使用了特定记号,此外,uml未来的变化和相关特征可能允许改进本书中描述的体系结构视图。这些内容中的任何部分都会受到我们的关注。最后,尽管我们将注意力放在使用uml建模体系结构上,但在适当情况下,我们也会讨论其他表示方法。本书的主要部分集中在uml对软件体系结构的应用上,此外,我们还讨论了软件结构师的角色,以及体系结构开发是怎样适应软件开发过程的。我们使用了一些本书中的体系结构视点来描述一些项目,这些项目贯穿了不同组织和不同的开发过程。大型项目倾向于使用相对形式化的过程,这对我们所描述的视点很适合。当然,我们也在高度敏捷和灵活过程的项目中使用了这些视点和技术。我们相信,基于软件体系结构的开发不必包括重量级进程(heavy-weight
processes)。本书的读者包括那些正在或即将从事软件设计和开发的人员,以及那些希望更好地理解成功的软件体系结构方法的大型软件开发者。本书的读者应该具有uml的工作经验,且至少在软件开发或设计方面有数年经验。软件结构师或具有软件体系结构团队经验的读者可以从本书中获益更多。本书在前几章中给出了一般的概念和总的概述,在后面章节中讨论了特定的体系结构的视点。第1章讨论什么是“软件体系结构”;第2~3章讨论与体系结构相关的角色和过程;第4章给出了银行系统实例的概述,这一例子将被用在以后各章中,以说明各种视点;第5章小结了uml图示符号和以后各章节所要描述的视点;第6~10章讨论并描述了软件体系结构的各种视点;第11章描述了体系结构开发的技术和原则。每章结束时的推荐读物列出了主要书籍和论文,这些参考资料包括了有关该章主题方面的更多信息。这些推荐书籍、论文和网址给我们提供在该章节所涉及到的全部细节,希望能够包括我们已经发现的最有用的信息。这些参考书籍和论文在参考文献中列出。第1章引入了软件体系结构定义及其他术语,此外,还介绍了基于uml体系结构的视点,并与其他现存体系结构方法进行了比较。第2章描述了软件结构师的角色。同时,还介绍了诸如一个合格软件结构师所应具有的技能和背景,一个组织来支持结构师的途径,以及软件体系结构小组的组织和结构。第3章讨论了软件体系结构与整个软件开发过程的关系,并描述了软件体系结构开发的过程。其中的主题包括有效审查过程的创建、软件底层结构开发、技术路线管理、过程陷阱和圈套,以及有关工具方面的讨论。第4章是关于银行系统实例的概述,该实例将用于本书之后各章中,以说明体系结构视点。第5章简要概述了在以后各章中用于构建体系结构视点的uml图示符号和概念。第6章提供了定义系统环境和进行领域分析的表示方法和技术概述。这包括对概念图、环境视图和用于领域分析的视图的讨论。第7章解释了帮助构件开发的体系结构表示。这包括构件视图、构件交互视图和构件状态视图,同时也讨论了构件消息和接口。第8章讨论了子系统和分层的表示。这些视图包括分层子系统视图和子系统接口依赖视图,它们在软件体系结构的应用中是作为
基础图示的。第9章描述事务和逻辑数据建模。这包括对于到关系数据库的映射设计方面的讨论。第10章讨论了物理系统构造建模的表示,包括节点、数据库和进程,这些内容包括物理数据视图、进程视图和部署视图。第11章描述了软件体系结构开发中必不可少的各种技巧和技术。这包括体系结构模式、系统划分、遗留系统和cots的利用及设计技术等。第12章进行了总结并做出了一些最终的探讨,包括如何成为软件架构师的一些思考。附录给出了所有体系结构视点的小结。本书是对越来越多的软件体系结构著作的有益补充,以简明形式汇集了重要信息,集中讨论了大型软件体系结构,并提供了一套使用uml的关键的体系结构视点。我们希望读者能对本书感兴趣,并能发现一些软件结构师必备的关键信息。我们欢迎各位读者在我们的专门网站上对本书发表见解和进行讨论:http://www.largescalesoftwarearchitecture.info/.jeffgarlandrichardanthony