软件架构设计是降低成本、改进质量、按时和按需交付产品的关键因素。需要注意的是,软件架构设计与系统需求是直交的,两者并无必然联系。
1.演变交付生命周期
在生命周期模型中,架构设计就是从初步的需求分析开始逐步进行循环迭代。即:一方面在了解系统需求前,不能开始设计架构;另一方面,刚开始进行设计架构时并不需要等到全部需求都收集到。
2.属性驱动设计法
ADD是一种定义软件架构的方法,该方法将分解过程建立在软件必须满足的质量属性之上。ADD 的输入为:功能需求(一般表示为用例)、限制条件和质量需求(一组特定于系统的质量场景)。
3.按架构组织开发团队
每个模块都构成自己的小领域(专门知识或专门技术),并与其他模块的接口清晰,不同的模块分到不同的开发小组中,减少沟通成本
4.开发骨架系统
以架构为指导,开发一个可运行的原型(骨架系统);在其上进行增量开发,直到软件开发完成。
5.利用商用构件进行开发
例如使用 J2EE/EJB 进行开发面向对象的分布式系统。
记录软件架构的活动就是架构编档过程,也就是架构的文档化。它包含两个方面:一是过程,编档过程能促使架构设计师进一步思考,使得架构更加完善;二是结果,描述架构的文档将作为架构开发的成果,供项目关系人使用
1.架构文档的使用者
架构的主要用途是充当项目关系人之间进行交流的工具,文档则促进了这种交流
2.合理的编档规则
(1)从读者的角度编写文档。
(2)避免出现不必要的重复。
(3)避免歧义。
(4)使用标准结构。
(5)记录基本原理。
(6)使文档保持更新,但更新频率不要过高。
(7)针对目标的适宜性对文档进行评审。
3.视图编档
视图的概念为架构设计师提供了进行软件架构编档的基本原则。架构文档化就是将相关视图编成文档,并补充多个视图的关联关系。
4.跨视图文档:对文档进行一个整体的“打包”工作
5.使用 UML:在视图文档的组织结构中,UML 主要用于表示元素或元素组的行为。
6.软件架构重构:反向工程之一,用于文档丢失时
由以下活动以迭代方式进行:
(1)信息提取(View Extraction)。可以使用各种工具进行信息提取,如解析器、语法分析器等;
(2)数据库构造(Database Construction):将提取的信息转化为标准的形式,并置于数据库中。
(3)视图融合(View Fusion):将数据库中的信息组合在一起,生成该架构的一个内聚的视图。
(4)重构(Reconstruction):构建数据抽象和各种表示以生成架构表示,主要由两个活动组成:可视化和交互、模式定义和识别。最后生成需要的架构文档(Documentation)。
架构描述语言(ADL) 是一种为明确说明软件系统的概念架构和对这些概念架构建模提供功能的语言。ADL主要包括以下组成部分:组件、组件接口、连接件和架构配置。ADL对连接件的重视成为区分ADL和其他建模语言的重要特征之一。
软件架构评估是在对架构分析、评估的基础上,对架构策略的选取进行决策。它也可以灵活地运用于对软件架构进行评审等工作中。
记录-回放主要提高系统的可测试性
(1)基于调查问卷或检查表的方式:其缺点是在很大程度上依赖于评估人员的主观推断。
(2)基于场景的方式: 通过分析软件架构对场景(也就是对系统的使用或修改活动)的支持程度,从而判断该架构对这一场景所代表的质量需求的满足程度。
(3)基于度量的方式:它是建立在软件架构度量的基础上的,能提供更为客观和量化的质量评估,但它对评估人员及其使用的技术有较高的要求。ATAM 中也使用了度量的思想(度量效用)。
构件的定义:软件构件是一种组装单元,它具有规范的接口规约和显式的语境依赖。软件构件可以被独立地部署并由第三方任意地组装。
构件组装成系统的过程:定制、集成、扩展
构件的特性:
面向构件的编程(COP)关注于如何支持建立面向构件的解决方案。基于一般OOP风格,面向构件的编程需要下列基本的支持:
基于构件的开发模型: 利用模块化方法将整个系统模块化,并在一定构件模型的支持下复用构件库中的一个或多个软件构件,通过组合手段高效率、高质量地构造应用软件系统的过程。基于构件的开发模型融合了螺旋模型的许多特征,本质上是演化形的,开发过程是迭代的。基于构件的开发模型由软件的需求分析定义、体系结构设计、构件库建立、应用软件构建以及测试和发布5个阶段组成。
在基于构件的开发中,构件包含并扩展了模块化程序设计中子程序、面向对象系统中对象或类和系统模型中包的思想,它是系统设计、实现和维护的基础。构件定义为通过接口访问服务的一个独立可交付的功能单元。
在基于构件的软件开发中,逻辑构件模型用功能包描述系统的抽象设计,用接口描述每个服务集合,以及功能之间如何交互以满足用户需求,它作为系统的设计蓝图以保证系统提供适当的功能。物理构件模型用技术设施产品、硬件分布和拓扑结构,以及用于绑定的网络和通信协议描述系统的物理设计,这种架构用于了解系统的性能、吞吐率等许多非功能性属性。
指一组软件密集型系统,它们共享一个公共的、可管理的特性集,满足某个特定市场或任务的具体需要,是以规定的方式用公共的核心资产集成开发出来的。
围绕核心资产库进行管理、复用、集成新的系统。核心资产库包括软件架构及其可剪裁的元素,更广泛地,它还包括设计方案及其文档、用户手册、项目管理的历史记录(如预算和进度)、软件测试计划和测试用例。
可复用的资产:
软件产品线架构是针对一系列产品而设计的通用架构,并在此基础上,进一步将系列产品共用的模块事先实现,供直接重用;将架构用框架的形式予以实现,供定制使用。这就是通常所说的“平台”。
(1)产品线架构必须考虑一系列明确许可的变化;
(2)产品线架构一定要文档化;
(3)产品线架构必须提供“产品创建者指南”(开发指南),描述架构的实例化过程。
(1)“ 前瞻性 ” 产品线: 利用在应用领域的经验、对市场和技术发展趋势的了解及商业判断力等进行产品线设计,它反映了企业的战略决策。通常是 自上而下地采用产品线方法。
(2)“ 反应性 ” 模型: 企业根据以前的产品构建产品家族,并随着新产品的开发,扩展架构和设计方案,它的核心资产库是根据“已经证明”为共有、而非“预先计划”为共有的元素构建的。通常是 自下而上地采用产品线方法。
一旦确定了产品线,就进入其演变阶段,它是产品线不断向前的发展过程
架构的本质在于其抽象性。它包括两个方面的抽象:业务抽象和技术抽象。其中业务抽象面向特定的应用领域。
特定领域软件架构(Domain Specific Software Architecture,DSSA)可以看做开发产品线的一个方法(或理论),它的目标就是支持在一个特定领域中有多个应用的生成。DSSA以一个特定问题领域为对象,形成由领域参考模型、参考需求、参考架构等组成的开发基础架构。
基本活动:
DSSA人员角色:
从功能覆盖的范围角度理解 DSSA 中领域的含义有两种方法:
(1)垂直域。 定义了一个特定的系统族,导出在该领域中可作为系统的可行解决方案的一个通用软件架构。
(2)水平域。 定义了在多个系统和多个系统族中功能区域的共有部分,在子系统级上涵盖多个系统(族)的特定部分功能。
三层次模型:
ABSD方法是架构驱动,即强调由业务、质量和功能需求的组合驱动架构设计。很好的支持软件重用。它强调采用视角和视图来描述软件架构,采用用例和质量属性场景来描述需求。
使用ABSD方法,设计活动可以从项目总体功能框架明确开始,这意味着需求获取和分析还没有完成就开始了软件设计。
有三个基础:
ABSD模型把整个软件过程划分为:架构需求、设计、文档化、复审、实现、演化
架构实现过程与架构演化过程
所谓实现就是要用实体来显示出一个软件架构,即要符合架构所描述的结构性设计决策,分割成规定的构件,按规定方式互相交互。