首页>参考读物>计算机科学与技术>综合

软件架构设计:实用方法及实践
作者 : [墨西哥]温贝托?塞万提斯(Humberto Cervantes) [美]里克?卡斯曼(Rick Kazman) 著
译者 : 刘旭斌  陈瑶 邵元英 栾云杰  译
丛书名 : 架构师书库
出版日期 : 2017-07-31
ISBN : 978-7-111-57381-4
定价 : 59.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 212
开本 : 16
原书名 : Designing Software Architectures: A Practical Approach
原出版社: Pearson Education Inc.
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

图书特色

本书阐述了如何以一种系统的、可预测的、可重复的、节约成本的方式来设计各类软件架构。书中不仅介绍了一种实用的架构设计方法,还提供了由可重用的设计知识所支撑的结构化方法,也收录了丰富的案例研究,用于展示如何使用这一实用方法。
利用现实案例,你将掌握已被验证过的属性驱动设计(ADD)的全新版本,比如伴随功能需求和架构问题出现的可修改性、可用性以及可靠性。
Humberto Cervantes和Rick Kazman基于他们丰富的经验,指导你通过各具特色的实用设计来支持完整的软件周期,从需求到维护,再到演化。你将学习如何成功地将设计整合在组织背景中,以及如何使用敏捷方法设计软件系统。

通过阅读本书,你将:
理解架构设计会涉及哪些方面,以及适用于完整的软件开发生命周期中的哪个阶段。
掌握核心设计理念、原理和流程。
了解执行属性驱动设计方法的步骤。
向上或者向下增加设计和分析,包括针对售前过程的设计或者轻量级架构评审的设计。
识别和优化分析与设计之间的关键关系。
利用成熟的、可重用的设计原语,并使它们适应具体问题和背景。
解决新领域的设计问题,例如云领域、移动领域或者大数据领域。


温贝托·塞万提斯(Humberto Cervantes) Autónoma Metropolitana Itztapalapa大学教授,主要研究兴趣是软件架构,尤其是架构设计过程中使用的方法和工具,并积极推动这些方法和工具在软件产业中的应用。他拥有SEI软件架构专家和ATAM评估师认证。
里克·卡斯曼(Rick Kazman) 夏威夷大学教授,卡耐基·梅隆大学软件工程研究所首席研究员,主要研究兴趣是软件架构、设计和分析工具、软件可视化,以及软件工程经济学。Kazman创建了很多非常有影响的架构分析方法和工具,包括SAAM(Software Architecture Analysis Method)、ATAM(Architecture Tradeoff Analysis Method)、CBAM(Cost-Benefit Analysis Method),以及Dali和Titan工具,他发表了150多篇论文,并且参与了多部图书的撰写,包括《软件架构实践》第3版和《软件架构评估》等。


刘旭斌 毕业于北京大学,有超过10年的外企软件开发和测试经历,目前就职于IBM,从事DevOps相关工作。
陈瑶 意大利都灵理工大学计算机工程硕士毕业,曾就职于IBM和网易,Certified ScrumMaster,5年以上DevOps项目开发和管理经验,现在某大数据公司任技术项目经理。
邵元英 毕业于北京大学,先后在华为、NEC和IBM从事软件开发、测试及项目管理工作。现在某互联网公司任高级运营经理。
栾云杰 有超过10年测试、开发经验,目前工作于IBM,任项目测试主管。

图书前言

