软件架构设计培训课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《软件架构设计培训课件.ppt》由用户(ziliao2023)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件 架构 设计 培训 课件
- 资源描述:
-
1、1软件架构设计模式与实践目录软件架构视图软件生命周期与软件架构介绍架构设计的GRASP模式质量属性驱动架构设计策略软件架构模式分析及其实际运用架构设计原则面向对象的设计原则架构设计验证数据访问层设计(持久层设计)借鉴RUP中的设计流程领域模型及业务逻辑层在架构设计中的实现设计模式本质SOA的设计思想软件架构实践软件系统架构实践与剖析前言软件系统开始坏死的症状一个软件系统开始坏死时表现的症状有:硬化Rigidity系统变得越来越难以变更,修复或增添新功能的代价高昂;脆弱Fragility对系统的任何哪怕是微小的变更都可能造成四处(甚至是与变更处没有逻辑上的关联之处J崩溃;绑死Immobility
2、抽取系统的任何部分用来复用都非常困难;胶着Viscosity以与原有设计保持一致的方式来对实施变更已经非常困难,诱使开发人员绕过它选择容易但有害的途径,其结果却使系统死的更快。什么是软件架构什么是软件架构 软件架构的概念很混乱。如果你问五个不同的人,可能会得到五种不同的答案。软件架构概念主要分为两大流派:组成派:软件架构=组件+交互。决策派:软件架构=重要决策集。组成派和决策派的概念相辅相成。软件架构要层次化并隔离关注点 复杂性是层次化的。-人月神话 好的架构设计必须把变化点错落有致地封装到软件系统的不同部分(即关注点分离)。通过关注点分离,达到“系统中的一部分发生了变化,不会影响其他部分”的
3、目标。软件单元的粒度:粒度最小的单元通常是“类”。几个类紧密协作形成“模块”。完成相对独立的功能的多个模块构成了“子系统”。多个子系统相互配合才能满足一个完整应用的需求,从而构成了软件“系统”。一个大型企业往往使用多套系统,多套系统通过互操作形成“集成系统”。软件单元的粒度是相对的。同一个软件单元,在不同场景下我们会以不同的粒度看待它。架构(Architecture)与框架(Framework)。框架只是一种特殊的软件,框架也有架构。可以通过架构框架化达到“架构重用”的目的,如很多人都在用 Spring 框架提供的控制反转和依赖注入来构建自己的架构。软件架构的作用 如果一个项目的系统架构(包括
4、理论基础)尚未确定,就不应该进行此系统的全面开发。-Barry Boehm,Engineering Context 一个缺陷充斥的系统,将始终是一个缺陷充斥的系统。-Timothy C.Lethbridge,面向对象软件工程 软件架构设计为什么这么难?因为它是跨越现实世界与计算机世界之间鸿沟的一座桥。软件架构设计要完成从面向业务到面向技术的转换,在鸿沟上架起一座桥梁。需求-架构设计-软件架构-系统开发-软件系统软件架构对新产品开发的作用:上承业务目标。上承业务目标。下接技术决策。下接技术决策。控制复杂性。控制复杂性。先进行架构设计,后进行详细设计和编码实现,符合“基于问题深度分而治之”的理念。
5、组织开发。组织开发。软件架构方案在小组中间扮演了“桥梁”和“合作契约”的作用。利于迭代开发和增量交付。利于迭代开发和增量交付。以架构为中心进行开发,为增量交付提供了良好的基础。在架构经过验证之后,可以专注于功能的增量提交。提高质量。提高质量。软件产品线软件产品线:指具有一组可管理的、公共特性的、软件密集性系统的集合,这些系统满足特定的市场需求或任务需求,并且按照预定义方式从一个公共的核心资产集开发得到。软件产品线架构软件产品线架构:针对一个公司或组织内的一系列产品而设计的通用架构。软件架构对软件产品线开发的作用:固化核心知识;提供可重用资产;缩短推出产品的周期;降低开发和维护成本;提高产品质量
6、;支持批量定制;架构师应当为项目相关的不同角色而设计:架构师要为客户负责,满足他们的业务目标和约束条件。架构师要为用户负责,满足他们关心的功能需求和运行期质量属性。架构师必须顾及处于协作分工“下游”的开发人员。架构师必须考虑“周边”的管理人员,为他们进行分工管理、协调控制和评估监控等工作提供清晰的基础。软件架构视图让设计建模更明白、更有效张云贵2010-05-21“系统架构图”?架构设计的多重视图 从根本上来说是因为需求种类的复杂性所致。比如一个媒体发布系统:功能需求:用户可以通过浏览器浏览媒体的发布。据此初步设计出采用浏览器插件的方案;约束条件:不能影响用户浏览器的安全性;细化设计方案,需要
7、对插件进行认证,自动判别客户端是否存在,及版本比较;自动下载注册等。使用期质量属性:为保证浏览的流畅,应减少中间等待的时间,因此应对下一步需使用的媒体做预测等。制作发布期的质量保证:保证在遇到较大的媒体时能保持浏览的流畅,应在发布时将视频等流式化。软件系统的需求种类复杂什么是软件架构视图什么是软件架构视图 个架构视图是对于从某一视角或某一点上看到的系统所做的简化描述,描述中涵盖了系统的某一特定方面,而省略了于此方面无关的实体。架构要涵盖的内容和决策太多了,超过了人脑“一蹴而就”的能力范围,因此采用“分而治之”的办法从不同视角分别设计;同时,也为软件架构的理解、交流和归档提供了方便。多视图方法是
8、软件架构归档的方法,更是指导我们进行架构设计的思维方法。逻辑架构逻辑架构 逻辑架构关注功能。其设计着重考虑功能需求。开发架构开发架构 开发架构关注程序包。其设计着重考虑开发期质量属性,如可扩展性、可重用性、可移植性、易理解性和易测试性等。运行架构运行架构 运行架构关注进程、线程、对象等运行时概念,以及相关的并发、同步、通信等问题。其设计着重考虑运行期质量属性,例如性能、可伸缩性、持续可用性和安全性等。物理架构物理架构 物理架构关注软件系统最终如何安装或部署到物理机器。其设计着重考虑“安装和部署需求”。以及如何部署机器和网络来配合软件系统的可靠性、可伸缩性等要求。数据架构数据架构 数据架构关注持
9、久化数据的存储方案。设计着重考虑“数据需求”。关系逻辑视图逻辑视图。逻辑视图不仅关注用户可见的功能,还包括为实现用户功能而必须提供的“辅助功能模块”;它们可能是逻辑层、功能模块等。开发视图开发视图。开发视图关注程序包,不仅包括要编写的源程序,还包括可以直接使用的第三方SDK和现成框架、类库,以及开发的系统将运行于其上的系统软件或中间件。开发视图和逻辑视图之间可能存在一定的映射关系:比如逻辑层一般会映射到多个程序包等。运行视图运行视图。和开发视图的关系:开发视图一般偏重程序包在编译时期的静态依赖关系,而这些程序运行起来之后会表现为对象、线程、进程,运行视图比较关注的正是这些运行时单元的交互问题。
10、物理视图物理视图。和运行视图的关系:运行视图特别关注目标程序的动态执行情况,而物理视图重视目标程序的静态位置问题;物理视图是综合考虑软件系统和整个IT系统相互影响的架构视图。软件生命周期与软件架构介绍软件生命周期与软件架构介绍24软件架构师的定位系统架构师的职责:一、理解系统的业务需求,制定系统的整体框架(包括:技术框架和业务框架)二、对系统框架相关技术和业务进行培训,指导开发人员开发。并解决系统开发、运行中出现的各种问题。系统架构师的目的:对系统的重用、扩展、安全、性能、伸缩性、简洁等做系统级的把握。系统架构师能力要求:一、系统架构相关的知识和经验。二、很强的自学能力、分析能力、解决问题的能
11、力。三、写作、沟通表达、培训。25角色软件架构师Software Architect定义主导系统全局分析设计和实施、负责软件构架和关键技术决策的角色26职责 领导与协调整个项目中的技术活动(分析、设计和实施等)推动主要的技术决策,并最终表达为软件构架 确定和文档化系统的相对构架而言意义重大的方面,包括系统的需求、设计、实施和部署等“视图”确定设计元素的分组以及这些主要分组之间的接口 为技术决策提供规则,平衡各类涉众的不同关注点,化解技术风险,并保证相关决定被有效的传达和贯彻 理解、评价并接收系统需求 评价和确认软件架构的实现27专业技能技术全面、成熟练达、洞察力强、经验丰富,具备在缺乏完整信息
12、、众多问题交织一团、模糊和矛盾的情况下,迅速抓住问题要害,并做出合理的关键决定的能力。具备战略性和前瞻性思维能力,善于把握全局,能够在更高抽象级别上进行思考。对项目开发涉及的所有问题领域都有经验,包括彻底地理解项目需求,开展分析设计之类软件工程活动等。具备领导素质,以在各小组之间推进技术工作,并在项目压力下做出牢靠的关键决策。拥有优秀的沟通能力,用以进行说服、鼓励和指导等活动,并赢得项目成员的信任。28以目标导向和主动的方式来不带任何感情色彩地关注项目结果,构架师应当是项目背后的技术推动力,而非构想者或梦想家(追求完美)精通构架设计的理论、实践和工具,并掌握多种参考构架、主要的可重用构架机制和
13、模式。具备系统设计员的所有技能,但涉及面更广、抽象级别更高。29软件架构师的知识体系软件架构师作为整个软件系统结构的总设计师,其知识体系、技能和经验决定了软件系统的可靠性、安全性、可维护性、可扩展性和可移植性等方面的性能。因此一个优秀的软件架构师必须具备相当丰富的知识、技能和经验。通过对比软件架构师和系统分析师在软件开发中的职责和角色,不难发现软件架构师与系统分析师所必需的知识体系也是不尽相同的,系统分析师的主要职责是在需求分析、开发管理、运行维护等方面,而软件架构师的重点工作是在架构与设计这两个关键环节上。因此在系统分析师必须具备的知识体系中对系统的构架与设计等方面知识体系的要求就相对低些;
14、而软件架构师在需求分析、项目管理、运行维护等方面知识的要求也就相对低些。30成为一名合格的软件架构师必须具备的知识 信息系统综合知识体系 软件架构知识体系31?MFC,MSF,MOF,RUP,J2EE,Spring,SOA,JUnit,ORM,.NetMVC,UML,XML,Corba,MDA,MDD,Web-ServiceRSS,Web2.0,AJAX,Serverlet,HibernateIOC,AOPRuby On RailsRupBPELWorkflow EngineLBSOracleCMMIMQ32软件架构师在干什么?思考、思考、再思考 深入理解、准确把握建设的业务需求 分析所有可见
15、的问题、障碍、风险 充分参考已有的成功方案,降低风险交流、讨论、博弈、质疑 对构思中的方案不断提出质疑,避免漏洞 广泛听取各层面的意见,开拓思路 反复质疑、逐步完善已有的设计构思在动手实现之前验证设计方案的正确性33软件架构师的知识结构软件知识 最好要有系统开发全过程经验。对 IT 建设生命周期各个环节有深入了解,包括:系统/模块逻辑设计、物理设计、代码开发、项目管理、测试、发布、运行维护等。深入掌握1-2种主流技术平台上开发系统的方法。了解多种应用系统的结构。了解架构设计领域的主要理论、流派、框架。34软件架构师的知识结构业务知识 深入了解系统建设的业务需求。了解系统的非功能需求和运行维护需
16、求。了解企业 IT 公共设施、网络环境、外部系统。35软件架构师的思维方式基于框架的思维 架构设计的层次(Enterprise,Application,etc)IT 的生命周期(What,Why,Where,How,When,etc)成功经验以及方法论的指导合理把握技术细节 把握各个层次应有的内容 合理忽略不应有的技术细节36软件架构师的思维方式风险管理意识 采用成功经验、避免不应有的风险多方位的开放思维 多维度、多方向、包容性、避免排他性 分析、质疑、抽象、归纳 没有绝对好的架构设计,只有相对优秀的方案注意:并不存在通用的设计方法。我们认为,给定的某种固定的方法总是会顾此失彼,而且这种不平衡
17、性不太容易觉察。如果给定的某种方法所注重的方面与系统需求不吻合,则这种方法就会将设计引入歧途。所以我们给出的是一些技巧,任何一次设计过程,都需要设计师仔细分析系统的需求和相关的约束条件,灵活运用众多的设计技巧,针对不同的设计方案进行取舍,做出合理的决策。37为了有效地控制设计工作的复杂性,一般把设计活动分为总体设计和详细设计两个层次。总体设计主要关注于体系结构和接口这些全局性的内容,而详细设计主要关注于每个模块内部的数据结构和算法。至于数据,则在设计的各个层次都会涉及。软件设计是一个迭代的过程,是一个逐步细化和求精的过程。因此,总体设计和详细设计之间的划分并不是绝对的。哪些是总体设计任务,哪些
18、是详细设计任务,取决于设计师对于整个项目的把握,并没有一个统一的标准。设计师在设计时实际是在做一系列的设计决策,来满足系统的行为目标,质量目标和开发目标。如果一个结构对于完成这些目标非常重要,则它是构架的一部分。相反,如果它可以留到以后再完善,则它不是构架的组成部分。因此,总的说来,一个设计是不是属于构架设计,要看你当前的设计目标。38管理陷阱管理陷阱 随着管理性责任的增加,你所从事技术性工作的时间就会显著减少。这样,因为在完成技术性任务和保持职业技能上花费时间的减少,你可能会失去技术优势。软件架构师和管理者有很大的差异:软件架构师是直接的技术贡献者;而管理者则是通过协调其他人员的活动来间接做
19、出贡献。他们往往一起协作,构成高效的管理团队。以经验看,把两者结合起来却不能长久地工作。作为一名软件架构师,如果你已经建立起个人的职业原则的话,就有可能避免成为管理者。架构和设计应该做到何种程度软件架构必须设计到“能为开发人员提供足够的指导和限制”的程度。分而治之的两种方式 分而治之的缘由:问题太复杂了,超出了人们能够“一蹴而就”的范围。(接口和实现分离)一、先不把问题研究得那么深,那么细,浅尝辄止,见好就收。这种分而治之的方式称为“按问题深度分而治之”。二、先不研究整个问题,而是研究问题的一部分,分割问题。这种分而治之的方式称为“按问题广度分而治之”。(比如展现层、业务层和数据层的开发)40
20、随着软件设计工作越来越复杂,将架构设计和详细设计分离已成为普遍的做法。将设计分为架构设计和详细设计,是对“按问题深度分而治之”思想的运用。所谓架构设计,就是关于如何构建软件的一些最重要的设计决策;详细设计针对每个部分的内部进行设计。可以这么说,软件架构设计应当解决的是全局性的、涉及不同“局部”之间交互的设计问题,而不同“局部”的设计由后续的详细设计负责。41面对“技术复杂性”和“管理复杂性”这样的双重困难,以架构为中心的开发方法是有效的途径:一方面:“软件系统的架构涵盖了整个系统,尽管架构的有些部分可能只有一寸深”。构造一个具有一定抽象层次的解决方案,而不是将所有细节统统展开,从而有效地控制了
21、“技术复杂性”。没有“把问题研究那么深、那么细”,属于“按问题深度分而治之”42另一方面,因为“架构中包含了关于各元素应如何彼此相关的信息”,从而可以把不同模块分配给不同小组分头开发,而软件架构设计方案在这些小组中间扮演“桥梁”和“合作契约”的作用。每个小组的工作覆盖了“整个问题的一部分”,各小组之间可以互相独立地进行并行工作,这种“分割问题,各个击破”的策略,属于“按问题广度分而治之”。这样一来,模块的技术细节被局部化到了小组内部,内部的细节不会成为小组间协作沟通的主要内容,理顺了沟通的层次。另外,对“人尽其才”也有好处,不同小组的成员需要精通的技术各不相同。例如,用户界面层、数据管理层、系
22、统交互层。43架构要进行到什么程度 软件架构是团队开发的基础,应明确规定后期分头开发所必须的公共设计约定,为分头开发提供足够的指导和限制。另一方面,具体的架构设计程度还会因软件项目的不同而不同。架构设计对软件的不同部分的设计程度并不是整齐划一的。(通信机制、持久化机制、消息机制等对应的公共模块;具体的业务功能模块在架构设计中往往设计程度不深。)归纳:由于项目的不同、开发团队情况的不同,软件架构的设计程度会有不同;软件架构应当为开发人员提供足够的指导和限制。44 高来高去式架构设计的症状 不能为开发人员提供足够的指导和限制的那种架构设计方案。高来高去式架构设计现象极为普遍,危害:缺少来自架构的足
23、够的指导和限制,开发人员在进入分头开发阶段之后会碰到很多问题,并且容易造成管理混乱,沟通和协作效率低;对软件质量非常关键的全局性设计决定被拖延到分头开发期间草率决定;没有完成化解重大技术风险的职责;团队成员对架构师意见大,团队士气受到打击。45症状一:缺失重要架构视图。给团队的不同角色提供指导。症状二:架构设计方案停留在概念性架构的层面,全局性的设计决策最后由具体开发人员从局部视角考虑并确定下来,造成技术和管理上的种种问题。症状三:名不副实的分层架构。对各层之间交互接口和交互机制的设计严重不足。4647架构设计的GRASP模式4849505152535455565758596061626364
24、6566质量属性驱动架构设计策略质量属性驱动架构设计策略 软件质量及质量模型软件质量及质量模型 软件质量是一个复杂的概念,不同的人从不同的角度来看软件质量问题,会有不同的理解。从用户的角度看,质量就是满足客户的需求;从开发者的角度看,质量 就是与需求说明保持一致;从产品的角度看,质量就是 产品的内在特点;从价值的角度看,质量就是客户是否 愿意购买。在软件项目开发过程中,项目经理眼中的质量就是能“令人满意”地工作以完成预期功能的软件产品。所谓“令 人满意”,包括功能、性能、接口需求及其他指标,如可靠性、可维护性、可复用性和正确性。然而在实际工作中,一旦出现问题时,项目管理人员必须权衡利弊,作出取
25、舍,在满足某一个指标的同时,牺牲另外一个或几个指标。比如为了按期交货,需对软件功能进行分类,在第 一个版本中实现优先级较高的功能,在第二个版本中实 现优先级较低的功能。因此,项目经理需要一个对其工作有指导意义的质量模型和度量方法。该模型一方面可以帮助项目经理生产出符合标准的软件产品,另一方面帮助项目经理识别可能影响产品质量的风险。为什么那么多软件产品需要重新设计?难以维护?运行速度太慢?稳定性差?无法进行功能扩展?易遭受安全攻击?忽视包括质量属性需求在内的非功能需求是致命的。质量属性分为:运行期质量属性 开发期质量属性 各类需求架构设计的不同影响 高可移植性 对硬件和平台相关特性进行封装、隔离
展开阅读全文