北京大学软件工程国家工程研究中心 建设概要.ppt
《北京大学软件工程国家工程研究中心 建设概要.ppt》由会员分享,可在线阅读,更多相关《北京大学软件工程国家工程研究中心 建设概要.ppt(135页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、软件体系结构(Software Architecture),讲义九:软件框架构造技术及案例分析,内 容,软件框架概述软件框架研究现状实例研究San Francisco商业开发平台,软件构造技术的发展,创造性的活动,60年代,汇编语言,结构化方法,70年代,面向功能,面向数据,面向对象方法,80年代,软件复用,基于构件方法,软件复用进一步发展,软件复用成为软件构造技术的研究热点,软件复用技术(1/2),软件复用是提高软件生产力和质量的一种技术,将已有软件的各种有关知识用于构造新的软件,以缩短软件开发和维护的花费,代码级复用,领域知识、开发经验、体系结构、需求、设计等的复用,复用级别,软件复用技术
2、(2/2),依据复用的组织方式个别的(Ad-hoc)复用复用在个人系统化的(Systematic)复用定义了复用过程和指南项目级别、特定领域抽象级别较高的产品复用系统化复用对于提高软件的质量和生产率具有更大的作用,也有较大的风险,软件框架概念的出现,Smalltalk-80开发环境中的框架Model-View-Controller (MVC),被认为是第一个得到广泛应用的框架Apple Inc. User Interface Framework之后出现了一系列框架产品:Interview,ET+,Fire alarm system, (Taligent) CommonPoint, (IBM)S
3、an Francisco等等许多学者,包括Johnson, Pree, Bosch等对框架,尤其是面向对象框架展开了大量研究,包括框架设计、框架实现、框架描述、框架复用、框架演化等,软件框架的概念,软件框架的定义和描述定义1 一个框架由一组协作类组成,阐明了整个设计、类间依赖及成员类的责任分布。杨芙清,97定义2 一个框架是有意义的相互协作的类的集合,它能够同时表达针对一个特定领域实现公共的需求和设计所需要的小尺度模式和主要机制。Firesmith, 94定义3 框架是一种微体系结构,为特定领域内的软件系统提供未完全实现的模板。Jacobson, Booch, 99定义4 框架是指一个部分完成
4、的软件(子)系统,它将要被进一步实例化。框架定义了一个软件系统族的体系结构,并且提供了基本构造单元。框架同时定义了针对特定的功能,需要在哪里进行调整和修改。Buschmann, 96定义5 一个框架是一个类的集合,它体现了针对解决相关问题家族的抽象设计。Jacobson, Foot, 88定义6 一个应用框架,也称为类属应用(Generic applications),是为特定应用领域提供可复用结构的协作类集合。Gamma, 95,软件框架的概念(续),框架反映了一个领域内应用的软件体系结构,包括其组成成分、关系以及约束框架同时定义了针对特定的功能需要在哪里进行调整和修改因此,软件框架1. 提
5、供了创建具体应用的基本构造单元。2. 是一个部分完成的软件(子)系统,它将要被进一步实例化。,框架的分类,框架的分类根据应用范围分类基础设施框架:GUI框架、语言处理框架中间件集成框架:ORB框架、消息中间件企业应用框架:San Francisco根据复用方式分类白盒框架:MFC黑盒框架:Avalon项目,框架的特性部分实现,逐步实现,逐步具体化,DSSA 框架 应用,DSSA是框架的高层设计,框架是抽象应用,框架的特性“反向控制”,Hollywood Principle: Dont call us. Well call you.,框架的特性固定点和扩展点,对于面向对象框架而言,扩展点是抽象类
6、,框架特性,相关概念,领域工程框架体现了特定领域的需求,抽象了特定领域中一组应用系统的共性,因此领域分析是一种得到领域知识的较理想的方法产品线应用框架是软件产品线核心资产库的重要组成部分,框架的设计和生产属于产品线核心资产库建设的范畴构件库从软件构造的角度来讲,框架是一种大粒度的构件。框架与构件库的区别框架不仅仅是类的简单集合,而且定义了一个领域通用的高层设计构件库的结构建立于构件分类基础之上,而框架则直接反映了问题域的结构,相关概念,框架和体系结构框架决定了应用系统的体系结构一个框架可以被实例化成为多个应用系统,每个应用系统具有特定的体系结构,因此框架从框架使用的角度来看,框架和体系结构之间
7、存在着1对多(1:N)的关系从框架开发的角度来看,框架反映了一个领域的体系结构(DSSA),它是DSSA的一个实例,因此,DSSA和框架之间同样存在着1对多(1:N)的关系从在软件开发过程中所起的作用而言,体系结构是软件的高层设计抽象,它有助于系统开发团队之间的交流DSSA是可以视为“参考”体系结构,对于领域内应用系统体系结构的设计具有指导意义而开发框架最重要的目的则是针对特定领域的设计和代码复用,相关概念,应用体系结构、DSSA,Application(N),Architecture(N),DSSA(1),Framework,1,1,1,n,实例化,领域工程,n,1,n,1,相关概念,框架和
8、软件开发过程框架在整个软件开发过程中属于资产库建设的范畴,是领域设计和领域实现的重要制品之一基于框架的软件开发活动可以分为框架的设计和开发框架开发阶段基于框架定制应用系统框架使用阶段框架演化和维护阶段设计和开发一个框架成本高,但是通过复用带来的效益也更加显著框架本身是可复用资产,也有助于实现扩展部分的复用,相关概念,框架和设计模式从粒度上看,设计模式要小于框架,一个框架可以包括多个设计模式,但是设计模式不可能包括框架框架要比设计模式更加特化,框架总是与特定的应用领域相关,而通常设计模式更加普通,可以应用任何的应用领域框架的设计、实现以及描述利用了设计模式,相关概念,框架与变化性控制框架体现了领
9、域共性通过扩展点支持变化性,应用程序,框架,构件,构件,构件,构件,构件,构件,构件,领域不变部分,可变部分,内容,软件框架概念软件框架构造技术实例研究San Francisco商业开发平台,软件框架构造技术,软件框架的开发过程模型开发过程中的相关技术研究领域分析扩展点设计框架实现和测试框架的描述框架的测试和维护框架的演化白盒黑盒框架Visual Builder,框架的开发,软件框架的开发过程模型,领域分析,领域模型,DSSA,标识变化性,捕获框架需求,识别框架问题域内的扩展点和固定点,框架设计,框架SA设计,扩展点设计,固定点设计,框架实现和测试,框架文档化,应用分析,应用设计,应用实现,新
10、的需求、需求变化或更好的领域理解,框架文档,领域分析共性和变化性,当在某个领域而不是单个系统考虑问题时,就会发现一些特性是领域中所有系统共同具有的,而其它特性只是个别系统具有所有系统都具有的特性是该领域中系统的本质特性,体现为该领域中系统的共性只是部分或者个别系统具有的特性则体现为领域中系统的变化性,变化性分类,时间上的变化性和空间上的变化性时间上的变化性:产品随着时间的变化解决产品的演化问题空间上的变化性:产品家族中产品间的区别解决产品的复用问题问题域的变化性和解空间的变化性问题域的变化性主要来自于业务领域、客户、用户对领域应用系统需求的变化业务策略:实现什么功能?解空间的变化来自于系统设计
11、、实现技术、系统运行环境的变化实现机制:怎样实现功能?,变化性分类(续),变化性模式必须的(Mandatory)需求:所有现有系统都具有这类需求可选的(Optional)需求:部分现有系统具有这类需求,并非全部系统都具有多选一的(Alternative):只能从多个变化项选择其中一个满足需求,这些变化项存在互斥关系多选多的(Multiple Parallel Variability):这些变化性之间不存在互斥的关系,可以同时存在变化性维度组织机构、数据、功能、过程问题域实现技术解空间,扩展点(1/3),为什么需要扩展点支持应用领域的变化性提高框架的灵活性提高框架的可复用性什么是扩展点扩展点是软
12、件框架中针对应用需求的、支持适应性变更的的扩展机制扩展点是定义良好的框架特性,可以通过特例化或者组装等扩展机制来满足特定应用的需求,扩展点OOF,面向对象框架中主要使用以下技术实现扩展功能继承组合委托参数化,扩展点OOF(续),模板方法(Template method):定义不变流程调用钩子方法实现共性的领域知识,钩子方法(Hook method):定义变化的部分实现特定应用的特殊需求定义为抽象方法,扩展点OOF(续),元模式,T,H,hook,1:1 Connection Pattern,T,H,hooks,1:N Connection Pattern,T,H,hook,1:1 Recurs
13、ive Connection Pattern,T,H,hooks,1:N Recursive Connection Pattern,TH,hook,1:1 Recursive Unification Pattern,TH,hook,1:N Recursive Unification Pattern,TH,Unification Pattern,扩展点CBF,构件接口调用接口定义和实现的分离支持构件功能的特定行为、算法和实现插件支持特定算法和行为的动态加载和执行构件的参数化支持构件对事件和状态变化的响应,扩展点CBF,插座插件,模板,抽象构件,外观,扩展点CBF,构件组装参数化组装:运行参数、配
14、置文件、脚本程序消息机制:消息中间件代理:桩方式、适配器、容器、Web Service机制,扩展点CBF,脚本,消息机制,Web Services,容器,小结OOF和CBF的不同,面向对象框架机制:面向对象技术的多态和继承机制复用方式:通过继承框架中的抽象类来完成特定行为的定制,白盒复用问题:框架的过度增值、脆弱的基类和隐式体系结构基于构件的框架机制:构件接口调用、构件组装等复用方式:通过一些集成机制得到对象或者构件的不同组装,来定义特定行为的,黑盒复用,框架描述语言(1/6),框架文档必须包含的内容框架的目的明确框架针对的问题域,以及框架为问题域的哪些问题提供了解决方案如何使用框架框架得到正
15、确使用并发挥最优效果的关键所在应用实例阅读实例是理解框架主要结构的方法框架使用者可以从一组实例中看出框架的边界和不足框架的设计描述表达框架的整体体系结构和扩展点的设计细节,框架描述语言(2/6),Cook Book途径类似“菜谱”的、一步一步讲述如何使用框架使用自然语言,举例说明框架的使用,易于理解对框架设计的描述不充分MVC Cook Book方法、 MacApp Cook Book方法、 Active Cook Book方法,框架描述语言(3/6),模式途径主题(Motif)方法每一个主题描述一个待解决的问题,给出不同的解决方案适合描述框架如何被使用面向对象设计模式方法面向对象设计模式描述
16、了部分的面向对象设计,并不适合表达一个面向对象框架的完整设计,框架描述语言(4/6),结构化语言途径框架描述语言(FDL)类似于C+函数说明形式化的框架实现语言以及实现模板没有给出框架的设计描述基于XML语言比较全面地给出了框架中的关键实体、实体的性质以及实体之间的关系对框架如何使用的描述不充分,框架描述语言(5/6),UML扩展途径UML-F采用一系列布尔类型的标识值来描述面向对象框架中的三种变化点:可变方法、可扩展类和可扩展接口variable标记值表示可变方法extensible标记值表示可扩展类dynamic和static标记值分别表示运行时配置或者非运行时配置的需求appl-clas
17、s标记值表明一个类是否特定于应用incomplete用来表示可扩展接口,框架描述语言(6/6),框架描述途径比较,框架的测试(1),框架测试的主要目的是验证开发完成的框架是否满足领域分析阶段的需求测试活动:单元测试:针对固定点集成测试:框架是否覆盖了所针对的领域构件之间的协作是否正确框架扩展点实现是否正确 除了框架本身的测试,框架文档也是其中重要测试内容,需要验证框架文档是否正确的描述了框架扩展点,框架的测试(2),由于框架是针对复用开发的软件制品,它并不是完整的应用系统,因此在进行测试时,需要采取以下策略:通过开发驱动模块调用框架接口,测试框架对外提供的功能在进行集成测试时,最有效的措施就是
18、在领域中选择一个有代表性的应用系统进行构造,测试基于框架能否完成目标系统,即框架的可复用性。从这个角度来看,框架的复用过程也是框架的测试过程,一个被复用多次的框架,其正确性将有显著提高,框架的维护(1),框架维护首要的目标是通过改善框架结构,提高框架性能以及可复用性,即完善性维护,原因:框架作为一种可复用资产,内部错误比例将随着不断复用大大降低框架是针对特定领域的,其设计已经考虑了变化性,具有较高的灵活性,可以通过框架扩展以实现需求的变化,框架的维护(2),一系列重构(Refactoring)活动有助于实现框架的完善性维护,所谓重构,是指在不改变可观察行为的前提下,对软件内部结构的改变,目的是
19、使它更易于理解并且能够更廉价地进行改变针对面向对象的软件框架,Opd92OJ93中总结了三类高层的重构方式抽象类重构:为具有一部分相同属性的类C1和C2创建一个抽象基类 子类重构:将一个复杂的类分解成几个小一点的具体类和一个表达抽象的基类 聚合类重构:识别聚积和部件,框架的演化(1/2),应用框架的演化过程模型,框架的演化(2/2),框架演化过程中需要考虑的问题:识别具有演化趋势的模块识别框架各版本之间改动较多的模块,这些模块应该是下一个版本中最可能被重构的模块确定框架发布的适当时间避免由于已发布的产品不符合功能和质量需求而造成的不必要的维护费用变化影响分析框架的演化对下一个版本的影响和基于前
20、一个版本开发的应用的影响,变化影响分析结果可用来预测框架演化带来的维护工作量需求管理预测增加新的需求的成本,决定是否在框架实例或新版本框架中加入新需求,框架构造原则,单一责任原则开放-封闭原则Liskov替换原则依赖倒置原则接口隔离原则,单一职责原则(SRP),内容就一个类而言,应该仅有一个引起 它变化的原因,这条原则被称为内聚性原则。一般地,内聚性是指一个模块组成元素之间的功能相关性。 在本条原则中,把内聚性和引起一个模块或类的改变的作用联系起来。,为了理解这一原则,首先要回答什么是职责?在SRP中,把职责定义为:引起变化的理由a reason of change)。根据这一定义,显然可知:
21、如果能够想到多个(1)动机来改变一个类,那么这个类就具有多于一个的职责。实践中,人们很习惯以“组”的形式来考虑类的职责。例如: 一个接口“调制解调器”有四个功能:interface modem public void dial (string pno); public void hangup ( ); public void send (char c); public void recv ( ); ,这显然违背了SRP原则!原因是,根据职责的定义,可以认为该接口有两个职责:连接处理 public void dial (string pno); public void hangup ( );数据
22、通信 public void send (char c); public void recv ( );是否将这2个职责分离取决于应用程序变化的方式:如果应用程序的变化会影响连接函数的声明(signature), 那么调用send和recv就必须重新编译,因此应分离这两种职责。如果应用程序的变化总是导致这两个职责同时变化,那么就不必分离这两种职责。,耦合职责的分离就上一个例子而言,可以把2个职责分离为:,其中,可以把ModemImpiementation类看作是一个杂凑物(kludge),通过分离它们的接口,解耦了概念。所有的依赖关系都与ModemImpiementation类无关。除了main
23、外,谁也不知道它的存在。,持久化问题- 左图给出了一种常见的违反该原则的情况其中,类Employee包含了业务规则和持久性控制。这2个职责在多数情况下不应该合在一起。因为业务规则往往会不断的变化,并且变化的原因也各不相同。处理:1)测试驱动的开发实践,往往会避免这种情况发生,即迫使对这2种职责进行分离。2)如果出现了这种情况,可以使用FAADE和 PROXY模式对设计进行重构,分离这2种职责。,结论SRP是最简单的一个原则,但也是最难运用的原则之一;在设计中,人们会自然地把职责合在一起;软件设计真正要做的许多内容,就是发现职责,并把这些职责相互分离。本质上,其它原则都是以这种或那种方式回答第3
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 北京大学 北大 软件工程 国家 工程 研究中心 建设 概要
限制150内