提起软件架构,人们常常会想到模型—模型表示构成软件架构的基本结构。偶尔,人们才会思考这些结构产生的过程,到底经过什么样的思考过程才有了这些结构,也就是说,设计的过程是什么。设计是一种完成起来很复杂的活动,关于设计的主题也比较复杂,不容易写清楚,因为这需要针对系统的方方面面来考虑并做出决策。这些方面往往很难表达,尤其当它们来自于以往实战性的软件开发项目时,从这样的项目中得来的经验和知识是很难言传的。尽管如此,因为设计行为本身是建立软件架构的基础,所以它亟待被解释。虽然经验很难通过一本书来传授,但是我们可以通过分享一种方法,来帮助读者以系统化的方式完成设计过程。
本书的主旨是介绍设计过程和一种特殊的设计方法,这种方法称为属性驱动设计(Attribute-Driven Design,ADD)。我们相信这种方法非常有效,能帮助读者以有原则、有纪律和可重复的方式完成设计。在本书中,列举了属性驱动设计及现实生活中的几个有关属性驱动设计的真实案例。我们将通过这些案例演示如何进行架构设计。即便你目前没有足够的设计经验,我们会举例说明如何借助该方法来复用设计概念,即那些历经考验的经典方案。
尽管属性驱动设计十多年前已经提出,关于它的文字资料却很少,也很少有资料可以提供属性驱动设计的实例并对其具体实现过程加以解释。因为公开信息的缺乏,人们很难使用该方法或将该方法传授给他人。此外,一些已经发表的关于属性驱动开发的文档也都比较概括,很少涉及架构师日常使用的概念、实践和技术。
我们已经跟职业架构师一起工作了多年,曾指导他们如何进行设计,以及如何在设计过程中学习。同时我们也学到了很多,例如,我们了解到职业架构师在设计过程的早期会考虑哪些技术因素,这一点在之前的属性驱动设计版本中是没有的。就因为这个原因,该方法被很多实践者认为跟实际脱节。本书提供了一个修正过的属性驱动设计新版本。在该版本中,我们试图不遗余力地在理论和实践之间架设桥梁,缩小理论和实践之间的差距。
虽然我们已经教授了多年软件架构和设计软件,但是一路走来我们认识到,对没有经验的人来说,软件架构和软件设计太难了。这种认识促使我们去创建设计路线图,可以肯定的是,这样可以有效引导人们完成相关设计过程。我们同时设计了一种针对软件设计教学的游戏,可以作为本书的配套部分。
本书面向的读者首先是那些对软件架构设计感兴趣的人,尤其是那些必须展开这项设计任务现阶段却不得不使用某些临时性方案的行业内人士,本书定会对他们别有益处。而对于有经验的软件架构设计者来说,他们已经有了一套逐步建立起来的设计方法,相信这些读者也能通过本书找到新的思路。例如,如何用看板(Kanban)追踪设计进度,如何利用基于策略的问卷调查分析一个设计理念,如何通过设计方法完成早期的评估预测。再者,对于已经在软件工程学院熟知其他架构方法的读者,则可以得到属性驱动设计与其他设计方法的关联信息。例如,与质量属性工作坊(Quality Attribute Workshop,QAW),与架构权衡分析方法(Architecture Tradeoff Analysis,ATAM),以及与成本效益分析方法(Cost Benefit Analysis Method,CBAM)之间的联系。最后,本书也适合计算机科学或者软件工程专业的学生和老师阅读。我们深信本书中列举的案例研究可以帮助读者理解如何更轻松地完成一系列的设计过程。可以肯定的是,我们已经在课程中运用了相似的案例,并且效果显著。就像爱因斯坦所说的,“举例不是教学时可供选择的方式,而是唯一的方式。”
我们期望本书能够让读者明白,设计其实是有套路可依的,按照这样的方法或者套路,你能够在今后的软件架构设计中设计出更优秀的软件产品。
本书各章内容如下:
第1章简明地介绍了软件架构和属性驱动设计方法。
第2章讨论软件架构设计的细节,设计过程的主要输入—架构驱动因子,以及设计的概念,这些概念会帮助你明白如何利用已经过验证的方案来理清这些驱动因子有哪些。
第3章详细介绍属性驱动设计方法。重点讨论属性驱动设计方法的各个步骤,以及能够用来完成这些步骤的多项技术。
第4章解释了“绿地”(greenfield)系统的开发实例。在该案例研究中,我们尽力解释如何将第3章描述的大多数概念运用到设计过程中,因此,你可以自然地认为该案例研究比较“学术”(虽然该案例源于真实存在的系统)。
第5章阐述第二个案例研究,该案例是与职业软件架构师合作完成的,因而更加专业、更加详细。它将以翔实的细节展示属性驱动设计如何应用于涉及多种技术的大数据系统的设计中。该案例展示了如何在“新”领域中开发系统,而不是在第4章提到的传统领域。
第6章是一个较短的案例研究,展示如何将属性驱动设计应用于常见的遗留(或棕地,brownfield)系统的扩展设计中。该实例说明架构设计并非是在系统开发第一版时一次完成的,而是在开发过程的不同阶段实施的。
第7章展示了其他一些设计方法。在属性驱动设计的修正版本中,我们采纳了其他设计过程研究者的想法,在此简要总结了他们的方法,在向他们的工作致敬的同时,也比较了属性驱动设计与其方法的不同。
第8章深入讨论了分析这个主题(尽管这是一本关于设计的书)。分析本来就是设计的一部分,所以本章讲述了一些技巧,它们既可以用于设计过程当中,又可以用于部分设计完成后。我们专门介绍了基于策略问卷调查方法的使用,该方法能帮助我们简单有效地理解设计过程中的种种决定。
第9章展示了设计过程如何适应组织级别的应用。例如,在项目周期的最早期进行一些架构设计有助于评估目标。同时,还展示了属性驱动设计如何与其他软件开发方法协同工作。
第10章总结了全书内容。
本书附有两个附录。附录A给出了各种设计概念的目录,这些设计概念可用于特定的应用领域。该目录集合了我们从各处收集的设计概念,反映了现实中那些经验丰富、训练有素的架构师是如何工作的。目录包含了第4章案例研究中使用的设计概念的样本。附录B针对7个最常见的质量属性提供了一套基于策略的问卷调查(详见第8章),同时针对DevOps额外提供了一份问卷调查。
致谢
希望能够在此表达我们对审阅人员Marty Barrett、Roger Champagne、Siva Muthu、Robert Nord、Vishal Prabhu、Andriy Shapochka、David Sisk、Perla Velasco-Elizondo和Olaf Zimmermann的感谢,感谢他们慷慨地提出他们的观点和意见。我们也要感谢Serge Haziyev和Olha Hrytsay,他们帮助我们完成了本书第5章。此外,如果漏掉Serge、Olha和Andriy在内的许多Softserve的架构师就是我们失职了,他们对整本著作提供了很多帮助。
Humberto希望感谢Quarksoft公司的主管和架构师小组。关于修改属性驱动设计的很多想法和本书中的一个案例研究都来源于该方法在这家公司的实践。感谢我有幸合作过和交换过意见的其他公司的架构师及开发者,我从他们身上学到了很多。我也希望感谢软件工程学院,他们多年来一直邀请我和其他学者参加他们的精英教育研讨会(ACE Educators Workshop)。我还要感谢我的母校,墨西哥首都伊斯塔帕拉帕自治大学,它一直在支持我。感谢我的同事Perla Velasco-Elizondo和Luis Castro,他们已经在架构之旅中陪伴我多年。感谢Alonso Leal,是他在多年前给了我成为一个职业架构师的机会。感谢Richard S. Hall,他教了我许多写作本书时很有价值的技巧。最后,我要感谢我的合作者Rick,他是个好人,也是个好同事,很高兴能和他一起工作并交换意见。
Rick希望感谢软件工程学院的James Ivers和他的研究小组。我还要特别感谢Rod Nord悉心的审校和宝贵的建议。我也要感谢我的长期合作者和导师Len Bass,在许多年前他引领我开启了软件架构之旅。没有Len,我不知道自己今天会在哪里。此外,我要感谢Linda Northrop,她多年来一直大力支持我的研究,并提供给我许多宝贵的机会。最后,我要感谢我的合作者Humberto,他总是朝气蓬勃,和他共事是一件真正的乐事。

上架指导

计算机\软件工程

封底文字

本书阐述了如何以一种系统的、可预测的、可重复的节约成本的方式来设计各类软件架构。书中不仅介绍了一种实用的架构设计方法,还提供了由可重用的设计知识所支撑的结构化方法,也收录了丰富的案例研究,用于展示如何使用这一实用方法。
利用现实案例,你将掌握已被验证过的属性驱动设计(ADD)的全新版本,比如伴随功能需求和架构问题出现的可修改性、可用性以及可靠性。
Humberto Cervantes 和Rick Kazman基于他们丰富的经验,指导你通过各具特色的实用设计来支持完整的软件周期,从需求到维护,再到演化。你将学习如何成功地将设计整合在组织背景中,以及如何使用敏捷方法设计软件系统。
通过阅读本书,你将:
• 理解架构设计会涉及哪些方面,以及适用于完整的软件开发生命周期中的哪个阶段
• 掌握核心设计理念、原理和流程
• 了解如何执行属性驱动设计方法的步骤
• 向上或者向下增加设计和分析,包括针对售前过程的设计或者轻量级架构评审的设计
• 识别和优化分析与设计之间的关键关系
• 利用成熟的、可重用的设计原语,并使它们适应具体问题和背景
• 解决新领域的设计问题,例如云领域、移动领域或者大数据领域

作者简介

[墨西哥]温贝托?塞万提斯(Humberto Cervantes) [美]里克?卡斯曼(Rick Kazman) 著:暂无相关简介

译者简介

刘旭斌  陈瑶 邵元英 栾云杰  译:暂无简介

译者序

