《软件体系结构原理、方法与实践》第二版期末考试复习总结,本文仅归纳了考试重点。
题库链接 https://www.docin.com/p-2325678244.html
软件危机的定义(填空题):__1968 __年,在德国召开的国际软件工程会议,第一次提出了软件危机的概念。软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。
软件危机的表现有哪些?
软件危机产生的原因
如何客服软件危机
分解、抽象、封装、信息隐藏。用现代工程的概念、原理、技术和方法进行计算机软件的开发、管理和维护。
软件工程的三要素是什么,代表什么含义?
构件的定义:构件是指语义完整、语法正确和用可重用价值的单位软件,是软件重用过程中可以明确辨识的系统。例如:高德地图、支付宝支付、微信支付等。
构件模型的3个流派:OMG的CORBA;SUN的EJB;Microsoft的DCOM
软件体系结构的定义:软件体系结构为软件系统提供了一个结构、行为和属性的高级抽象,由构成系统的元素的描述、这些元素的相互作用、指导元素集成的模式以及这些模式的约束组成。软件体系结构不仅指定了系统的组织结构和拓扑结构,并且显示了系统需求和构成系统的元素之间的对应关系,提供了一些设计决策的基本原理。
软件体系结构:构件的集合,包括:处理构件、数据构件和连接构件。
研究软件体系结构的意义:
软件体系结构的发展史:
课后题:
1、什么是软件重用?软件重用是指在两次或多次不同的软件开发过程中重复使用相同或相近软件元素的过程。把这种可重用的软件元素称作构件。
2、基于构件的软件开发的优势:(1)可以减少软件开发活动中大量的重复性工作,提高软件生产率,降低开发成本,缩短开发周期。(2)有助于改善软件质量。(3)软件的灵活性和标准化程度得到提高。
软件体系结构的模型分为5种:结构模型、框架模型、动态模型、过程模型、功能模型。
结构模型:最直观、最普遍的建模方法。这种方法以体系结构的构件、连接件和其他概念来刻画结构,并力图通过结构来反映系统的重要语义内容,包括系统的配置、约束、隐含的假设条件、风格、性质等。研究结构模型的核心是体系结构描述语言。
动态模型:是对结构或框架模型的补充,研究系统的“大颗粒”的行为性质。例如,描述系统的重新配置或演化。动态可以指系统总体结构的配置、建立或拆除通信通道或计算的过程。
Kruchten在1995年提出了一个4+1视图,从5个不同的视角来描述软件体系结构:
逻辑视图:最终用户,功能需求
进程视图:系统集成人员,性能、可扩充性、吞吐率等
开发视图:编程人员,软件管理
物理视图:系统工程人员,系统拓扑、安装、通信
场景视图:对应用例的脚本
1、逻辑视图
主要支持系统的功能需求,即系统提供给最终用户的服务。在面向对象技术中,通过抽象、封装和继承,可以用对象模型来代表逻辑视图,用类图来描述逻辑视图。
2、开发视图
也称模块视图,主要侧重于软件模块的组织和管理。开发视图要考虑软件内部的需求,如软件开发的容易性、软件的重用和软件的通用性,要充分考虑由于具体开发工具的不同而带来的局限性。开发视图通过系统输入输出关系的模型图和子系统图来描述。
在开发视图中,最好采用4-6层子系统,而且每个子系统仅仅能与同层或更低层的子系统通讯,这样可以使每个层次的接口既完备又精练,避免了各个模块之间很复杂的依赖关系。
设计时要充分考虑,对于各个层次,层次越低,通用性越强,这样,可以保证应用程序的需求发生改变时,所做的改动最小。开发视图所用的风格通常是层次结构风格。
3、进程视图
侧重于系统的运行特性,主要关注一些非功能性的需求。
进程视图强调并发性、分布性、系统集成性和容错能力,以及从逻辑视图中的主要抽象如何适合进程结构。它也定义逻辑视图中的各个类的操作具体是在哪一个线程中被执行的。
进程视图可以描述成多层抽象,每个级别分别关注不同的方面。在最高层抽象中,进程结构可以看作是构成一个执行单元的一组任务。它可看成一系列独立的,通过逻辑网络相互通信的程序。它们是分布的,通过总线或局域网、广域网等硬件资源连接起来。
4、物理视图
主要考虑如何把软件映射到硬件上,它通常要考虑到系统性能、规模、可靠性等。解决系统拓扑结构、系统安装、通讯等问题。
当软件运行于不同的节点上时,各视图中的构件都直接或间接地对应于系统的不同节点上。因此,从软件到节点的映射要有较高的灵活性,当环境改变时,对系统其他视图的影响最小。
5、场景
可以看作是那些重要系统活动的抽象,它使四个视图有机联系起来,从某种意义上说场景是最重要的需求抽象。在开发体系结构时,它可以帮助设计者找到体系结构的构件和它们之间的作用关系。同时,也可以用场景来分析一个特定的视图,或描述不同视图构件间是如何相互作用的。
场景可以用文本表示,也可以用图形表示。
小结:
逻辑视图和开发视图描述系统的静态结构,而进程视图和物理视图描述系统的动态结构。
对于不同的软件系统来说,侧重的角度也有所不同。例如,对于管理信息系统来说,比较侧重于从逻辑视图和开发视图来描述系统,而对于实时控制系统来说,则比较注重于从进程视图和物理视图来描述系统。
软件体系结构的核心模型包括5中元素:构件、连接件、配置、端口和角色。(其中构件、连接件、和配置是最基本的元素)
构件:是具有某种功能的可重用的软件模板单元,表示了系统中主要的计算元素和数据存储。
连接件:表示构件之间的交互。
配置:表示了构件和连接件的拓扑逻辑和约束。
强调:软件体系结构目的是建立从软件需求到软件实现之间的鸿沟。
需求分析->建立体系结构->设计->实现->测试
软件体系结构风格是描述某一特定应用领域中系统组织方式的惯用模式。软件体系结构风格定义了用于描述系统的术语表和一组指导构建系统的规则。
软件体系结构风格的最关键的4要素内容:一个词汇表、定义一套配置规则、定义一套语义解释原则和定义对基于这种风格的系统所进行的分析。
经典的软件体系结构风格:
(1)数据流风格:批处理序列、管道与过滤器;
(2)调用/返回风格:主程序和子程序、面向对象风格、层次结构
(3)独立构件风格:进程通信、事件系统;
(4)虚拟机风格:解释器、基于规则的系统;
(5)仓库风格:数据库系统、黑板系统
1、管道与过滤器
每个构件都有一组输入和输出,构件读输入的数据流,经过内部处理,然后产生输出数据流。这个过程通常通过对输入流的变换及增量计算来完成,所以在输入被完全消费之前,输出便产生了。
这里的构件被称为过滤器,这种风格的连接件就象是数据流传输的管道,将一个过滤器的输出传到另一过滤器的输入。
典型应用:Unix Shell程序;编译原理(词法分析—语法分析—语义分析—代码生成)
特点:
不利因素:
2、数据抽象和面向对象系统
这种风格建立在数据抽象和面向对象的基础上,数据的表示方法和它们的相应操作封装在一个抽象数据类型或对象中。这种风格的构件是对象,或者说是抽象数据类型的实例。对象是一种被称作管理者的构件,因为它负责保持资源的完整性。对象是通过函数和过程的调用来交互的。
优点:
缺点:
3、基于事件的系统
构件不直接调用一个过程,而是触发或广播一个或多个事件。系统中的其它构件中的过程在一个或多个事件中注册,当一个事件被触发,系统自动调用在这个事件中注册的所有过程,这样,一个事件的触发就导致了另一模块中的过程的调用。
这种风格的主要特点是事件的触发者并不知道哪些构件会被这些事件影响。这样不能假定构件的处理顺序,甚至不知道哪些过程会被调用,因此,许多隐式调用的系统也包含显式调用作为构件交互的补充形式。
基于事件的隐式调用的应用系统:在编程环境中用于集成各种工具,在数据库管理系统中确保数据的一致性约束,再用户界面系统中管理数据,AddActionListener(new Event()){….}
优点:
缺点:
4、分层系统
层次系统组织成一个层次结构,每一层为上层服务,并作为下层客户。连接件通过决定层间如何交互的协议来定义,拓扑约束包括对相邻层间交互的约束。
例如:前端UI层、逻辑业务层、持久化层、数据库层
优点:
缺点:
5、仓库系统
在仓库风格中,有两种不同的构件:中央数据结构说明当前状态,独立构件在中央数据存贮上执行,仓库与外构件间的相互作用在系统中会有大的变化。
控制原则的选取产生两个主要的子类。若输入流中某类时间触发进程执行的选择,则仓库是一传统型数据库;另一方面,若中央数据结构的当前状态触发进程执行的选择,则仓库是一黑板系统。
黑板系统的传统应用是信号处理领域,如语音和模式识别。
黑板系统的三部分组成:
6、C2 风格
通过连接件绑定在一起的按照一组规则运作的并行构建网络。
组织规则如下:
系统中的构件和连接件都有一个顶部和一个底部;
构件的顶部应连接到某连接件的底部,构件的底部则应连接到某连接件的顶部,而构件与构件之间的直接连接是不允许的;
一个连接件可以和任意数目的其它构件和连接件连接;
系统中的构件可实现应用需求,并能将任意复杂度的功能封装在一起;
所有构件之间的通讯是通过以连接件为中介的异步消息交换机制来实现的;
构件相对独立,构件之间依赖性较少。系统中不存在某些构件将在同一地址空间内执行,或某些构件共享特定控制线程之类的相关性假设。
C/S体系结构定义了工作站如何与服务器相连,以实现数据和应用分布到多个处理机上。
C/S体系结构有三个主要组成部分:数据库服务器、客户应用程序和网络。
优点:
缺点:
◎ 开发成本较高
◎ 客户端程序设计复杂
◎ 信息内容和形式单一
◎ 用户界面风格不一,使用繁杂,不利于推广使用
◎ 软件移植困难
◎ 软件维护和升级困难
◎ 新技术不能轻易应用
将应用功能分成表示层、功能层和数据层三个部分。
优点:
浏览器 / Web服务器 / 数据库服务器
缺点:
CORBA-对象管理结构。OMG基于面向对象技术,给出了以对象请求代理(ORB)为中心的对象管理结构。
在OMG的对象管理结构中,ORB是一个关键的通信机制,它以实现互操作性为主要目标,处理对象之间的消息分布。对象服务实现基本的对象创建和管理功能,通用服务则使用对象管理结构所规定的类接口实现一些通用功能。
CORBA的技术规范包括4部分:
1、接口定义语言;2、接口池;3、动态调用接口;4、对象适配器
定义:
正交软件体系结构由组织层和线索的构件构成。层是由一组具有相同抽象级别的构件构成。线索是子系统的特例,它是由完成不同层次功能的构件组成(通过相互调用来关联),每一条线索完成整个系统中相对独立的一部分功能。每一条线索的实现与其他线索的实现无关或关联很少,在同一层中的构件之间是不存在相互调用的。
如果线索是相互独立的,即不同线索中的构件之间没有相互调用,那么这个结构就是完全正交的。
特征:
优点:
HMB风格基于层次消息总线/支持构件的分布和并发,构件之间通过消息总线进行通信。 消息总线是系统的连接件,负责消息的分派、传递和过滤以及处理结果的返回。各个构件挂接在消息总线上,向总线登记感兴趣的消息类型。构件根据需要发出消息,由消息总线负责把该消息分派到系统中所有对此消息感兴趣的构件,消息是构件之间通信的唯一方式。构件接收到消息后,根据自身状态对消息进行响应,并通过总线返回处理结果。由于构件通过总线进行连接,并不要求各个构件具有相同的地址空间或局限在一台机器上。该风格可以较好地刻画分布式并发系统。
构建接口
消息总线
功能:1 消息登记 ;2 消息分派和传递 ;3 消息过滤
构件动态行为
构件的行为同时受外来消息类型和自身当前所处状态的影响。
不同的结构有不同的处理能力的强项和弱点,一个系统的体系结构应该根据实际需要进行选择,以解决实际问题。
SIS 是指系统可以分成若干个不同的部分,每个部分作为单独的系统独立开发。整个系统通过一组互联系统实现,而互联系统之间相互通信,履行系统的职责。
从属系统可以自成一个软件系统,脱离上级系统而运行。从属系统之间是独立的,每个从属系统实现一个子系统。子系统依赖于彼此的接口,但相互之间相对独立。
软件过程:
DSSA就是专用于一类特定类型的任务(领域)的、在整个领域中能有效地使用的、为成功构造应用系统限定了标准的组合结构的软件构件的集合。
石油工业大型软件开发、测井、钻井、录井。
软件体系结构的描述方法可以分为:文字表达工具、数学表达工具、图形表达工具。
1、图形表达工具;2、模型内连接语言;3、基于软构件的系统描述语言;4、软件体系结构描述语言
可重用的体系结构描述框架建议,基于RUP、采用UML模型描述软件体系结构。
4个视角:需求视点、设计视点、实现视点、测试视点。
7个体系结构视图:用例视图、域视图、非功能需求视图、逻辑视图、实现视图、过程视图、部署视图。
ADL与其他语言的比较
构造能力:ADL能够使用较小的独立体系结构元素来建造大型软件系统;
抽象能力**:**ADL使得软件体系结构中的构件和连接件描述可以只关注它们的抽象特性,而不管其具体的实现细节;
重用能力:ADL使得组成软件系统的构件、连接件甚至是软件体系结构都成为软件系统开发和设计的可重用部件;
组合能力:ADL使得其描述的每一系统元素都有其自己的局部结构,这种描述局部结构的特点使得ADL支持软件系统的动态变化组合;
异构能力:ADL允许多个不同的体系结构描述关联存在;
分析和推理能力:ADL允许对其描述的体系结构进行多种不同的性能和功能上的多种推理分析。
ADL构成要素
构件:计算或数据存储单元
连接件:用于构件之间交互建模的体系结构构造块及支配这些交互的规则
体系结构配置:描述体系结构的构件与连接件的连接图
UML
XML特点
XML的作用
XML的应用
XML与HTML的区别
XML文档
XML文档必须是组织良好的和有效的
满足三项基本规则:
DTD(文档类型定义)是对XML数据的语法结构的描述,对XML数据文档的内容作出规定。使用DTD,不同的人就能够使用共同的DTD来交换数据。
XML模式优势:
CSS与XSL
1、DOM
为 XML 文档的已解析版本定义了一组接口。解析器读入整个文档,然后构建一个驻留内存的树结构,然后代码就可以使用 DOM 接口来操作这个树结构。
优点:整个文档树在内存中,便于操作;支持删除、修改、重新排列等多种功能;
缺点:将整个文档调入内存(包括无用的节点),浪费时间和空间;
使用场合:一旦解析了文档还需多次访问这些数据; 硬件资源充足(内存、CPU)
2、SAX
SAX ,事件驱动。当解析器发现元素开始、元素结束、文本、文档的开始或结束等时,发送事件,程序员编写响应这些事件的代码,保存数据。
优点:不用事先调入整个文档,占用资源少;SAX解析器代码比DOM解析器代码小,适于Applet,下载
缺点:不是持久的;事件过后,若没保存数据,那么数据就丢了;无状态性;从事件中只能得到文本,但不知该文本属于哪个元素;
使用场合:对大型文件进行处理;只需XML文档的少量内容,很少回头访问;机器内存少;
3、JDOM
为减少DOM、SAX的编码量,出现了JDOM;
优点:20-80原则,极大减少了代码量
使用场合:要实现的功能简单,如解析、创建等; Java程序;但在底层,JDOM还是使用SAX(最常用)、DOM。
4、JAPX
为多个XML解析器提供了统一编程接口
更换解析器,不用更改代码
使用场合:若不用Jdom,一般建议使用JAPX,将代码与各种解析器的实现细节隔离。
利用SAX解析XML文件的步骤:
创建解析工厂,通过SAXParserFactory的静态newInstance方法获取SAXParserFactory实例factory
SAXParserFactory factory = SAXParserFactory.newInstance();
由工厂创建解析器
**SAXParser parser = factory.newSAXParser(); **
创建一个类继承DefaultHandler,重写其中的一些方法进行业务处理并创建这个类的实例Handler
SAXParserHandler handler = new SAXParserHandler();
解析操作
parser.parse(“book.xml”, handler);
Dom4J解析
//1、读取XML文档,使用SAXReader对象
SAXReader reader=new SAXReader();
Document doc=reader.read("book.xml");
//2、设置XML文档的编码格式为UTF-8格式 参数:1 缩进,2 换行
OutputFormat format=new OutputFormat("",false);
format.setEncoding("UTF-8");
//3、保存XML文档,使用XMLWriter对象的write方法
XMLWriter writer=new XMLWriter(new FileWriter("xx.xml"),format);
writer.write(doc);//写文件写的是doc,这个doc就是book.xml
writer.close();
Element是一个元素对象,可以嵌套的,通过枚举这个Element对象,来获取XML元素的值。
在不知道属性名称的情况下,可以使用attributes()方法遍历元素的所有属性,从而动态的取出name和value。
List eleList=root.elements(); 不停地嵌套操作,就可以遍历所有XML文件中的元素。
XBA:XML Based Architecture Description Language
XBA一种体系结构描述语言,XBA主要是把XML语言应用于软件体系结构的描述。通过对组成体系结构的基本元素进行描述,同时利用XML的可扩展性,对现有的各种ADL(Architecture Description Language)进行描述和定义。
XBA主要围绕体系结构的三个基本抽象元素:构件、连接件和配置。它实现了一种切实可行的描述软件体系结构的方法。
对一个构件的描述有两个重要的部分:接口(interface)和计算(computation);接口是由一组端口(port)组成,每一个端口代表这个构件可能参与的交互。计算部分描述了这个构件实际所做的操作。
利用XBA描述软件体系结构的主要优点有:
1、XBA具有开放的语义结构,继承了XML的基于Schema的可扩展机制,在使用了适当的扩展机制之后,XBA可以表示多种体系结构风格,而且可以利用XML Schema的include和import等机制来重用已经定义好的XML Schema,实现ADL的模块化定义;
2、利用XML的链接机制,可以实现体系结构的协作开发。可以先把体系结构的开发分解,由不同的开发者分别开发,然后利用XML的链接机制把它们集成起来。
3、易于实现不同ADL(Architecture Description Language)开发环境之间的模型共享。可能会存在多种基于XML的ADL开发工具,尽管它们所使用的对ADL的XML描述会有不同,但通过XSLT技术,可以很方便地对在同一体系结构的不同XML描述之间进行转换。
体系结构的动态性主要分为三类:
1、交互式动态性
2、结构化动态性
3、体系结构动态性
允许在系统运行时发生更新的软件体系结构成为动态软件体系结构。
支持动态更新:(1)语言层面:Darwin,Unicon,Wright;(2)工具层面:ArchStudio,SAA
基于构件的动态系统结构模型支持运行系统的动态更新,该模型分为3层:应用层、中间层和体系结构层。应用层:最底层—对应操作、函数;中间层—对应构件;体系结构层:体系结构配置
应用层:包括构件连接、构件接口和执行。在这一层可以添加删除更新构件。
中间层:包括连接件配置、构建配置、构建描述和执行。
体系结构层控制和管理整个体系结构,包括体系结构配置,体系结构描述和执行。
在更新之前要确保所涉及的构件停止发送新的请求;连接件的请求队列中的请求全部已被执行。
更新描述包括的部分:
1、更新类型(update type):包括增加、删除、修改一个构件;
2、更新对象列表(list of update objects):需要更新对象类的ID号;
3、对象的新版本说明(new version of objects):对象的新版本执行情况;
4、对象更新方法(update method):更替、动态和静态;
5、更新函数(update function):用来更新一个执行对象进程的状态转换函数;
6、更新限制(update constraints):用来描述更新和它们之间的关系的序列;例如:只有学习了C++,才能学习面向对象编程。
更新执行的步骤:
(1)检测更新的范围:判断是局部更新,还是全局更新。
(2)更新准备工作:如果更新发生在应用层,构件配置器等待参与的进程发出信号,以表明它们已处于可安全执行更新的状态;如果更新发生在配置层,需要等待连接件中断通信,其他构件配置器已完成它们的更新。
(3)执行更新:执行更新,并告知更新发起者更新的结果。
(4)存储更新:将构件或体系结构所做的更新存储到构件或体系结构描述中。
局部更新实例分析
第一步:更新发起者发出一个更新请求要求,这个请求被送到构件A的构件配置器中,构件配置器将分析更新的类型,从而判断出更新是局部更新。
第二步:由于更新是局部更新,构件A的配置器发出一个信号给连接件以隔离构件A的通信,准备执行更新。
第三步:构件A的配置器开始执行更新操作。
第四步:更新执行完毕后,构件A的构件描述被更新,并且构件A发送一个消息给连接件B,两者间的连接被重新存储起来。
第五步:将更新结果返回给更新发起者。
由上述分析可知,在整个更新过程中,构件C都没有受到影响,这说明CBDSAM的方法,不会影响系统的其他部分执行。
全局更新实例分析
第一步:Server构件配置器接收到更新发起者提出的更新请求后,向体系结构配置器提出更新请求。
第二步:体系结构配置器对更新请求的类型进行分析,判断是否在更新请求限制范围内,不在更新范围内的更新不予执行,如果在更新范围内,体系结构配置器对更新所涉及的连接件和构件发出消息,要求他们做好更新准备工作。
第三步:准备工作完成后,Client构件配置器和连接件向体系结构配置器返回就绪信息。
第四步:一切准备就绪后,体系结构配置器通知Server构件进行更新。
第五步:更新执行完毕后,向Server构件配置器、体系结构配置器、更新发起者通知更新执行完毕并返回更新结果;同时,体系结构配置器通知Client构件和连接件更新结束,可以继续正常工作。
SOA是一种应用程序体系结构,在这种体系结构中,所有功能都定义为独立的服务,这些服务带有定义明确的可调用接口,能够以定义好的顺序调用这些服务来形成业务流程。
SOA系统原型的典型例子:CORBA,SOA是建立在XML等新技术的基础上的。
SOA的特征
(1)松散耦合;(2)粗粒度服务;(3)标准化接口
SOA的设计原则
(1)明确定义的接口;(2)自包含和模块化;(3)粗粒度;(4)松耦合;(5)互操作性、兼容和策略声明
SOA的主要抽象级别
操作、服务、业务流程
SOA的关键技术
SOA的实现方法
WebService、企业服务总线、服务注册表。