第7章基于体系结构的软件开发本章结构7.1设计模式7.2基于体系结构的设计方法7.3体系结构的设计和演化7.4基于体系结构的软件开发模型7.5应用开发实例7.6基于体系结构的软件过程7.7软件体系结构演化模型第7章基于体系结构的软件开发7.2基于体系结构的设计方法◇有关概念ABSD方法为产生软件系统的概念体系结构提供构造,概念体系结构是由Hofimeister、Nord和Soni提出的四种不同的体系结构中的一种,它描述了系统的主要设计元素及其关系。概念体系结构代表了在开发过程中作出的第一个选择,相应地,它是达到系统质量和商业目标的关键,为达到预定功能提供了一个基础。体系结构驱动,是指构成体系结构的商业、质量和功能需求的组合。使用ABSD方法,设计活动可以在体系结构驱动一决定就开始,这意味着需求抽取和分析还没有完成,就开始了软件设计。设计活动的开始并不意味着需求抽取和分析活动就可以终止,而是应该与设计活动并行。特别是在不可能预先决定所有需求时,例如产品线系统或长期运行的系统,快速开始设计是至关重要的。第7章基于体系结构的软件开发7.2基于体系结构的设计方法◇有关概念ABSD方法有三个基础:(1)功能的分解。使用已有的基于模块的内聚和耦合技术。(2)通过选择体系结构风格来实现质量和商业需求。(3)软件模板的使用。ABSD方法是递归的,且迭代的每一个步骤都是清晰地定义的。因此,不管设计是否完成,体系结构总是清晰的,这有助于降低体系结构设计的随意性。第7章基于体系结构的软件开发7.2基于体系结构的设计方法◇有关概念软件模板是一个特殊类型的软件元素,包括描述所有这种类型的元素在共享服务和底层构造的基础上如何进行交互。软件模板还包括属于这种类型的所有元素的功能,这些功能的例子有:每个元素必须记录某些重大事件,每个元素必须为运行期间的外部诊断提供测试点等。第7章基于体系结构的软件开发7.2基于体系结构的设计方法◇有关概念设计元素系统模板概念构件概念子系统模板实际构件图示聚合继承进化第7章基于体系结构的软件开发7.2基于体系结构的设计方法◇有关概念考虑体系结构时,重要的是从不同的视角来检查,这促使软件设计师考虑体系结构的不同属性。如:静态视角/动态视角选择的特定视角或视图也就是逻辑视图、进程视图、实现视图和配置视图。第7章基于体系结构的软件开发7.2基于体系结构的设计方法◇有关概念在使用用例捕获功能需求的同时,我们通过定义特定场景来捕获质量需求,并称这些场景为质量场景。这样一来,在一般的软件开发过程中,我们使用质量场景捕获变更、性能、可靠性和交互性,分别称之为变更场景、性能场景、可靠性场景和交互性场景。质量场景必须包括预期的和非预期的刺激。例如,一个预期的性能场景是估计每年用户数量增加10%的影响,一个非预期的场景是估计每年用户数量增加100%的影响。非预期场景可能不能真正实现,但它们在决定设计的边界条件时很有用。第7章基于体系结构的软件开发7.2基于体系结构的设计方法◇ABSD方法与生命周期商业用例软件设计师的经验遗留系统抽象构件软件模板约束需求功能需求抽象用例质量需求抽象质量因素体系结构选项约束需求分析ABSD方法实际构件设计ABSD方法的输入由下列部分组成:①抽象功能需求,包括变化的需求和通用的需求。②用例(实际功能需求)。③抽象的质量和商业需求。④质量因素(实际质量和商业需求)。⑤体系结构选项。⑥约束。第7章基于体系结构的软件开发7.2基于体系结构的设计方法◇ABSD方法的步骤1、ABSD方法定义的设计元素系统模板概念构件概念子系统模板实际构件图示聚合继承进化第7章基于体系结构的软件开发7.2基于体系结构的设计方法◇ABSD方法的步骤2、设计元素的产生顺序ABC设计元素的产生顺序可以看作是对元素树的遍历过程。树的遍历过程:深度优先/广度优先对于一个特定开发来说,决定遍历设计元素树的考虑有:1.领域知识2.新技术的融合3.体系结构设计团队的个人经验第7章基于体系结构的软件开发7.2基于体系结构的设计方法◇ABSD方法的步骤3、设计元素的活动定义逻辑视图校验质量因素和约束定义配置视图定义并发视图第7章基于体系结构的软件开发7.2基于体系结构的设计方法◇ABSD方法的步骤定义逻辑视图功能分解选择基本体系结构风格为体系结构分配功能提炼模板用用例和变化因素进行校验第7章基于体系结构的软件开发7.2基于体系结构的设计方法◇ABSD方法的步骤某系统的逻辑视图用户界面子系统服务1子系统用户界面页服务1用户界面页服务2服务2子系统操作系统子系统网络子系统图注:数据流第7章基于体系结构的软件开发7.2基于体系结构的设计方法◇ABSD方法的步骤(1)功能分解一个设计元素有一组功能,这些功能必须分组。分解的目的是使每个组在体系结构内代表独立的元素。分解可以进一步细化。这种分解的标准取决于对一个特定的设计元素来说是很重要的性能。在不同的性能基础上,可以进行多重分解。如果象通常的产品一样,在分解中起关键作用的性能要求是可修改的,则功能的分组可选择几个标准:(1)功能聚合。(2)数据或计算行为的类似模式。(3)类似的抽象级别。(4)功能的局部性。第7章基于体系结构的软件开发7.2基于体系结构的设计方法◇ABSD方法的步骤(2)选择体系结构风格每个设计元素有一个主要的体系结构风格或模式,这是设计元素如何完成它的功能的基础。主要风格并不是唯一风格,为了达到特定目的,可以进行修改。体系结构风格的选择建立在设计元素的体系结构驱动基础上。在软件设计过程中,并不总是有现成的体系结构风格可供选择为主要的体系结构风格。一旦选定了一个主要的体系结构风格,该风格必须适应基于属于这个设计元素的质量需求,体系结构选择必须满足质量需求。为设计元素选择体系结构风格是一个重要的选择,这种选择在很大程度上依赖于软件设计师的个人设计经验。第7章基于体系结构的软件开发7.2基于体系结构的设计方法◇ABSD方法的步骤(3)为风格分配功能选择体系结构风格时产生了一组构件类型,我们必须决定这些类型的数量和每个类型的功能,这就是分配的目的。在功能分解时产生的功能组,应该分配给选择体系结构风格时产生的构件类型,这包括决定将存在多少个每个构件类型的实例,每个实例将完成什么功能。这样分配后产生的构件将作为设计元素分解的子设计元素。每个设计元素的概念接口也必须得到标识,这个接口包含了设计元素所需的信息和在已经定义了的体系结构风格内的每个构件类型所需要的数据和控制流。第7章基于体系结构的软件开发7.2基于体系结构的设计方法◇ABSD方法的步骤(4)细化模板被分解的设计元素有一组属于它的模板。在ABSD方法的初期,系统没有模板。当模板细化了以后,就要把功能增加上去。这些功能必须由实际构件在设计过程中加以实现。最后,需要检查模板的功能,以判断是否需要增加附加功能到系统任何地方的设计元素中。也就是说,要识别在该级别上已经存在的任何横向服务。模板包括了什么是一个好的设计元素和那些应该共享的功能。每种类型的功能可以需要附加支持功能,这种附加功能一旦得到识别,就要进行分配。第7章基于体系结构的软件开发7.2基于体系结构的设计方法◇ABSD方法的步骤(5)功能校验用例用来验证他们通过有目的的结构能够达到。子设计元素的附加功能将可能通过用例的使用得到判断。然而,如果用例被广泛地使用于功能分解的过程中,将几乎不能发现附加功能。也可以使用变化因素,因为执行一个变化的难点取决于功能的分解。从这种类型的校验出发,设计就是显示需求(通过用例)和支持修改(通过变化因素)。第7章基于体系结构的软件开发7.2基于体系结构的设计方法◇ABSD方法的步骤(6)创建并发视图检查并发视图的目的是判断哪些活动是可以并发执行的。这些活动必须得到识别,产生进程同步和资源竞争。对并发视图的检查是通过虚拟进程来实现的。虚拟进程是通过程序、动态模块或一些其他的控制流执行的一条单独路径。虚拟进程与操作系统的进程概念不一样,操作系统的进程包括了额外的地址空间的分配和调度策略。一个操作系统进程是几个虚拟进程的连接点,但每个虚拟进程不一定都是操作系统进程。虚拟进程用来描述活动序列,使同步或资源竞争可以在多个虚拟进程之间进行。第7章基于体系结构的软件开发7.2基于体系结构的设计方法◇ABSD方法的步骤(6)创建并发视图图注:控制线程开始诊断例程命令服务1用户界面处理(服务2)计时服务初始化用户界面处理(服务1)命令服务2第7章基于体系结构的软件开发7.2基于体系结构的设计方法◇ABSD方法的步骤(7)创建配置视图如果在一个系统中,使用了多个处理器,则需要对不同的处理器配置设计元素,这种配置通过配置视图来进行检查。例如,我们检查网络对虚拟线程的影响,一个虚拟线程可以通过网络从一个处理器传递到另一个处理器。我们使用物理线程来描述在某个特定处理器中的线程。也就是说,一个虚拟线程是由若干个物理线程串联而成的。通过这种视图,我们可以发现一个单一的处理器上的同步的物理线程和把一个虚拟线程从一个处理器传递到其他处理器上的需求。第7章基于体系结构的软件开发7.2基于体系结构的设计方法◇ABSD方法的步骤(7)创建配置视图服务1子系统用户界面页服务1用户界面页服务2服务2子系统操作系统子系统网络子系统图注:控制线程操作系统服务2服务1用户界面页服务2用户界面页服务1概念子系统配置单元第7章基于体系结构的软件开发7.2基于体系结构的设计方法◇ABSD方法的步骤(8)验证质量场景一旦创建了三个视图,就要把质量场景应用到所创建的子设计元素上。对每个质量场景,都要考虑是否仍然满足需求,每个质量场景包括了一个质量属性刺激和所期望的响应。考虑到目前为止所作出的设计决策,看其是否能够达到质量属性的要求。如果不能达到,则需重新考虑设计决策,或者设计师必须接受创建质量场景失败的现实。第7章基于体系结构的软件开发7.2基于体系结构的设计方法◇ABSD方法的步骤(9)验证约束最后一步就是要验证所有的约束没有互相矛盾的地方,对每一个约束,都需提问“该约束是否有可能实现?”。一个否定的回答就意味着对应的质量场景也不能满足。这时,需要把问题记录进文档,对导致约束的决策进行重新验证。第7章基于体系结构的软件开发7.3体系结构的设计与演化◇设计和演化过程◎实验原型阶段◎演化开发阶段第7章基于体系结构的软件开发7.3体系结构的设计与演化◇设计和演化过程(1)实验原型阶段。这一阶段考虑的首要问题是要获得对系统支持的问题域的理解。为了达到这个目的,软件开发组织需要构建一系列原型,与实际的最终用户一起进行讨论和评审,这些原型应该演示和支持全局改进的实现。但是,来自用户的最终需求是很模糊的,因此,整个第一个阶段的作用是使最终系统更加精确化,有助于决定实际开发的可行性。第7章基于体系结构的软件开发7.3体系结构的设计与演化◇设计和演化过程(2)演化开发阶段。实验原型阶段的结果可以决定是否开始实现最终系统,如果可以,开发将进入第二个阶段。与实验原型阶段相比,演化开发阶段的重点放在最终产品的开发上。这时,原型即被当作系统的规格说明,又可当作系统的演示版本。这意味着演化开发阶段的重点将转移到构件的精确化。第7章基于体系结构的软件开发7.3体系结构的设计与演化◇实验原型阶段第一个开发周期没有具体的、明确的目标。此时,为了提高开发效率,缩短开发周期,所有开发人员可以分成了两个小组,一个小组创建图形用户界面,另一个小组创建一个问题域模型。两个小组要并行地工作,尽量不要发生相互牵制的现象。在第一个周期结束时,形成了两个版本,一个是图形用户界面的初始设计,另一个是问题域模型,该模型覆盖了问题域的子集。用户界面设计由水平原型表示,也就是说,运行的程序只是实现一些用户界面控制,没有实现真正的系统功能。第一个开发周期第7章基于体系结构的软件开发7.3体系结构的设计与演化第二个开发周期第二个开发周期的任务是设计和建立一个正交软件体系结构,该结构不但应具有第2节中描述的特征,还应具有以下特征:(1)必须足够灵活,不但能包含现有的元素,而且能包含新