零、引子
1.软件危机
软件危机是指计算机软件开发和维护过程中遇到的一系列严重问题。包括如何开发软件以满足日趋负责的需求,如何维护数量不断膨胀的软件产品。
2.软件工程
(1)将系统化的、规范化的可量化的方法应用于软件的开发运行和维护,即将工程应用于软件。
(2)对(1)中所述方法的研究
3.软件工程的发展
传统软件工程、面向对象的软件工程、构件软件工程、面向服务的软件工程
4.软件工程的基本方法
复用、分而治之、优化折中
一、概述
1.软件体系结构
(1)定义
软件体系结构定义了软件的局部与总体计算部件的构成以及他们之间的相互关系。总的来说,软件体系结构是结构和相互作用功能各异的构件之的集合,按照层次构成的。
体系结构=部件+连接件+约束
体系的核心模型由5种元素组成:构建、连接体、配置、端口和角色
(2)体系结构的类别
概略型、需求型、设计型
(3)SA对SE的贡献
【1】开发团队的组织结构【2】需求获取【3】设计方案的选择【4】分析和描述复杂系统的高层属性【5】人员交流【6】技术进步
(4)软件质量
功能、性能、安全、健壮性、可测性、兼容性、可扩展性、移植性、经济效益
2.当前的软件设计
(1)软件体系结构的选择对软件的长远成功是至关重要的
(2)体系结构描述具有不规范性
(3)软件体系结构理论和工具是解决软件设计复杂和工程设计的必由之路
3.软件设计的层次
结构层、代码层、执行层
4.软件结构与软件工程
(1)实现体系结构指导下的软件工程设计,关键在于建立软件构件的分析和构造的方法。
软件复用是技术的范畴、软件体系结构风格为大粒度的软件重用提供机会。
5.软件体系结构的知识体系
软件硬件层、基础控制描述层、资源和管理调度层、系统结构模式层、领域应用层
二、软件体系结构的研究和发展
1.软件工程设计和软件体系结构
(1)软件设计目标
在各类资源限制下,最大程度地满足用户需求。
【1】便于维护和升级,因此应该是模块化的【2】设计是可移植的【3】设计具有适应性【4】设计过程置于理性控制之下【5】设计应该表现概念的完整性
(2)软件设计出现的问题
【1】对于需求变化缺乏配合【2】过程控制对于维持软件设计的正确性缺乏保证【3】软件产品缺乏概念完整性
(3)针对问题提出的设计思想
【1】强调数据隐藏的单元概念【2】应用基于操作和数据封装构成的单元设计技术【3】应用专门的机制处理并发控制和分布式系统问题【4】提出基于模型的系统结构和设计方法【5】明确提出软件体系结构的设计思想
2.什么是软件体系结构
3.软件体系结构的意义和目标
(1)软件体系结构在软件开发中的意义
【1】软件体系结构是软件开发过程初期的产品,对于开发进度和软件质量的一切资金和劳务的投入,可以获得最好的回报。【2】软件体系机构设计是形成较高投资回报的重要因素。【3】软件体系结构设计为软件开发提供了极大的便利。
(2)软件体系机构设计的目标
【1】外在目标:建立满足终端用户的系统需求【2】内在目标:建立满足后期设计者需要以及易于实现、维护和扩展的系统部件构成。
4.软件体系机构的研究范畴
(1)软件体系结构描述语言和工具(2)产品线和标准(3)软件体系结构风格以及风格的应用(4)体系结构文档化
三、软件体系结构的层次性
1.从建筑学看软件的构成
体系机构需要基础、层次、模式、角色
(1)软件的物质基础
计算机硬件 (MIMD是多处理器系统)
(2)软件的结构基础
【1】结构化控制流【2】部件连接方式【3】数据结构【4】抽象数据类型
3.软件的结构基础
无论多么高层的结构,都是建立在基础结构之上的,作为软件结构基础的思想和概念,主要包括四个方面
(1)结构化控制流
(2)结构化连接模式
(3)抽象数据结构
(4)抽象数据类型
5.软件体系结构的层次模型
(1)基础硬件层:软件运行的硬件基础
(2)软化硬件层:实现硬件的操作和控制描述比如处理器和中断
(3)基础控制描述层:简历在高级语言之上的纯粹的描述层
(4)资源和管理调度层:在基础控制描述层建立的一切数据 对象和操作,都需要在操作系统的协调和控制之下。比如进程管理、消息处理、同步
(5)系统结构模式层:体系结构层的模式,比如C/S B/S
(6)应用层:如ERP系统、CAD系统
6.软件体系结构的体系
(1)体系结构的基础:对硬件的软件抽象、基础控制描述、资源管理调度、系统结构模式、领域知识
(2)体系结构的描述抽象:SA是目前对软件结构的最高级抽象。
(3)体系结构的语法和定义
(4)体系结构的性能分析
(5)体系结构的代码生成
(6)体系结构的知识体系
7.从层次模型看软件体系结构
(1)软件体系结构是关于软件构成部件及其之间的连接的分层的结构框架。
(2)软件体系结构包括软件的内在概念和外在操作结构
(3)软件体系结构设计涵盖并指导着从逻辑模型设计到运行实现的软件工程的全过程
四、软件体系结构的设计原理
1.体系结构设计中遵循的原理
(1)抽象:数据抽象、实体抽象、行为抽象、过程抽象、对象抽象、虚拟机抽象
(2)封装:将抽象的属性和行为结合一起,隔离不同的抽象。
(3)数据隐藏:对用户隐藏部件的实现细节。
(4)模块化:代码结构物理分块
(5)关注点分离:将不相关的责任从软件中分离出形成不同的构件,相同职责的任务处于统一构件中。
(6)内聚和耦合:
(7)充分性、完备性、原始性:部件完成的工作容易得到实现
(8)策略和实现分离:策略部件负责处理上下文决策、参数选择等,实现部分专注算法的实现。
(9)接口和实现分离:接口规范功能的使用方法,实现部分提供功能的具体方法。
(10)分而治之:将复杂的问题分解为若干个小问题
(11)层次化:
2.软件的非功能特性
(1)可变性:包括可维护性、可扩展性、可重构性、可移植性
(2)互操作性:不同系统之间相互操作
(3)效率:资源占用、响应时间
(4)可靠性:分为容错性和健壮性,容错性指在发生错误时可以确保正确的系统响应。健壮性不要求错误发生时能够继续运行,而是保证软件能以明确的可接受的方式终止。
(5)可测试性
(6)可重用性
五、部件和连接器
1.部件
(1)部件极其作用
任何具有独立结构和行为特性的软件体都可称为部件
(2)部件的实现形式
每个层次中都有部件的概念,是由基础部件复合和概念提升而产生的
(3)部件的特性
接口的特性:完备性、最小性、正交性、方便性、效率
运行特性:中断处理、并行调度、多用户服务
2.连接
连接是部件间建立和维护行为关联和信息传递的途径。
(1)连接的种类:过程调用、控制、事件、消息发送、数据传送
(2)连接的实现机制
计算机硬件提供了实现一切连接的基础,无论多么复杂的连接,都是基于以下基本连接机制
过程调用 中断 I/O DMA 进程 线程 并/串行 并发 同步 事件
(3)连接的协议
(4)连接的特性
方向性,角色,激发,响应,不匹配解决
3.连接器
(1)连接器的作用
【1】连接器是实现部件与部件之间联系的特殊机制与特殊部件【2】连接器承担了部件与部件的信息和行为关联的作用,是系统复杂性的来源,对系统各种性能有者重要影响
(2)连接器的层次
最基础的层次是计算机硬件提供的,每一层都是由上一层经过复合和概念提升而产生的
(3)连接器的表达形式
【1】最简单的连接器是部件间直接联系【2】部件间转换运算【3】两段连接硬件和传输介质
六、体系结构的一般描述
1.通用的一般的描述方法
(1)主程序与子程序
系统结构被影射为主程序和一些列具有调用关系的子程序的集合
优点:【1】一切结构最本质、最基础的形式【2】代码效率可以得到最大限度的发挥和提高
缺点:【1】部件连接关系不明显【2】维护性差【3】复用性差
(2)数据抽象和面向对象
是在父子程序基础上发展起来的重要的软件描述方法
数据抽象是面向对象的基础
类和对象是基本粒度
优点:【1】信息隐藏保证了对象行为的可靠性【2】受封装的抽象数据和操作捆绑在一起,提高了内聚性,使系统容易分解为相互作用又相互独立的对象集合【3】操作请求和实现细节的分离使得可以在不影响调用者的情况下改变操作,为系统的升级和维护提供了条件。【4】封装和继承提高了复用的可能性和方便性。
缺点:【1】对象之间的调用必须知道对象的标识,造成系统维护上的困难。【2】如果在系统分析初期就使用面向对象的方法会大大加剧系统分析的复杂性。
(3)层次结构
层次结构是复杂系统设计的带普遍性的设计原则
层次结构的变种:松弛的层次结构 通过继承的层次结构
层次结构的实例:虚拟机JVM,API,IS(信息系统,DB是底层),Windows NT
优点:【1】层次复用性【2】对标准化的支持,可以在不同层次选用不同商家的产品【3】依赖本地化,统一的接口,便于支持系统的可移植性。【4】可替代性
缺点:【1】改变行为的连锁效率【2】低效率【3】包含不必要的工作【4】不容易找到合适正确的层次抽象方法
2.体系结构的描述
形式化的定义:用于计算机系统的形式化方法是描述系统性质的基于数学的技术
目标:无二性、一致性、完整性
(1)体系结构描述语言ADL
(2)类属理论
是一种表达对象关系的数学语言,表达抽象和依赖关系的工具。
(3)Z Notation
使用标准的逻辑操作符和集合操作符
(4)CSP(通用顺序进程)
提供了丰富的描述进程行为的语义集
(5)化学抽象机制CHAM
定义分子和分子溶液
3.软件体系结构集成环境
(1)UniCon
基于部件和连接器的,定义了部件和连接器的类型
(2)Wright
描述体系结构的风格、系统族、体系结构实例和单个系统
(3)Darwin
标识符、关键字和函数
(4)ACME
采用图形化编辑方式直接描述构件和连接件
七、设计模式
1.MVC
MVC优点【1】减少开发时间【2】可维护【3】增加软件复用【4】模型可以改变而不影响视图
2.UML
3.设计模式
http://blog.youkuaiyun.com/luchengtao11/article/details/72852340
Others
1.4+1视图
逻辑视图(logical view):描述系统的功能需求,即系统提供给最终用户的服务,可以用类图来表示
开发视图(development view):描述系统的模块组成和管理,服务于开发人员
过程视图(process view):描述系统的性能,非功能性需求,服务与系统集成人员
物理视图(Physical view):描述系统的硬件配置,服务于系统工程人员,主要考虑如何把软件映射到硬件上, 它通常要考虑到系统性能、规模、
可靠性等。
场景(Scenaris):描述各构件和连接件之间的关系
2.体系结构风格
(1)管道过滤器
优点:【1】可扩展【2】可重用【3】可并发【4】易于理解【5】允许对一些性能进行分析
缺点:【1】不适合交互性【2】效率低编写过滤器复杂【3】维护两个相互独立又有某种联系的过滤器之间的通信复杂
(2)数据抽象和面向对象的体系结构
优缺点:见上述
(3)事件驱动、隐式调用
主要思想:构件不直接调用一个过程,而是触发或广播一个或多个事件,系统中其他构件收到事件后执行一些列过程。
优点:【1】可重用,当需要将一个构件加入现有系统时只需要将他注册到系统事件中【2】可维护,但一个构件代替另一个构件时,不会影响其他的构件。
缺点:【1】构件放弃了对系统计算的控制,一个构件触发时间时不知道是否有其他构件影响他【2】过程的语义必须依赖被触发事件的上下文约束、正确性推理存在问题
(4)分层系统
优点:
支持基于抽象程度递增的系统设计,使设计者可以把一个复杂系统按递增的步骤进行分解;
支持功能增强,因为每一层至多和相邻的上下层交互,因此功能的改变最多影响相邻的上下层;
支持重用。只要提供的服务接口定义不变,同一层的不同实现可以交换使用。这样,就可以定义一组标准的接口,而允许各种不同的实现方法。
缺点:
并不是每个系统都可以很容易地划分为分层的模式,甚至即使一个系统的逻辑结构是层次化的,出于对系统性能的考虑,系统设计师不得不把一些低级或高级的功能综合起来;
很难找到一个合适的、正确的层次抽象方法。
松弛的层次系统
1.是分层模型的一种变种
(1) 每层可以使用其下面所有层的服务而不仅仅是相邻层的服务
(2) 有些服务提供给相邻的上一层,而其余的服务则提供给高于
它的所有层
2.灵活性和性能的提高以牺牲可维护性为代价
3.经常用于系统软件,而不常用于应用软件的设计
(1) 系统软件比起应用软件来很少修改
(2) 系统软件对性能的要求高于可维护性的要求
(5)仓库风格、解释器、分布处理、主子组织结构、DSSA(被裁剪成应用程序族的组织结构)、转台转换系统、三层C/S、异构体系结构
3.一些面向对象的设计法则
(1)优先使用组合而非继承
组合的优点:【1】容器类仅能通过被包含对象的接口对其访问【2】相互依赖小【3】可以动态地定义对象集合
组合的缺点:【1】系统中对象过多【2】必须仔细对接口进行定义
继承的优点:【1】复用父类【2】容易修改
继承的缺点:【1】父类修改会影响子类【2】破坏了封装性
(2)针对接口编程而非实现
(3)开关原则(OCP):对扩展是开放,对修改关闭
(4)Liskov替换原则(LSP):使用指向基类的引用的函数时,必须在不知道具体派生类对象类型的情况下使用他们。一个子类不得具有比父类更高的权限
相关名词
软件体系结构风格:描述某一特定领域系统组织方式的特定模式
软件体系结构:软件体系结构定义了计算机局部与整体的构件组成、以及构件之间行为与信息交互的方式、总体来讲,软件体系结构是由构件和连接件按照一定层次结构组织的集合。
DSSA:特定领域体系结构、在一个特定的应用领域为一组应用提供组织结构参考的标准软件体系结构
软件产品线,产品线是一个产品集合,产品共享一个特征集,特征集能满足选定的市场或任务领域的特性需求。
ADL:在底层语义模型的支持下,为软件系统的概念体系结构建模提供了具体语法和概念框架
设计模式:设计模式是对通用设计问题的重复解决方案
框架:是整个或部分系统的可重用设计
SOA:面向服务的架构
三层C/S结构风格:表示层、功能层、数据层
软件危机:软件开发和维护过程中遇到的一系列严重的问题
构件:具有独立结构和功能的可重用的单位软件。
体系结构描述语言ADL:能够描述体系结构的组成要素,并能对系统体系结构、体系结构风格进行建模和分析验证的描述语言。
2461

被折叠的 条评论
为什么被折叠?