为什么要翻译这本书
从机械工业出版社华章分社王春华老师那里获知有一本有关软件架构设计的图书正在征集译者,作为软件从业人员,我表示出极大的兴趣。在看过英文版并试译完样章后,我和几位志同道合的软件工程师一起开始了本书的翻译工作。
在此要感谢机械工业出版社的关敏老师、王春华老师给予我们的支持和信任。因为这份信任,我们才有机会来翻译这本关于软件架构设计的书籍。
本书系统地讲解了一个通常我们认为很复杂的问题—软件架构设计,里面提供的案例有很强的可参照性,所涉及的工具也具有很好的可操作性。
书中介绍了架构的设计过程以及设计方法:属性驱动设计(ADD)。利用ADD,可以帮助使用者在设计过程中不断重构设计。作者通过介绍ADD的概念和ADD的几个应用实例,展示了如何执行架构设计,如何重用设计概念,即借用其他成熟的解决方案。本书特别适合想要“从入门到精通”掌握软件架构设计的读者。
在介绍架构设计的概念、方法、流程和理论时,本书结合了非常新鲜、实用的实例,一步一步演示使用ADD方法完成架构设计的方方面面,通俗易懂。在学习理论方法的同时,还能够了解时下广泛发展的一些框架和技术,相信读者会从本书中学习到翔实的架构知识,从而受益匪浅。
作为软件从业人员,我参与过软件开发、测试和项目管理,在实际工作中深刻地认识到好的软件架构对于软件产品的决定性意义。参与翻译本书的过程也是一次满足自己好奇心和求知欲的过程。希望读者在阅读本书的过程中也能获得和我一样的愉快体验。
最后,由于译者水平有限,书中难免出现疏漏之处,恳请读者批评指正。
读者对象
本书适合以下几类读者阅读:
软件架构师
有志于成为软件架构师的软件从业人员
计算机相关专业的在读学生
勘误支持
虽然译者试图努力保证本书中不出现错误,但鉴于译者的知识水平和视角,本书中难免出现用词错误或者技术问题。在此,恳请读者不吝指教,指出错误。请读者发送邮件到cy.yss@163.com,帮助我们修正错误。
译者分工
本书由来自IBM中国开发中心的软件工程师及项目经理联合翻译完成。其中刘旭斌翻译了第1章、第7章和第9章;陈瑶翻译了第2章和第3章;邵元英翻译了第4章和第8章;栾云杰翻译了第5章、第6章和第10章。附录部分由上面四位共同负责。
致谢
感谢机械工业出版社华章分社引进本书的中文版版权,这是本书中文版得以面市的核心要素。
感谢机械工业出版社华章分社的关敏和王春华老师,她们专业的编辑水平为本书提供了重要的质量保证。
感谢本次翻译组的小伙伴,他们的热忱使翻译过程变得有趣而且顺畅。

图书目录

