本书根据软件生命期的特点,分4部分进行了阐述,即预想构架、创建构架、分析构架和从一个系统到多个系统。并且,书中通过精选的案例,进行了剖析。
\r\n 本书在第1版的基础上,根据软件生命期的特点,分预想构架、创建构架、分析构架和从一个系统至多个系统进行阐述。本书对第1版某些内容进行了深入介绍,并增添了一些新内容:ATAM、质量需求、构架重构、用UML对构架编档和CBAM等。此外,本书还对一些新案例进行了分析,以帮助理解软件构架如何适应商业需求。
\r\n 本书是卡内基·梅隆大学软件工程研究所推荐教材,荣获取美国权威的'软件开发'杂志第九届图书效率大奖。本书可作为软件学院及高校相关专业本科生和研究生的教材,也适合业界人士研究参考。
第Ⅰ部分 预想构架\r\n 第1章 构架商业周期\r\n 1.1 构架的产生\r\n 1.2 软件过程和构架商业周期\r\n 1.3 什么样的构架才算好\r\n 1.4 小结\r\n 1.5 讨论题\r\n 第2章 什么是软件构架\r\n 2.1 软件构架概念澄清\r\n 2.2 其他观点\r\n 2.3 构架模式、参考模型和参考构架\r\n 2.4 为什么说软件构架非常重要\r\n 2.5 构架结构和视图\r\n 2.6 小结\r\n 2.7 可进一步参阅的文献\r\n 2.8 讨论题\r\n 第3章 A-7E案例分析:各种构架结构的运用\r\n 3.1 与构架商业周期的关系\r\n 3.2 需求与质量\r\n 3.3 A-7E航空电子系统的构架\r\n 3.4 小结\r\n 3.5 可进一步参阅的文献\r\n 3.6 讨论题 \r\n第Ⅱ部分 创建构架\r\n 第4章 理解质量属性\r\n 4.1 功能性和构架\r\n 4.2 构架和质量属性\r\n 4.3 系统的质量属性\r\n 4.4 实践中的质量属性场景\r\n 4.5 其他系统质量属性\r\n 4.6 商业质量属性\r\n 4.7 构架的质量属性\r\n 4.8 小结\r\n 4.9 可进一步参阅的文献\r\n 4.10 讨论题\r\n 第5章 实现质量属性\r\n 5.1 战术介绍\r\n 5.2 可用性战术\r\n 5.3 可修改性战术\r\n 5.4 性能战术\r\n 5.5 安全性战术\r\n 5.6 可测试性战术\r\n 5.7 易用性战术\r\n 5.8 战术与构架模式的关系\r\n 5.9 构架模式和样式\r\n 5.10 小结\r\n 5.11 可进一步参阅的文献\r\n 5.12 讨论题\r\n 第6章 空中交通管制:高可用性设计案例分析\r\n 6.1 与构架商业周期的关系\r\n 6.2 需求与质量\r\n 6.3 构架解决方案\r\n 6.4 小结\r\n 6.5 可进一步参阅的文献\r\n 6.6 讨论题\r\n 第7章 设计构架\r\n 7.1 生命期中的构架\r\n 7.2 设计构架\r\n 7.3 形成团队结构\r\n 7.4 创建骨架系统\r\n 7.5 小结\r\n 7.6 可进一步参阅的文献\r\n 7.7 讨论题\r\n 第8章 飞行模拟:构架可集成性案例分析\r\n 8.1 与构架商业周期的关系\r\n 8.2 需求与质量\r\n 8.3 构架解决方案\r\n 8.4 小结\r\n 8.5 可进一步参阅的文献\r\n 8.6 讨论题\r\n 第9章 构架编档\r\n 9.1 构架编档的使用\r\n 9.2 视图\r\n 9.3 选择相关视图\r\n 9.4 视图编档\r\n 9.5 跨视图的文档\r\n 9.6 统一建模语言\r\n 9.7 小结\r\n 9.8 可进一步参阅的文献\r\n 9.9 讨论题\r\n 第10章 软件构架重构\r\n 10.1 介绍\r\n 10.2 信息提取\r\n 10.3 数据库构造\r\n 10.4 视图融合\r\n 10.5 重构\r\n 10.6 示例\r\n 10.7 小结\r\n 10.8 可进一步参阅的文献\r\n 10.9 讨论题\r\n第Ⅲ部分 分析构架\r\n 第11章 ATAM:一种进行构架评估的综合方法\r\n 11.1 ATAM的参与人员\r\n 11.2 ATAM的结果\r\n 11.3 ATAM的阶段\r\n 11.4 Nightingale系统:应用ATAM的案例分析\r\n 11.5 小结\r\n 11.6 可进一步参阅的文献\r\n 11.7 讨论题\r\n 第12章 CBAM:构架设计决策制定的定量方法\r\n 12.1 制定决策的上下文\r\n 12.2 CBAM的基础\r\n 12.3 实现CBAM\r\n 12.4 案例分析:NASA ECS项目\r\n 12.5 CBAM评估的结果\r\n 12.6 小结\r\n 12.7 可进一步参阅的文献\r\n 12.8 讨论题\r\n 第13章 万维网:可互操作性案例分析\r\n 13.1 与构架商业周期的关系\r\n 13.2 需求和质量\r\n 13.3 构架解决方案\r\n 13.4 基于Web的电子商务构架的演变\r\n 13.5 实现质量属性\r\n 13.6 当今的构架商业周期\r\n 13.7 小结\r\n 13.8 可进一步参阅的文献\r\n 13.9 讨论题\r\n第Ⅳ部分 从一个系统到多个系统\r\n 第14章 软件产品线:重用构架资产\r\n 14.1 概述\r\n 14.2 软件产品线有效的原因\r\n 14.3 确定范围\r\n 14.4 产品线构架\r\n 14.5 采用软件产品线的困难之处\r\n 14.6 小结\r\n 14.7 可进一步参阅的文献\r\n 14.8 讨论题\r\n 第15章 CelsiusTech公司:产品线开发案例分析\r\n 15.1 与构架商业周期的关系\r\n 15.2 需求与质量\r\n 15.3 构架解决方案\r\n 15.4 小结\r\n 15.5 可进一步参阅的文献\r\n 15.6 讨论题\r\n 第16章 J2EE/EJB:工业标准计算基础结构的案例分析\r\n 16.1 与构架商业周期的关系\r\n 16.2 需求和质量\r\n 16.3 构架解决方案 \r\n 16.4 系统部署决策\r\n 16.5 小结\r\n 16.6 可进一步参阅的文献\r\n 16.7 讨论题\r\n 第17章 Luther构架:使用J2EE的移动应用案例分析\r\n 17.1 与构架商业周期的关系\r\n 17.2 需求和质量\r\n 17.3 构架解决方案 \r\n 17.4 Luther如何实现其质量目标\r\n 17.5 小结\r\n 17.6 可进一步参阅的文献\r\n 17.7 讨论题\r\n 第18章 用商业组件构建系统\r\n 18.1 组件对构架的影响\r\n 18.2 构架不匹配\r\n 18.3 作为搜索的基于组件的设计\r\n 18.4 ASEILM示例\r\n 18.5 小结\r\n 18.6 可进一步参阅的文献\r\n 第19章 未来的软件构架\r\n 19.1 重新认识构架商业周期\r\n 19.2 创建构架\r\n 19.3 生命期中的构架\r\n 19.4 商业组件的影响\r\n 19.5 小结 \r\n附录A 缩略语表\r\n参考文献
林·马斯 Len Bass:软件工程研究所(SEI)的一名高级软件工程师。他已经编著了5本书籍,并发表了大量关于软件工程、人机交互的论文。他曾经领导一个小组为飞行控制模拟器开发软件构架。目前,该构架已经被用美国空军标准。
保罗·克莱门茨 Paul Clements:软件工程研究所(SEI)的一名高级技术人员,其工作职责是开发软件构架和设计产品线。他已经发表了30多篇关于软件设计和实时系统的论文。
瑞克·凯兹曼 Rick Kazman:软件工程研究所(SEI)的一名高级软件工程师,负责构架权衡分析工作,是沃特鲁大学和多伦多大学的副教授。他已经发表了50多篇关于软件工程、人机交互和信息检索的论文。
软件构架是软件业的一个重要研究领域,正受到越来越多的关注,其地位也日益明显地体现出来。但就我们所知,无论是从技术角度还是从管理角度,目前针对实际软件开发组织的、有关如何管理软件构架的实用指导文献还十分缺乏。我们认为,目前很少有关于如何把软件构架和行业或组织的实际情况结合起来的探讨。本书就是基于这样一种认识而编写的。
在设计和分析大型而复杂的软件密集型系统过程中,我们认识到软件行业和开发组织对这些系统的设计及其最终成败所起的作用。构建系统的目的是为了满足组织的需求(或者在套装产品中的假设需求),这些需求决定了系统的性能、可用性、安全性、与其他系统的兼容性以及在生命期内适应变化的能力。系统的这些属性都是受软件构架制约的,或者说,上述属性的实现影响着软件设计师的设计选择。
本书通过对一些真实系统的案例分析,阐述了如何把软件构架与行业或组织的实际情况相结合的问题。这些实例包括如下内容:
在最小程度的集中控制下,在本组织范围内快速、方便地共享文档的设想如何最终转化为万维网的软件构架。
在空中交通管制中,对安全性的极高需求如何使公司为了获得极高可用性而围绕着一个构架构建系统。
分散在各地的不同开发人员开发的飞行模拟器子系统如何连接成一个构架,以便于各子系统的集成。
为满足产品同时交付的需求而促使(或者说迫使)公司采用某个适当的构架,从而使该公司能够将一组复杂的相关软件系统构建为一个产品线。
在组织间和团体内标准化构架方法的需要导致了诸如J2EE和EJB这样的基础结构。
上述及其他一些案例分析向读者展示了如何根据组织和其业务模型的需求、设计师的经验或主流设计方式来构建合适的软件构架。
另外,我们也讨论了软件构架本身对上述诸因素的影响。一个或一组成功的产品能够影响其他产品的开发方式,对万维网软件构架的案例分析无疑就是一个很好的例子。在该系统诞生之前,考虑网络需求的软件很少,当时很少考虑数据的可访问性,只有少数几家
组织(一般是金融组织或政府部门)考虑安全问题。
本书的读者对象是软件专业人员——即设计和实现大型的软件密集型系统的人员、软件专业人员的管理者和希望成为软件专业人员的学生。
作为一种开发产品,软件构架在质量、进度和成本方面具有极高的投资回报。这是因为软件构架出现于产品生命期的早期阶段,合理的构架为系统生命期的其他阶段——开发、集成、测试和更改——奠定了良好的基础。相反,如果构架选择不当,就意味着系统的整体结构有误,而且无法通过细小的修补或删除某些部分得到更正,即经常会导致全部拆解重建。另外,与其他的开发活动相比,构架分析的投入较低。由于在构架方面所做的决策对以后阶段的开发有着重大影响,并且对构架的检查和修正的代价相对较低,因此,软件构架能够实现极大的投资回报。
另外,我们认为可重用的组件只有在良好的构架下才会发挥应有的作用。组件也并非是惟一能够重用的部分。构架的重用有利于相类似的系列产品的开发,而这反过来又将导致新的组织结构和新的商机。
本书用大量篇幅讲述了一些用于解决组织实际问题的具体构架。精选这些案例旨在说明设计师必须根据具体的质量目标做出各种选择,以及组织的目标对最终系统的影响。
除了上述案例分析外,本书还讲述了软件构架设计、构建和评价方面的若干技巧。我们从理解对构架的实际质量要求和构建满足这些要求的构架的角度宋阐述这些技巧。我们把构架表示和重构技术视为描述和验证软件构架的手段。我们从分析和评价某个构架与其目标的符合程度来讨论这些技巧。书中所有技巧都来自我们自己和在SEI工作的同事分析各种软件系统的经验。我们分析的一些系统长达数百万行代码,是由大型软件开发商历经数年开发出来的。
尽管关于商业问题的讨论贯穿全书(如软件构架会如何影响组织的市场竞争力、一个产品家族的构架将如何影响产品上市时间),我们并没有深入讨论企业经营的问题,也没有使用企业经营方面的专业术语。毕竟,我们是软件工程师;相比之下,关于技术的讨论要深入得多。这些技术方面的内容代表了软件构架研究的现状——即当前该领域研究与实践相结合的程度,这也是全书的理论基础。书中的案例分析进一步阐明了这些基础,并向读者展示了如何将这些理论知识应用于实践。为了更好地理解案例分析所说明的经验教训,您需要具备计算机科学、软件工程和相关学科的一些背景知识。但是,我们在撰写这些案例时也做了一定的处理,使得读者无需过多了解相关领域的专业知识就可理解这些案例。例如,理解空中交通管制系统或飞行模拟案例分析都不要求具备飞行员的专业知识。
本书新增内容
本书第2版与第1版的目的相同,但自第1版问世以来,软件业已经有了新的发展,对软件构架的重要基础也有了新的理解。为了说明这些变化,本书对新的案例进行了分析,添加了新章节,并对某些章节进行了深入分析。此外,第1版问世后,我们共同编写的其他几本书对第2版产生了很大影响,它们分别是《软件构架编档》、《软件构架评估——方法和案例研究》和《软件产品线实践与模式》。这几本书和其他技术及研究活动对本书的编写产生了很大影响。自第1版推出后,构架分析、设计、重构和编档都有了很大发展,本书就反映了这一变化。
构架分析已经发展成为一个成熟的领域,已经出现了一些主要的构架分析方法,所以我们在第m部分增加了一章,对ATAM(构架权衡分析方法)进行了阐述。软件业的许多组织都把ATAM作为评估软件构架的方法。
第1版问世后,构架设计也有了很大发展。质量需求的获取、其通过小规模和大规模构架方法的实现(分别为战术和模式)以及反映如何实现它们的知识的设计方法都在各章进行了讨论。本书增加了理解质量属性、实现质量属性和ADDM(属性驱动设计方法)3章。
要获取未编档的构架,构架重构(或反向工程)是一个基本的活动。可以把构架重构作为设计项目或分析项目的一部分,或者在决定把什么作为重构系统的基础时,将其作为考虑因素。在第1版中,我们简要提及了工具集(Dali)及其在再工程环境中的使用,在第2版,即本书中,我们对其进行了详细深入的介绍。
软件构架编档是在近期发展得非常成熟的另一个主题。在推出第1版时,统——建模语言(UML)还只处于初期发展阶段,现在,它已有了很大发展,本书提供了大量反映此发展的新图表。更重要的是,已经形成了对要捕获的构架信息种类的理解,而不仅仅是使用哪种表示法。本书用——章的内容对构架编档进行了阐述。
在软件产品线一章中,我们对能够使组织采用一个构架有效开发各种系统的软件构架应用进行了概述。考虑到产品线(基于一个软件构架)能够使组织在成本、质量和上市时间上实现数量级的改进,本章阐述了构架和组织的业务目标之间的关系。
在目前的经济环境下,除了构架自身的发展,构建分布式和基于Web系统的技术也变得非常重要。我们更新了关于万维网那一章的内容宋反映这种趋势,这是通过以下方式来实现的:在ATAM和用组件构建系统这两章中,使用了基于Web的示例;用Enterprise Java Beans(EJB)代替了关于公共对象请求代理(CORBA)的案例分析;介绍了—个无线EJB系统的案例分析,该系统设计用于支持面向维护技师的可佩戴计算机。
最后,我们增加了一章对构架的财务方面进行了更深入的论述。在本章中,我们介绍了CBAM(成本收益分析方法)。在制定构架决策时,除了考虑以前讨论的技术准则外,我们还要使用此方法考虑经济准则。
与第1版相同,本书的主题仍然是构架商业周期(ABC)。所有的案例分析均根据推动系统设计的质量目标以及系统的构架如何实现这些目标来进行描述。
编写第2版时,我们非常清楚本书的主要读者仍然是专业人员,因此本书重点仍然集中于我们认为适用于许多行业,并期望将来可应用的内容上。
我们希望您像我们乐于编写这本书—样,喜欢阅读本书。