案例一:圣·玛丽亚大教堂
案例二:瑞典瓦萨战舰
由建筑体系架构——>软件体系结构。
总体的系统结构设计比计算算法和数据结构更为重要。
1.软件体系结构发展史
高级语言 面向过程开发 面向对象开发 面向服务开发 云和移动服务开发 智能化软件开发。
无体系结构——>概念和理论体系形成——>理论完善且普及应用
体系结构出现:1968年北大西洋公约组织(NATO)会议上第一次出现词语“Software Architecture”(软件体系结构/软件架构)。
概念体系和理论体系形成:软件体系结构定义逐渐明确,相关书籍出版。
理论完善与普及应用:1999年,1st IFIP软件架构会议召开;Markup架构描述语言提出,支持广泛的模型架构共享;软件产品线被提出,引起了大量大型企业的关注;IEEE 1471—2000发布,为软件架构普及定制标准化规范。
2.软件体系结构定义
软件体系结构=组件+连接件+约束
组件:具有某种功能的可重用的软件模块单元,表示了系统中重要的计算单元和数据存储。
连接件:表示组件之间的交互。简单连接件有:管道,过程调用,事件广播等;复杂连接件有:客户—服务器通信协议,数据库和应用之间SQL连接。
约束:表示组件和连接件的拓扑逻辑和约束。
3.软件体系结构的研究活动
软件体系结构要解决的问题,软件体系结构研究的内容,自适应软件体系结构。
4.软件体系结构的作用
软件生命周期中的作用
1.1软件的本质
软件是一系列按照特定顺序组织的计算机数据和指令的集合。
软件不是有形的物理产品,而是人类思维的产物。
软件不是被制造出来的 ,而是思考出来的。
软件的限制—>软件的复杂性
软件特质和分类:
软件分类:
2.软件工程
2.1软件工程是:(1)将系统化的,规范化的,可量化的方法应用于软件开发、运行和维护,即将工程化方法应用于软件。(2)对(1)中所述的方法进行研究。
2.2软件过程和软件工程实践
软件过程:是工作产品构建时所执行的一系列活动、动作、任务的集合。
2.一个通用的软件工程过程包含一下5个内容活动:沟通,策划,建模,构建,部 署。
3.软件工程和软件过程实践——七条原则:存在价值,保持简简洁,保持愿景,关 注 使用者,面向未来,计划复用,认真思考。
2.3网络环境带来的影响
(1)计算机软件 = 程序 + 数据结构 + 文档
(2)计算机软件 = 满足需求的信息 + 服务工具
3.软件设计
3.1软件工程过程中的设计
软件设计在软件工程过程中处于核心技术。
3.2软件设计原则
软件设计原则——设计类:完整性和充分性,原始性,高内聚性,低耦合性。
体系结构与设计:体系结构是系统设计的一部分,突出了某些细节,并通过抽象省略掉一些细节。所以,体系结构是设计的一个子集。
3.3软件体系结构的内容——体系结构的研究领域
(1)通过提供一种新的体系结构描述语言解决体系结构描述问题
(2)体系结构领域知识的总结性研究
(3)针对特定领域的框架的研究
(4)软件体系结构形式化支持的研究
3.4软件体系结构设计方法:是指通过一系列的设计活动,获得满足系统功能性需求,并符合一定非功能性需求约束的软件体系结构模型。
软件体系结构设计方法分类:
(1)FR驱动的软件体系结构设计
(2)NFR驱动的软件体系结构设计
(3)集合FR和NFR的方法
3.5软件体系结构设计经验总结与复用
软件体系结构所采用的主要手段:
(1)体系结构风格和模式
(2)领域特定的软件体系结构和软件产品线
2.1什么是软件模型
软件模型可以看作是一种元模型。
软件模型作为软件组成的最基本单元的抽象,既反映软件体系结构构建的核心思想,也奠定了软件体系结构构建的基础。
2.2软件模型的发展历程
功能模型—>对象模型—>组件模型—>配置型组件模型—>服务模型—>抽象模型
2.3软件模型解析
1.功能模型
功能模型也可以成为过程模型或函数模型,它是模型化软件构件方法的第一基本模型。
功能模型的基本原理:将一个系统分解为若干个基本功能模块,基本功能模块之间可以根据需求进行调用。
基本功能模型的抽象和耦合
功能模型的核心
递归思想的具体实现
2.对象模型
对象模型:以对象为核心,通过对象进行数据组织的抽象并实现数据组织和数据处理的统一,并在此基础上建立面向对象的软件构造方法。
对象模型的基本原理:将一个系统分解为若干个对象,对象之间可以通过发送消息按需求进行协作。
数据类型的抽象:允许用户按需根据定义自己的数据类型:
3.组件模型
3.1组件模型:在对象模型的基础之上,强调异族对象关系以及独立性问题。
异族对象关系:组件内部完成组件功能的对象可以是同族的,也可以是异族的。
独立性:组件建立在二进制基础之上并独立封装,可以独立部署。
3.2组件模型以接口为核心,通过接口抽象组件行为,并在此基础上建立面向接口 的软件构造方法。接口:值对象动态行为的集合,支持继承机制。组件:能完成特 定功能并能独立部署的软件合成单元,一个组件一般具有一个多个接口,每个 接口的功能由一个或多个方法实现。
3.3组件对象模型是基于Windows平台的一套组件对象接口标准,由一组构造规范 和组件对象库组成。
3.4一般的对象由数据成员和作用在其上的方法组成,而组件对象与一般的对象虽 有相似性,但也有较大不同。组件对象不使用方法而是接口描述自身。
3.5接口被定义为“在对象上实现的一组语义上相关的功能”,其实质是一组由组件 实现的提供给客户使用的函数,是一个包含函数指针数组的内存结构,数组元素是 一个由组件实现的函数地址。
3.6一个组件对象实现的接口数量没有限制。
3.7框架:已实现部分功能的某类程序结构的实现。
3.8框架分类:(1)水平型:一般面向通用类程序的构造,与特定的应用领域无关。 (2)垂直型:一般面向特定应用领域,它抽象和封装了该应用领域程序的基本构 造和共性基本组件。(3)符合文档型:是一种比较通用的框架,它将一个程序抽象 为一个文档,将构造程序的各个组件看作是文档中不同的的独立元素,这些独立元 素通过事件消息相互联系。
4.配置型组件模型
配置型组件模型又称为服务器组件模型,它专门针对应用服务器,定义其基于组件 的基础结构模型。
配置型组件模型的基本原理:将应用业务逻辑与系统基础服务两者解耦,由系统基 础服务构成一个服务容器,自动隐式的为各种业务逻辑按需统一提供相应的基础服 务。应用业务逻辑可以按需提出不同的基础服务要求,即他是可配置的。
5.服务模型
服务:指一个封装着高级业务概念、实现公共需求功能、可远程访问的独立应用程 序模块。
服务一般由数据、业务逻辑、接口及服务描述构成。
服务模型的基本原理:明确服务提供者和服务使用者,并通过服务中介实现两者的 耦合。
服务模型的标准主要是Web Services.
6.抽象模型
基于归纳思维策略的可恢复程序语句组件模型
抽象模型
基于演绎思维策略的元模型
两者都是面向抽象层的应用业务逻辑的描述,而不关注描述的具体实现平台和环境,具有完整的技术独立性和应用发展的适应性。
2.4深入认识软件模型
2.4.1软件体系结构的描述
2.4.2软件体系结构的描述—非形式化描述
典型代表——UML(一种通用的可视化建模语言)
非形式化描述的缺陷:
不适于描述体系结构行为
2.4.3软件体系结构的描述—形式化描述
用于软件和硬件系统的说明、开发和验证的数学化方法。
理论基础是数学化理论。
形式化的特点:
2.4.4软件体系结构的描述—典型的形式化描述
形式化描述存在的问题:
2.4.5软件体系结构的设计
2.5ADL简介
体系结构描述语言:一种用于描述体系与体系结构的计算机语言,它可以在指定的抽象 层次上描述软件体系结构。
ADL关注抽象层次上的整体结构而不是任意代码模块的实现细节,作为一种经典理论, Shaw和Garland定义了ADL的元素:
3.1软件体系结构建模概述
体系结构模型分为以下五类:
结构模型
框架模型
动态模型
过程模型
功能模型
3.2基于软件体系结构的开发
体系结构的软件开发过包括以下主要活动:
1.通过对特定领域应用软件进行分析,提炼其中的稳定需求和易变需求,建立可 复用的领域模型。
2.在领域模型的基础上提炼特定领域的软件体系结构。
3.低层设计主要解决具体构件和连接件的设计问题,通过复用设计件库中存放的 设计模式、对象和其他类型的可复用设计件,或根据情况设计情的构件,并提炼入 库。低层设计的结果可以直接编程实现。
体系结构——>宏观上描述系统的总体构件——>高层设计
设计模式和对象——>从微观上解决设计的问题——>低层设计
3.3UML概述
3.3.1UML的特点和用途
3.3.2UML2.0的建模机制
3.4面向对象方法
面向对象方法学的出发点和基本原则是尽可能模拟人类习惯的思维方式,使开发软件的 方法与过程尽可能接近人类认识世界、解决问题的方法与过程。
面向对象构造法则:
3.4.1 面向对象方法中的基本概念
(1)对象:对象指的是一个独立的、异步的、并发的实体。
(2)类:类的定义,包括一组数据属性和在数据上的一组合法操作。
(3)继承性:广义地说,继承是指能够直接获得已有的性质和特性,而不必反复 定义他们。
(4)多态性:指子类对象可以向父类对象那样使用,同样的消息既可已发送给父 类对象也可以发送给子类对象。
(5)重载:有两种重载:函数重载是指在同一作用域内的若干个参数特征不同的 函数可以使用相同的函数名;运算符重载是指同意运算符可以施加于不同类型的操 作数上面。
(6)消息和方法:在面向对象领域,两个对象的贾湖是通过消息的发送和接收来 完成的。消息分为简单消息、同步消息和异步消息。
(7)聚集:在客观世界中有若干类,这些类之间有一点的结构联系。通常有两种 主要的结构联系,即一般——具体结构关系,整体——部分结构关系。
3.4.2 面向对象方法的优势
3.5 UML2.0中的结构建模
UML2.0中的结构建模包括:
3.5.1 类图——类
(1)类是来描述具有相同特征、约束和语义的一乐对象,这些对象具有共同的操 作和属性。
(2)类图中的类可以简单的只给出类名,也可以具体的列出该类拥有的成员变量 和方法,甚至更详细的描述可见性、方法参数、变量类型等信息。
3.5.2 类图——抽象类
(1)抽象类是指只提供操作名,而不对其进行实现。
(2)对这些操作的实现可以由其子类实现,并且不同的子类可以对同一操作具有 不同的实现。
3.5.3 类图——接口
3.5.4 类图——关联关系
(1)描述了类结构之间的关系。
(2)当关联使双向的,那么就可以用无向连线表示。
(3)一般的关联关系语义较弱。也有两种语义较强,分别是聚合和组合。
3.5.5 类图——依赖关系
(1)两个类之间存在依赖关系,表明一个类使用或需要知道另一个类中包含的信 息。
(2)有多种形式,例如绑定、友元等。
3.5.6 类图——聚合关系
3.5.7 类图——合成关系
3.5.8 类图——聚合关系与合成关系的区别
(1)聚合关系使has-a关系,组合关系是contains-a关系。
(2)聚合关系表示整体与部分的关系较弱,组合关系表示比较强。
3.5.9 类图——泛化关系
泛化关系在面向对象中一般称为继承关系,存在于父类与子类,父接口与子接口之间。
3.5.10 对象图
对象是类的实例,对象图可以看作类图的实例,对象之间的连接是类之间关联关系 的实例。
对象图显示类的多个对象实例而不是真实的类。
3.5.11 构件图
(1)构件图用于静态建模,是表示构建类型的组织以及各种构件之间依赖关系的图。
(2)构建通过对构件间依赖关系的描述来估计修改系统构件可能给系统带来的影响。
(3)构件的根本特征在于它的封装性和可复用性,其内部构件被隐藏起来,只能通过接口向外部提供服务或请求外部的服务。
(4)构件是系统中遵从一组接口且提供其实现的物理的、可替换的部分。
(5)构件能独立完成功能,它是软件系统的组成部分。
3.5.12 部署图
(1)部署图描述的是系统运行时的,展示了硬件的配置及其软件如何部署到网络 结构中。
(2)一个系统模型只有一个部署,部署图通常用来理解分布式系统。
3.5.13 行为建模(动态建模)
行为建模:刻画系统中的动态行为、动作和过程。
UML行为建模中提供的试图可以从不同侧面描述软件系统的动作过程。
1.用例图
(1)用例图定义:
用例:
用例之间的关系:
2.顺序图
3.通信图
通信图主要关注参与交互的对象通过连接组成的结构。
4.交互概览图
交互概览图有两种形式:
5.时序图
时序图是显示对象之间交互的图。这些对象是按时间排列的,时序图中显示的是参与交互的对象及其对象之间消息交互的顺序。
6.状态图
状态图使用有穷状态变迁图的方式刻画系统或元素的离散行为,可以用来描述一个类的实例、子系统甚至整个系统在其生存周期内,所处状态如何随外部刺 激而发生变化。
7.活动图
4.1软件设计基础
软件设计主要针对需求分析过程得到的软件需求规格说明,综合考虑各种制约因素,探 求切实可行的软件解决方案并最终给出方案的逻辑表示,包括文档、模型等。
软件设计的主要活动:
(1)软件设计计划
明确设计过程的输入制品并使其处于就绪状态
定义设计过程的目标、输出制品及验收准则
确定覆盖设计过程中各个阶段的全局性设计策略
分配设计过程中相关人员的职责
针对设计过程中的活动指定设工作计划
(2)体系结构设计
目标是建立软件系统的体系结构,有时也称“顶层设计”。
在软件体系结构设计过程中,需要注意以下规则:
(3)界面设计
良好的用户界面一般都符合下列用户界面规范:
(4)模块/子系统设计
设计目标:
(5)过程/算法设计
主要任务是对模块内部工作和执行过程进行描述,给出有关处理的精确说明。
(6)数据模型设计
4.2软件体系结构设计
软件设计一般首先设计软件体系结构设计,然后再逐步精化进行更详细的设计,知道设计可以被实现的程度。
软件体系结构的设计方法是指通过一系列的设计活动,获得满足系统能性需求,并且符合一定非功能性需求约束的软件体系结构模型。
(1)多重视图建模(包含逻辑、开发、物理、过程视图)
(2)基于评估与转换的设计方法
对体系结构进行转换可以通过下述三种方式实现:
(3)模式驱动的设计方法
常用的软件体系结构风格如下:
(4)领域特定的软件体系结构设计方法
领域特定的软件体系结构是领域工程的核心部分,领域工程分析应用领域的共同特征和可变特征,对刻画这些特征的对象和操作进行选择和抽象,形成领域模型,并进一步生成DSSA。
DSSA与体系结构风格的区别:
(5)软件产品线
指一组可管理的,具有公共特性的软件应用系统的集合。
软件产品线的主要组成部分:核心资源和软件产品集合。
软件产品的基本活动包括核心资源开发,利用核心资源的产品开发以及在这两部风 中所需要的技术协调和组织管理。
在一个软件产品线中,新产品形成的步骤如下:
(6)其他软件体系结构设计方法
(1)基于目标图推理的体系结构设计方法:该方法的目标是使模式背后的推理显 示化,并且服从于系统的分析;该方法使用目标图,表达模式在各种需求上的应用 效果。
(2)基于属性的体系结构设计方法:是对通常体系结构风格描述的一种扩充,用 于获取结构化分析SA层次上的结构和分析技巧,显式地把推理框架(定性或定量) 与体系结构风格关联起来。
4.3高可信软件设计
(1)可信软件的特点:
(2)软件可信性质分为以下几种:
(3)容错设计
恢复块
软件容错设计方法
N—板块编程
设计多样性可以通过以下几种方式达到:
(4)软件失效模式和影响分析
软件失效模式和影响分析主要是在软件开发阶段的早期,通过识别软件失效模式,研究分析各种失效模式产生的原因及其造成的后果,寻找消除和减少有害 后果的方法,以尽早发现潜在问题,并采取相应措施,从而提高软件的可靠性 和安全性。
(5)软件故障树分析
软件故障树是在软件系统设计过程中,通过对可能造成系统故障的因素(包括硬件、软件、环境、人为等因素)进行分析,画出逻辑框图(即故障树),从而确定系统故障原因的各种可能组合,采取相应的纠正措施,提高系统可靠性的一种设计分析方法。
(6)形式化方法
形式化方法是在计算系统的开发中进行严格推理的理论、技术和工具,主要包括形式规约技术和形式验证技术。
形式规约技术:使用具有严格数学定义语法和语义的语言刻画软件系统及其性质,可以尽早发现需求和设计中的错误、歧义、不一致和不完全。、
形式验证技术:是在行使规约的基础上建立软件系统及其性质的关系,即分析系统是否具有所期望性质的过程,主要分为模型检验和定理证明。
4.4软件设计规格说明
4.5软件设计评审
软件设计评审的目标是确保软件设计规格说明书能够实现所有的软件需求,及早发现设计中的缺陷和错误,并确保设计模型已经精化到合格的软件实现工程师能够构造出符合软件设计者期望的目标软件系统。
设计评审中需要重点关注的内容包括:
为了使设计评审达到预期效果,下面给出设计评审的一些建议性原则:
5.1软件体系结构风格概述
软件体系结构设计的一个核心问题是能否使用重复的体系结构模式,即能否达到体系结构级的软件重用。
能否在不同的软件系统中使用同一种体系结构。
软件体系结构风格是描述某一特定应用领域系统组织方式的惯用模式。体系结构风格定义一个系统家族,即一个体系结构定义一个词汇表和一种约束。
体系结构风格反映了领域中众多系统所共有的结构和语义特征,并指导如何讲各个模块和子系统有效地组织成一个完整的系统。
按照这种方式理解,软件体系结构风格定义了描述系统的术语表和知道构建系统的规则。
5.2管道—过滤器
在管道—过滤器模式下,功能模块成为过滤器;功能模块间的连接看作是输入、输出数据流的通道,所以称为管道。
(1)适应的设计问题
如果要建立一个必须处理或转化输入数据流的系统,用单个组件实现会显得臃肿,需求不容易变动,所有可能要通过替换或重新排列处理步骤为灵活性做规划。处理步骤的内部链接必须考虑一下步骤:
(2)解决方案
每种风格具有以下特征:
采用管道—过滤器模式建立的系统具有如下优点:
管道—过滤器的不足:
5.3数据抽象和面向对象风格
优点:
缺点:
5.4基于事件的隐式调用风格
主要特点:事件的触发者并不知道哪些构件会被这些事件影响。
优点:
缺点:
5.5分层系统风格
优点:
缺点:
5.6仓库风格和黑板风格
仓库风格的体系结构由两个构件组成:一个中央数据结构,它表示当前状态;一个独立构件的集合,它对中央数据结构进行操作。
对于系统中数据和状态的控制方法有两种:一个传统的方式是,由输入事务进行选择进行何种处理,并把执行结果作为当前状态存储到中央数据结构中,这时,仓库是一个传统的数据库体系结构;另一种方法是,由中央数据结构的当前状态决定进行何种处理。这时,仓库是一个合办体系结构,即黑板体系结合是仓库体系结构的特殊化。
5.7模式—视图—控制器风格——MVC模式
MVC的实现:
5.8解释器风格
解释器风格通常用于建立一种虚拟机以弥合程序的语义与作为计算引擎的硬件的间隙。又有解释器时间上建立了一个软件虚拟出来的机器,所以这种风格又常常被称为虚拟机风格。
程序设计语言的编译器;基于规则的系统,;脚本语言。
由一个执行引擎+三个存储器,一共四个构件组成:
优点:
缺点:
额外的间接层次带来的系统性能的下降。
5.9C2风格
C2体系结构风格可以概括为通过连接件绑定在一起的、按照一组规则运作的并行构件网络。C2风格中的系统组织规则如下:
C2风格具有如下特点:
系统中的构建可以实现应用需求,并能将任意复杂度的功能封装在一起。
所有构件之间的通信时通过以连接件为终结的异步信息交互机制来实现的。
构件相互独立,构件之间依赖性较少。
5.10 C/S风格
服务器负责有效的管理系统的资源,其任务集中于以下几个方面:
客户端应用程序的主要任务:
优点:
缺点:
5.11 三层C/S结构风格
表示层:
功能层:
数据层:
三层C/S结构的优点:
5.12B/S风格
B/S软件体系结构是随着Internet技术的兴起,对C/S结构改进后得到的一种结构。
在B/S体系结构下,用户界面完全通过WWW浏览器实现,部分事务逻辑在前端实现,但主要是无逻辑在服务器端实现。
他利用浏览器技术,结合浏览器的多种脚本语言并通过浏览器就实现了原本需要复杂的专业软件才能实现的强大功能,是一种全新的软件体系结构。
特别适用于网上信息的发布。
通过Internet技术统一访问不同种类的数据库,提供了异种机器、异种网络、异种应用服务之间的统一服务 的最现实开发基础。
5.13C/S与B/S混合结构风格
5.14 正交软件体系结构的概念
正交软件体系结构的主要特征:
正交软件体系结构的优点:
5.15 异构结构风格
使用异构结构的原因:
异构体系结构实例——“内外有别”模型
优点:
缺点:
异构体系结构实例——“查改有别”模型
缺点: