第一章 软件系统结构概述
软件危机的性能和原因
1.软件成本日益增加
2.开发进度难以控制
3.软件质量差
4.软件维护困难
1.用户需求不明确
2.缺乏正确的理论指导
3.软件规模越来越大
4.软件复杂度越来越高
软件危机与软件系统结构的关系
软件危机导致软件工程研究,软件危机加剧,人们认识到软件系统结构的重要性,开始系统深入地研究软件系统结构,是提高软件生产率和解决软件问题最有希望的途径。
构件与重用的定义及他们之间的关系
:单位软件具有完整的语义、正确的语法和重用价值。它是语义描述、接口通信和代码实现的复合体。
:在两次或多次软件开发过程中重复使用或使用相同或相似的软件元素。
:构件是实现软件工业化生产的核心和基础,重用是必要的手段。
软件开发基于构件的优势 《个人见解》
1.缩短开发成本
2.缩短开发周期
3.可实现复用
基于构件的软件开发将面临困难和挑战
1.多个开发商提供的个开发商提供的组件之间的兼容性可能是一个严重的问题;
2.随处可购买的部件可能会使开发的软件产品失去技术原创性和市场竞争力;
3.第三方构件开发商可能会关闭,这将使购买的构件失去维护服务。这些问题在购买第三方构件进行软件开发时是不可避免的,因此有必要充分估计这些风险。
获取构件的方法
1.从现有构件中获得复合要求的构件,直接使用或进行适应性修改,可重用的构件。
2.潜在重用价值的构件将通过遗留工程提取。
3.从市场上购买现成的商业构件
4.开发新构件
软件系统结构的意义
1.系统结构是风险承担者沟通的手段
2.系统结构是早期设计决策的体现
3.软件系统结构是一种可传输和重用的模型
如何理解软件系统的结构? 《个人见解》
软件系统结构是一种抽象的系统规范,主要包括功能组件和组件之间的连接、接口和关系,用其行为来描述。一个项目就像一座建筑,软件系统结构被用来创建一个完整的系统来建造建筑。
程序结构、软件结构件结构和软件系统结构
:指代码结构,一般程序结构有三种:顺序、选择和循环。
:指软件的组成结构,软件的组成单位是模块(一般指),软件结构实际上是软件的组成模块结构。
:指软件的设计风格、范式等,常见的系统结构如:4 1,SOA,MVC,层次、管道过滤器、主程序子程序等。
**联系:**这三种结构实际上是关于同一产品——同一软件,它们是不同层次软件的抽象。
第二章 建模软件系统结构
介绍四加一模型
软件系统结构的全部内容从五个不同的角度反映。
软件系统结构在软件生命周期中的地位
对于软件项目,一个清晰的软件体系结构是首要的。p36
四加一模型视图构成 和 作用
1.逻辑视图:系统的功能要求是为最终用户提供服务。
2.开发视图:专注于软件模块的组织和管理。考虑到软件内部需求、软件开发难度、软件重用和开发工具的局限性。
3.过程视图:注重系统的运行特性,注重非功能需求,强调并发性、分布性、系统集成性和容错性。
4.物理视图:考虑系统性和可靠性,如何将软件映射到硬件上。
软件系统结构的生命周期模型
软件系统结构的生命周期由四个阶段组成:
1.需求分析阶段
2.建立软件系统结构阶段
3.设计阶段
4.实现阶段
第三章 软件系统结构风格
分析软件系统结构
经典软件系统结构风格
客户服务器(C/S)风格
三层C/S练习结构风格
浏览服务器风格
公共对象要求代理体系结构风格
正交软件系统结构风格
基于新闻的系统结构风格
异构结构风格
互联系统的构成系统及其体系结构
特定领域的软件系统结构
特定领域的软件系统结构
:为一组应用程序提供组织结构参考的标准软件系统结构。
特征
1.严格定义问题和问题域
2.可用于特定领域软件的开发
3.抽象整个领域的适当性
4.典型的固定可重用元素
第四章 软件系统结构描述
描述软件系统结构的方法?
描述方法可分为文本表达工具、数学表达工具和图形表达工具、行业偏向图形表达、学术偏向数学表达。
1.图形表达工具
2.将语言连接到模块中
3.基于软件的系统描述语言
4.软件系统结构描述语言
第五章 统一建模语言
了解这些图片的作用和特?
p129
(1)用例图:描述一组用例、参与者及其关系;
(2)类图:描述一组类、接口、协作及其关系;
(3)对象图:描述一组对象及其关系;
(4)交互图:指各组对象如何按照某种行为合作的模型,包括顺序图、通信图、定时图和交互概览图;
(5)顺序图:由一组对象或角色及其可能的信息组成,用于描述对象之间的动态互动关系,重点反映对象之间信息传输的时间顺序;
(6)通信图:强调收发消息的对象或角色的结构组织;
(7)定时图:强调消息跨越不同对象或角色的实际时间;
(8)状态图:描述对象状态与事件的关系,通常描述单个对象的行为;
(9)活动图:将过程或其他计算结构显示为计算内部的逐步控制流和数据流,以表示系统中各种活动的顺序;
(10 交互概览图:整合活动图和顺序图的产品;
(11 构件图:描述包装类及其界面、端口,以及由嵌入式构件和连接件组成的内部结构;
(12 部署图:描述其中生存的处理结点和构件的配置。
请问用例图和其他图的关系是什么?《个人见解》
例图是从用户的角度审视的SA的
用例是因为状态图和类图是果实.根据用例捕捉这些结果
例子是对系统行为的动态描述,从用户的角度审视软件系统结构。它可以促进设计师、开发人员和用户之间的沟通,了解正确的需求,划分系统和外部实体之间的界限,组织和建模系统的行为是非常重要的,这是系统设计的起点。只有使用例子清楚,才能描述后续的其他图片。
UML四层元模型结构?
:只有一个元素是thing”,类似于.Net类库层次的根object
:类、关联、属性等各种面向对象和面向组件开发的概念UML语言的组成部分
:建模者创建的具体模型,如汽车、司机、汽车和司机
:模型层中模型的例子,如小李:司机、A001:汽车”
第六章 可扩展标记语言
XML、SGML、HTML等等之间的区别?
XML是一种简化SGML,他将SGML丰富的功能和HTML结合易用性Web保留在应用中SGML可扩展功能。
HTML是格式化语言,HTML描述的程序和文本具有内容和格式的双重属性,XML纯数据可以支持其他可以处理的数据XML容器和程序。XML可用于定义其它标记语言的元标记语言。
HTML 是遵循了 DTD 标准的 SGML 的文档,可以说是 SGML 的一个实例
XML与数据库的区别?
xml主要解决的是数据在网上传输标准的问题,把原来各种各样的数据孤岛可以通过xml这座桥梁连接起来,所以打个比方,数据库就好比是盛数据的桶,而xml则是数据传输转换的桥梁
二者也存在非常紧密的联系,毕竟都是处理数据的工具,就是很多其他的数据格式可以通过xml输入到数据库中,数据库中的关系型数据也可以通过xml转化成其他的数据格式
XML的应用领域?经常在什么地方使用?
1.应用于客户需要与不同数据源进行交互时
2.应用于将大量运算负荷分布于客户端
3.应用于将统一数据以不同的面貌展示给不同用户
4.应用于网络代理对取得的信息进行编辑、增减以适应与个人用户的需要
XML的编程接口?怎么选择编程接口?
:DOM、SAX、 JDOM、 JAXP
:
(1)如果使用Java编写应用程序则使用JAXP;
(2)如果应用程序将要作为java applet部署则使用JDAM;
(3)解析了XML文档后要多次访问这些数据则考虑DOM;
(4)如果只需要XML源文件的少量内容则考虑SAX;
(5)如果正在一台内存很少的机器工作则考虑SAX;
第七章 动态软件体系结构
软件体系结构演化、体系结构的动态性、体系结构扩展这三个概念是什么?
:由于系统需求、技术、环境、分布等因素的变化而最终导致软件体系结构的变动,称之为软件体系结构演化。
:软件系统在运行时刻的体系结构变动,称之为体系结构的动态性。
:体系结构的静态性修改称之为体系结构拓展。
什么是动态软件体系结构?体系结构的动态性主要体现在那三个方面?
软件系统在运行时刻的体系结构可以进行变动,而不需要停机维护。
1.交互式动态性
2.结构化动态性
3.体系结构动态性
基于构件的动态结构模型?(7.2)
CBDSAM,支持运行系统的动态更新,分为应用层、中间层和体系结构层三层。
处于最底层,包括构件连接、构件接口和执行;
包括连接件配置、构件配置、构建描述和执行;
位于最顶层,控制和管理整个体系结构,包括体系结构配置、体系结构描述和执行。
动态?局部?更新与全局更新?
CBDSAM的动态更新包括检测更新范围、更新准备工作、执行更新和存储更新,分为局部更新和全局更新。
只作用于需要更新的构件内部,不影响系统的其他部分;判断属于局部更新后,在执行更新前,需要进行局部更新的构件会发送信号以隔离自身的通信,执行更新后将再将断开的连接重新存储起来。在整个过程中不会影响其他部分的运行。
作用于需要更新的构件,仅影响更新所涉及的部分,不影响系统的其他部分。在判断属于全局更新后,体系结构配置器会对更新所涉及的连接件和构件发送更新准备信息,整个更新工作只在这些部分进行,不会影响系统的其他部分运行。
第八章 基于服务的体系结构
什么是 SOA?你对SOA的理解是什么?它有哪些特征?
:面向服务的体系结构
:一种在计算环境中设计、开发、部署、和管理离散逻辑单元(服务)模型的方法;它是面向对象模型的替代,基于对象而不面向对象的一种方法;
1.松散耦合
2.粗粒度服务
3.标准化接口
web的服务有什么样的核心技术?这些技术的作用是什么?web服务的三要素是什么?
Web服务的核心技术及其作用。
(1)底层传输层,主要负责消息的传输机制。
(2)服务通信协议层,服务通信协议层主要是以一种统一的方式描述并定义服务之间进行通信传输所需的技术标准。
(3)服务描述层,主要以一种统一的方式描述服务的接口和消息交换方式。
(4)服务层,主要功能是将遗留系统进行包装,并通过发布的WSDL接口描述被定位和调用。
(5)业务流程层,主要功能是支持服务发现,服务调用和点到点的服务调用,并将业务流程从服务的底层调用抽象出来。
(6)服务注册层,主要功能是使服务提供者能够通过WSDL发布服务定义,并支持服务请求者查找所需的服务信息。
三个构成元素为:服务请求者、服务提供者、服务注册中心;
面向服务体系结构的设计原则
(1)明确定义的接口,服务定义必须长时间稳定;
(2)自包含和模块化,实现服务的功能实体完全独立自主;
(3)粗粒度,服务数量不应太多;
(4)松耦合,确保服务请求者可见的是服务的接口;
(5)互操作性、兼容和策略声明,确保服务规约的全面和明确。
第九章 富互联网应用体系结构
了解RIA技术的前世今生?《个人见解》
(1)连接本地的只有文字界面的大型计算机;
(2)连接本地的具有集成媒体图形用户界面的客户-服务器模式;
(3)连接全球的网络应用程序;
(4)连接全球的富互联网应用体系(RIA);
为什么要使用它?
RIA利用相对健壮的客户端描述引擎,这个引擎能够提供内容密集、响应速度快和图形丰富的用户界面。RIA的另一个好处在于,数据能够被缓存在客户端,从而可以实现一个比基于HTML的响应速度更快且数据往返于服务器的次数更少的用户界面。对企业而言,RIA可以继续使用现有的应用程序模型,可以帮助企业提供多元化的重要业务效益。
第十章 软件体系结构的分析与测试
软件体系结构的可靠性可以从哪几个方面进行评估?(p234)《个人见解》
可靠性是软件系统在应用或系统错误面前,在意外或错误使用的情况下维持软件系统的功能特性的基本能力。分为两个方面:
(1)容错:在规定的条件下,在规定的时间内,软件不引起系统失效的概率;
(2)健壮性:在规定的时间周期内,在所述条件下程序执行所要求的功能的能力;
所以对应从容错和健壮性进行评估,以判断软件体系结构的可靠性。
为什么要进行软件体系结构的分析?(p238)《个人见解》
因为风险评估是一个基于能够通过定量的方法对软件产品属性进行的度量,它对任何一个软件风险管理计划都是一个重要的过程, 风险评估能够对需要进行详细检测的复杂模型进行验证得到潜在的模型问题和测试效果,有利于开发阶段的后期评估。
你是如何理解基于软件体系结构的软件测试?
软件测试是困难、花销巨大的工作,但在软件开发过程中是一项非常重要的工作。怎样将形式化方法与软件测试技术结合起来是软件测试研究的重点。基于体系结构的软件测试和传统的软件测试一样,需要研究测试内容、测试准则、测试用例、测试充分性、测试方法等。
测试准则被定义为:测试应该覆盖所有的构件及各个构件的接口、各个连接件的接口、构件之间的直接连接、构件之间的间接连接。
软件体系结构的测试过程可以分为单元测试、集成测试和系统测试。
第十一章 软件体系结构评估
软件体系结构的评估方法?哪三种方法?各有什么样的优缺点?
或检查表的评估方式
:自由灵活,可评估多种质量属性,在多阶段进行;
:主观性较强,评估人员的熟悉程度和相关经验等会对结果产生很大影响;
,应用于ATAM和SAAM中;
是考虑到了所有人员对质量需求的满意程度
是评估方式是特定于某个领域的,需要实施者有丰富的领域知识,能够设计出合理场景,还要求实施者对待评估的软件体系结构有一定的了解。
:提供更为客观和量化的质量评估;
:有时间限制,需在软件体系结构设计基本完成以后才能进行,对评估人员要求较高,需要评估人员对评估的体系结构十分了解。
第十二章 基于体系结构的软件开发
什么是设计模式?
设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结,其目的是提高代码的可重用性,使代码易于理解,保证代码的可靠性,设计模式广泛应用于面向对象系统的设计和开发,成为面向对象领域的一个重要组成部分。
什么是中间件?你如何理解中间件?
定义:中间件是一种独立的系统软件或服务程序,便于资源共享,中间件位于操作系统之上,能够管理计算资源和网络通信,实现应用之间的互操作。
基本功能:
(1)负责客户机和服务器之间的通信,以及客户机与应用层之间的高效率通信机制;
(2)提供应用层不同服务器之间的互操作机制,以及应用层与数据库之间的连接和控制机制;
(3)提供一个多层体系结构的应用开发和运行平台,以及一个应用开发框架,支持模块化的应用开发。
(4)屏蔽软件、操作系统网络和数据库的差异。
(5)提供应用的负载均衡和高可用性、安全机制与管理功能,以及交易管理机制,保证交易一致性。
(6)提供一组通用的服务去执行不同的功能,避免重复的工作,使应用之间可以协作。
分类:底层中间件、通用型中间件、集成型中间件;
应用:在企业应用集成中扮演重要的角色,可以从不同的层次采用不同种类、不同技术的中间件进行应用集成。为了完成不同层次的继承,采用不同的技术和产品。
发展趋势:规范化、构件化、松耦合、平台化发展;
设计模式的层次?
(1)面向对象模式:由最底层的类与对象及其关系区分;
(2)代码模式:有助于解决某种面向对象程序设计语言的特定问题;
(3)框架应用模式:用一种不很规范的方式描述了如何应用框架来解决特定的问题;
(4)形式合约:是一种描述框架设计的方法,强调组成框架的对象间的交互关系。过于抽象,仅在小规模程序中使用。
基于体系结构的软件设计(ABSD)的生命周期?
ABSD方法的生命周期介于需求分析和实际构件设计之间,在该方法中,必须记录所有做出决策以及这些决策的原理,以利于决策的可跟踪性和决策评审。其输入包含抽象功能需求、用例、抽象的质量和业务需求、质量因素、体系结构选项和约束组成。
第十三章 软件产品线体系结构
什么是软件的产品线?你是怎么理解理解软件的产品线的?
产品线是一个产品集合,这些产品共享一个公共的、可管理的特征集。这个特征集可以满足选定的市场或任务领域的特定需求。这些系统遵循一个预描述的方式,是在公共的核心资源基础上开发的。
软件产品线由核心资源和产品集合组成。核心资源是领域工程的所有结果的集合,是产品线里产品构造的基础。
网上:软件产品线就是在一个公共的软件资源集合基础上建立起来的共享同一个特性集合的系统集合。
双生命周期模型?(p339)
双生命周期模型是软件产品线的一种过程模型。分成领域工程和应用工程这两个重叠的生命周期,其中领域工程的主要任务是领域分析、领域设计和领域实现,应用工程的主要任务是需求分析、系统设计和系统实现。
应用工程将产品线资源不能满足的需求返回给领域工程,以检验是否将之合并到产品线的需求中。领域工程从应用工程中获得反馈或者结合新产品的需求进入有一次周期性发展。此为产品线的演化。