译者序
前言
第1章 引言 …… 1
1.1 写作动机 …… 1
1.2 软件架构 …… 2
1.2.1 软件架构的重要性 …… 2
1.2.2 生命周期活动 …… 3
1.3 架构师的角色 …… 5
1.4 ADD发展史 …… 6
1.5 小结 …… 7
1.6 扩展阅读 …… 8
第2章 架构设计 …… 9
2.1 通用设计 …… 9
2.2 软件架构中的设计 …… 10
2.2.1 架构设计 …… 11
2.2.2 元素交互设计 …… 11
2.2.3 元素内部设计 …… 12
2.3 为什么架构设计如此重要 …… 13
2.4 架构驱动因子 …… 13
2.4.1 设计目的 …… 14
2.4.2 质量属性 …… 15
2.4.3 主要功能 …… 19
2.4.4 架构关注点 …… 20
2.4.5 约束条件 …… 21
2.5 设计概念:用于创建结构的构建块 …… 22
2.5.1 参考架构 …… 22
2.5.2 架构的设计模式 …… 24
2.5.3 部署模式 …… 25
2.5.4 策略 …… 26
2.5.5 外部开发组件 …… 27
2.6 架构设计决策 …… 30
2.7 小结 …… 31
2.8 扩展阅读 …… 32
第3章 架构设计过程 …… 34
3.1 原理性方法的必要性 …… 34
3.2 属性驱动设计 3.0 …… 34
3.2.1 步骤1:评审输入 …… 35
3.2.2 步骤2:通过选择驱动因子建立迭代目标 …… 36
3.2.3 步骤3:选择一个或多个系统元素来细化 …… 37
3.2.4 步骤4:选择一个或多个设计概念以满足选中的驱动因子 …… 37
3.2.5 步骤5:实例化架构元素、分配职责和定义接口 …… 37
3.2.6 步骤6:草拟视图和记录设计决策 …… 38
3.2.7 步骤7:分析当前设计、评审迭代目标、实现设计目的 …… 38
3.2.8 按需迭代 …… 39
3.3 根据系统类型遵循设计路线图 …… 39
3.3.1 成熟领域的绿地系统设计 …… 39
3.3.2 新兴领域的绿地系统设计 …… 41
3.3.3 现存系统的设计(棕地) …… 42
3.4 识别和选择设计概念 …… 42
3.4.1 识别设计概念 …… 42
3.4.2 选择设计概念 …… 43
3.5 结构生成 …… 46
3.5.1 元素实例化 …… 47
3.5.2 划分职责和识别属性 …… 47
3.5.3 建立元素间的关系 …… 48
3.6 定义接口 …… 48
3.6.1 外部接口 …… 48
3.6.2 内部接口 …… 48
3.7 在设计中创建概要文档 …… 51
3.7.1 记录视图的草图 …… 51
3.7.2 记录设计决策 …… 53
3.8 追踪设计进度 …… 55
3.8.1 使用架构待办事项清单 …… 55
3.8.2 使用设计看板 …… 55
3.9 小结 …… 57
3.10 扩展阅读 …… 57
第4章 案例研究:FCAPS系统 …… 59
4.1 商用案例 …… 59
4.2 系统需求 …… 60
4.2.1 用例模型 …… 60
4.2.2 质量属性场景 …… 62
4.2.3 约束条件 …… 62
4.2.4 架构关注点 …… 62
4.3 设计过程 …… 63
4.3.1 ADD 步骤1:评审输入 …… 63
4.3.2 迭代1:建立一个完整的系统架构 …… 63
4.3.3 迭代2:识别支持基本功能的架构 …… 70
4.3.4 迭代3:解决质量属性场景的驱动因子(质量属性-3) …… 77
4.4 小结 …… 80
4.5 扩展阅读 …… 81
第5章 案例研究:大数据系统 …… 82
5.1 商用案例 …… 82
5.2 系统需求 …… 83
5.2.1 用例模型 …… 83
5.2.2 质量属性场景 …… 83
5.2.3 约束条件 …… 84
5.2.4 架构关注点 …… 84
5.3 设计过程 …… 84
5.3.1 ADD方法的步骤1:评审输入 …… 85
5.3.2 迭代1:参考架构和系统整体结构 …… 85
5.3.3 迭代2:技术选择 …… 91
5.3.4 迭代3:数据流元素的细化 …… 99
5.3.5 迭代4:服务层的细化 …… 104
5.4 小结 …… 107
5.5 扩展阅读 …… 107
第6章 案例研究:银行系统 …… 109
6.1 商用案例 …… 109
6.1.1 用例模型 …… 110
6.1.2 质量属性场景 …… 111
6.1.3 约束条件 …… 111
6.1.4 架构关注点 …… 111
6.2 现有的架构文档 …… 112
6.2.1 模块视图 …… 112
6.2.2 分配视图 …… 113
6.3 设计过程 …… 114
6.3.1 ADD方法的步骤1:评审输入 …… 114
6.3.2 迭代1:支持新的驱动因子 …… 114
6.4 小结 …… 118
6.5 扩展阅读 …… 119
第7章 其他设计方法 …… 120
7.1 一种软件架构设计的通用模型 …… 120
7.2 以架构为中心的设计方法 …… 121
7.3 RUP中的架构活动 …… 123
7.4 软件架构设计的过程 …… 124
7.5 一种实现架构与设计的方法 …… 126
7.6 视点与视角方法 …… 127
7.7 小结 …… 129
7.8 扩展阅读 …… 129
第8章 设计过程中的分析 …… 131
8.1 分析和设计 …… 131
8.2 为何分析 …… 133
8.3 分析方法 …… 134
8.4 基于策略的分析 …… 135
8.5 值得反思的问题 …… 137
8.6 基于场景的设计评审 …… 138
8.7 架构描述语言 …… 141
8.8 小结 …… 142
8.9 扩展阅读 …… 142
第9章 组织中的架构设计过程 …… 144
9.1 架构设计与开发生命周期 …… 144
9.1.1 售前阶段的架构设计 …… 145
9.1.2 开发运维阶段的架构设计 …… 146
9.2 组织方面的问题 …… 150
9.2.1 个人设计还是团队设计 …… 150
9.2.2 在组织中应用一套设计概念目录 …… 151
9.3 小结 …… 152
9.4 扩展阅读 …… 152
第10章 结束语 …… 154
10.1 方法的必要性 …… 154
10.2 下一步 …… 155
10.3 扩展阅读 …… 156
附录A 设计概念目录 …… 157
附录B 基于策略的问卷调查 …… 184
术语表 …… 196