软件设计与体系结构复习整理题目与复习资料.docx
《软件设计与体系结构复习整理题目与复习资料.docx》由会员分享,可在线阅读,更多相关《软件设计与体系结构复习整理题目与复习资料.docx(53页珍藏版)》请在冰豆网上搜索。
软件设计与体系结构复习整理题目与复习资料
1、各种性能指标的定义及如何到达各种性能指标的方法ppt1-8119页-124页
①性能:
吞吐量Throughput、响应时间ResponseTime、Deadlines
②实现吞吐量:
Peak&AverageManysystemhavelowaveragebuthighpeakthroughputrequirements
③实现响应时间:
Guaranteed&AverageE.g.95%ofresponsesinsub-4seconds,andallwithin10seconds
④Dealines:
DeadlinesoftenassociatedwithbatchjobsinITsystems
2、常用的中间件有那几种类型(四种)
分类:
BusinessProcessOrchestrators业务流程协调器
MessageBrokers消息代理
ApplicationServers应用服务器
Transport
面向消息的中间件,分布式对象系统
(1)CORBA---公用对象请求代理(调度)程序体系结构,它在对象间建立客户-服务器的关系,这样一个客户可以很简单地使用服务器对象的方法而不论服务器是在同一机器上还是通过一个网络访问。
(常见的对象请求代理架构)
(2)BasicMessage-oriented middleware---- MOM指的是利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。
通过提供消息传递和消息排队模型,它可在分布环境下扩展进程间的通信,并支持多通讯协议、语言、应用程序、硬件和软件平台。
(面向消息的中间件)
(3)J2EE---- J2EE核心是一组技术规范与指南,其中所包含的各类组件、服务架构及技术层次,均有共同的标准及规格,让各种依循J2EE架构的不同平台之间,存在良好的兼容性,解决过去企业后端使用的信息产品彼此之间无法兼容,企业内部或外部难以互通的问题。
(4)Message brokers----消息代理是一种在数据源与目的地之间移动数据使信息处理流畅的软件技术,数据源与目的地包括已有的应用、文件、数据库、对象、硬拷贝输出及Web客户端等。
(消息代理)
(5)Business process orchestrators----“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档、信息或任务的过程自动进行,从而实现某个预期的业务目标,或者促使此目标的实现”。
(业务过程代理)
3、什么是软件架构(好几种定义,但是主要点是结构,元素,关系,接口)PPT第4页
架构是一个系统的基本组织,体现在它的组件,它们之间的相互关系和环境,其设计原则和进化论
程序或计算系统的软件架构是系统的结构或结构,由软件元素,这些元素的外部可见的属性,它们之间的关系
(软件架构)超过计算的算法和数据结构;设计和指定的总体系统结构作为一种新的问题出现。
结构性问题包括组织和全球生产总值(gdp)控制结构;协议进行通信,同步和数据访问;分配的功能设计元素;物流;设计元素构成;扩展和性能,设计方案中选择
它是关于软件设计:
所有的架构是软件设计,但不是所有的设计都是软件架构。
设计过程的一个部分;简单地说,架构关注“一旦系统建立后就很难或是不可能改变的问题”:
质量属性,例如安全性,性能;非功能性需求,像开销,硬件配置。
【XX答案】软件架构(softwarearchitecture)是一系列相关的抽象模式,用于指导大型软件系统各个方面的设计。
软件架构是一个系统的草图。
软件架构描述的对象是直接构成系统的抽象组件。
各个组件之间的连接则明确和相对细致地描述组件之间的通讯。
在实现阶段,这些抽象组件被细化为实际的组件,比如具体某个类或者对象。
在面向对象领域中,组件之间的连接通常用接口_(计算机科学)来实现
系统的软件体系结构是建立一个对系统来说所需要的结构,包括软件元素,它们之间的关系,以及两者的性质。
4、什么是架构风格PPT1-836页
⏹AnArchitecturalStyledefinesafamilyofsystemsintermsofapatternofstructuralorganization.Itdetermines:
❑thevocabularyofcomponentsandconnectorsthatcanbeusedininstancesofthatstyle,
❑asetofconstraintsonhowtheycanbecombined.Forexample,onemightconstrain:
⏹thetopologyofthedescriptions(e.g.,nocycles).
⏹executionsemantics(e.g.,processesexecuteinparallel).
描述软件的基本结构组织或纲要,提供事先定义好的子系统,制定好责任并将它们组织在一起的法则和指南。
|答案2:
也叫架构模式,一个架构风格描述软件系统里的基本的结构组织或纲要。
架构风格提供一些事先定义好的子系统,指定他们的责任并给出把他们组织在一起的法则和指南。
一个架构模式常常可以分解成很多个设计模式的联合使用。
MVC模式就属于架构模式。
软件系统有哪几类结构?
模块、组件和连接器、配置。
模块分配具体的职责,是工作的基础;
我们调用运行时结构组件和连接器结构,在我们的使用中,组件始终是运行时实体;
分配结构描述从软件结构映射到系统的环境,组织、发展、安装、执行;
元素是一类模块(类、层或功能的划分等),模块与其他模块相关联通过概括化或专业化的关系;
元素运行组件如服务、同行、客户、服务器、过滤器等,连接器是组件间的通信工具;
5、有那些常见架构风格
(1)管道和过滤器架构风格 PPT40页
适用于需要定义一系列的执行规则数据的独立运算。
组件在输入时读数据流,在输出时产生数据流。
优点:
易于理解、支持重用、容易保持或增强、允许某些专业分析、支持并发执行
缺点:
转换特性导致其不擅长处理交互系统、书写自己的过滤器时,过度地解析或不解析导致性能损失和更加复杂
举例:
unix的shell脚本、传统编译器
组件:
称为过滤器,应用于对局部的输入流的转换,经常增长的计算,因此,在输入结束前输出就开始了。
. 连接器:
称为管道,给流提供管道,把一个过滤器的输出传输到另一个输入。
(2)面向对象风格 PPT49页
适用于主要问题是识别和保护信息的相关主体。
数据代理和它们相关的操作封装在一个抽象数据类型里面。
优点:
可以改变实施而不影响客户,可以设计作为独立的交互代理的集合的系统
缺点:
一个对象与另一个对象进行交互时第一个对象必须知道第二个对象的身份。
对象引起的副作用。
举例:
java,c#开发的系统
组件:
对象
连接器:
功能和过程调用(方法)
(3)隐式调用风格
应用于涉及到组件的松耦合集,其中的每一个都执行一些操作,还可能允许其他的操作。
尤其对必须很快重新配置的应用很有用
改变服务的供应商
可能的或是不可能的能力
不是直接的引用过程
一个组件能发表一个或多个事件
在系统中的其他组件能够在事件中注册一个兴趣通过与事件和过程结合
当一个事件被声明后,广播系统(连接器)自己引用已经注册的事件的所有过程
所有声明的事件“隐式”造成了过程在其他模块的调用
优点:
为重用提供强大支持、简化系统演化
缺点:
当一个系统广播一个事件时,不知道其他哪些组件会响应,不知道依赖于响应被调用的顺序,不知道响应什么时候结束
举例:
数据库管理系统中执行完整性约束(触发器)
(4)客户-服务器风格 PPT64页
适用于涉及到分布式的数据和跨越一系列的组件的处理
优点:
数据分布简单明确、位置透明、混合和匹配异构平台、易于添加新服务器或升级现有服务器。
缺点:
没有名称和服务的中央寄存器—很难找到什么服务是没用的
举例:
文件服务器、数据库服务器、对象服务器
组件:
服务器:
标准独立的组件提供特别的服务,如打印,数据管理等。
客户端:
组件调用服务器提供的服务。
连接器:
网络,允许客户端访问远程服务器。
(5)分层风格 PPT72页
适用于涉及到分布式的能够分层的组织的类的服务,每层给它的上一层提供服务,同时作为下一层的客户端,只有仔细地从内层选择选择过程,才能用于他们临近的外层。
优点:
设计(基于提高抽象层次)、改善(一个层的功能改变最多影响两个层)、重用(相同层的不同实现可以交替使用)
缺点:
并不是所有的系统都可以很容易的实现分层,性能需求可能迫使底层实现高级功能的耦合。
举例:
分层通信协议、操作系统
组件:
典型的过程的集合。
连接器:
典型的在有限的可见性下的过程调用
(6) 仓库风格 PPT80页
适用于主要问题是建立、增加和维护复杂信息的主体部分,信息一定要能够用很多种方式操作。
经常需要长期的存在。
优点:
有效存储大量数据、共享式模式模型、集中式管理
缺点:
必须先达成一个数据模型、很难分配数据、数据升级很昂贵
举例:
信息系统、编程环境、图形编辑器、人工智能知识基础、逆向工程系统
组件:
主要的数据结构能够表示出系统的正确状态
操作主要数据结构的独立组件的集合
连接器:
典型地过程调用或是直接内存访问
(7)解释程序风格 PPT87页
适用于执行解决方案的最合适的语言或是机器不是直接可用的。
优点:
模拟无实现的硬件、促进跨多种平台的应用程序或语言可移植性
缺点:
举例:
编程语言编译器、基于规则的系统、脚本语言
组件:
包括一个状态机,有一个执行引擎和三个记忆状态:
当前的执行引擎的状态
程序被翻译
当前的被翻译的程序的状态
连接器:
过程调用
直接内存访问
(8)过程控制风格 PPT94页
适用于目的是维护特殊过程的输出属性在给定参考值的情形下
优点:
缺点:
举例:
实时系统软件用来控制(核电站、汽车巡航控制)
组件:
过程定义 包括操作一些过程变量的机制
控制算法 决定如何去操作过程变量
连接器:
数据流关系
过程变量:
被控制的变量的值是系统能控制的
输入变量能够检测过程的输入
操纵变量的值能够被控制器改变
设置断点 是一个控制变量所需要的值
传感器 获得过程变量与控制有关的值
6、架构师需要的核心技能是什么
(1) 涉众之间的交流
(2) 技术知识(3) 软件工程学 (4) 风险管理
7、什么是架构视图PPT15页
一个架构视图是对于从某一视角或某一点上看到的系统所做的简化描述,描述中涵盖了系统的某一特定方面,而省略了此方面无关的实体。
8、软件架构过程(三个迭代步骤)PPT1-8202页
1、确定架构需求:
架构上重要的需求(结构用例)---基本的质量和系统的非功能性需求
2、架构设计:
迭代的设计步骤---风险识别是一个重要的输出设计
3、结构验证:
验证阶段---验证阶段的目的是增加信心的设计团队的架构是适合的目的;验证必须实现在项目时间和预算的约束,关键是要尽可能严格的和有效的;验证一个架构设计提出了严峻的挑战,因为这是一个设计不能执行或测试,包括新和COTS组件集成;两种主要的方法:
手工测试使用的测试场景的体系结构,建设一个原型创建所需的应用程序的一个简单的原型;目的是识别潜在缺陷在设计实现生效前,这样他们就可以得到改善,在建造之前修复成本更便宜
9、软件质量属性主要包括哪些(五种)ppt1-8116页
Reliability可靠性、
Availability可用性、
Portability可移植性、
Scalability可伸缩性、
Performance(!
)性能
10、软件可用性取决于(三种时间)PPT146页
❑Timetodetectfailure故障检测时间
❑Timetocorrectfailure纠正失败时间
❑Timetorestartapplication重新启动应用程序时间
11、伸缩性涉及那些方面(四种)ppt1-8116页
❑Requestload请求负载
❑Connections连接
❑Datasize数据大小
❑Deployments部署
12、吞吐率指标PPT120页
❑Transactionspersecond每秒事务数
❑Messagesperminute每分钟的消息
❑Messagespersecond(msp)
❑Maximumsustainablethroughput(MST)最大可持续吞吐量
13、架构元素的通信包括哪些PPT10页
数据传递机制,例如:
函数调用、远程方法调用、异步消息
控制流:
组件之间的消息流来实现需要的功能、顺序、并发/并行、同步
14、各种架构风格的组件和连接器是什么
见5
15、软件性能指标主要有哪几种(三种)
吞吐量、响应时间、Deadlines生死线
16、响应时间的度量(两种)PPT122页
⏹Usuallymeasuredin(milli)seconds
Guaranteed可保证的、Average
17、安全性质量指标主要有哪几种(五种)PPT142页
⏹Authentication:
Applicationscanverifytheidentityoftheirusersandotherapplicationswithwhichtheycommunicate.
身份验证:
应用程序可以验证他们的用户的身份和他们通信的其他应用程序。
⏹Authorization:
Authenticatedusersandapplicationshavedefinedaccessrightstotheresourcesofthesystem.
授权:
身份验证的用户和应用程序定义了系统资源的访问权限。
⏹Encryption:
Themessagessentto/fromtheapplicationareencrypted.
加密:
从应用程序发送到/从应用程序的消息是加密的。
⏹Integrity:
Thisensuresthecontentsofamessagearenotalteredintransit.
完整性:
确保在传输过程中不会改变消息的内容。
⏹Non-repudiation:
Thesenderofamessagehasproofofdeliveryandthereceiverisassuredofthesender’sidentity.Thismeansneithercansubsequentlyrefutetheirparticipationinthemessageexchange.
不可否认性:
一个消息的发送者有传递的证明,接收者保证了发送者的身份。
这意味着既不能反驳他们的信息交换的参与。
18、实现高可用性的策略(三种)PPT146页
Strategiesforhighavailability:
Eliminatesinglepointsoffailure消除单点故障
Replicationandfailover复制和故障转移
Automaticdetectionandrestart自动检测和重新启动
19、信息隐藏原理
PPTlecture988页
信息隐藏指在设计和确定模块时,使得一个模块内包含的特定信息(过程或数据),对于不需要这些信息的其他模块来说,是不可访问的。
信息隐藏(封装)主要是为了提高软件的可重用性和可维护性。
信息隐藏造成了系统各个部分耦合性低。
系统是由各个部分构成的,如果这些部分耦合性低的话,那么这个系统开发、维护等就较容易
•Oftenonehides,e.g.
–Datarepresentation.
–Choiceofalgorithm.
–Interfacedetails/accessmechanismofexternalentity(e.g.database,hardware)
–…
•Goal:
particulardesignchoice“invisible”toclients.
Whywouldwewanttodothis?
•InformationHidingmayormaynotbesupportedattheprogramminglanguagelevel.
20、GRASP模式的具体内容(9个),各种模式的定义,解决的什么问题
创造者 Creator
分配给类B职责来创造类A的一个实例如果:
(1) B聚合A的对象
(2) B包含A的对象
(3) B记录A的对象的实例 (4) B紧密地使用A的对象
(5) B被创建时有初始化的数据传递给
解决方案:
将创建一个类A的实例的职责指派给类B的实例,如果下列条件满足的话:
a) B聚合了A对象
b) B包含了A对象
c) B纪录了A对象的实例
d) B要经常使用A对象
e) 当A的实例被创建时,B具有要传递给A的初始化数据(也就是说B是创建A的实例这项任务的信息专家)
f) B是A对象的创建者
如果以上条件中不止一条成立的话,那么最好让B聚集或包含A
通俗点就是:
我要用你所以我来创建你,请不要让别人创建你
这个模式是支持低耦合度原则的一个体现
专家 Creator
在设计对象(类)时,如果某个类能够在某方面具有完整信息,足以实现某责任,就将这个责任分配给这个类,
解决方案:
将职责分配给具有履行职责所需要的信息的类
通俗点就是:
该干嘛干嘛去,别管别人的闲事或者我的职责就是搞这个,别的事不管。
举个简单的例子,如果有一个类是专门处理字符串相关的类,那么这个类只能有字符串处理相关的方法,而不要将日期处理的方法加进来。
也就是提高软件高内聚一种原则。
控制器 Controller
控制器是在用户接口层上的第一个对象,负责接收和处理系统的操作信息。
解决方案:
将处理系统事件消息的职责分派给代表下列事物的类:
a) 代表整个“系统”的类(虚包控制者)
b) 代表整个企业或组织的类(虚包控制者)
c) 代表真实世界中参与职责(角色控制者)的主动对象类(例,一个人的角色)
d) 代表一个用况中所有事件的人工处理者类,通常用“<用例名>处理者”的方式命名(用例控制者)
这是一个控制者角色职责分配的原则,就是哪些控制应该分派给哪个角色。
低耦合 LowCoupling
测量存在于模块之间的依赖程度
解决方案:
在分配一个职责时要使保持低耦合度。
耦合度(coupling)是一个类与其它类关联、知道其他类的信息或者依赖其他类的强弱程度的度量。
一个具有低(弱)耦合度的类不依赖于太多的其他类。
高内聚 HighCohesion
测量一个共享的模块内元素的相关性 ;一个单独模块执行任务的程度是功能相关的
解决方案:
分配一个职责的时候要保持类的高聚合度
聚合度或内聚度(cohesion)是一个类中的各个职责之间相关程度和集中程度的度量。
一个具有高度相关职责的类并且这个类所能完成的工作量不是特别巨大,那么他就是具有高聚合度。
多态 Polymorphism
当相关的供选方案或行为随着类型的变化而变化时,给行为分配职责—使用多态操作—来适合行为变化的类型。
也就是说尽量对抽象层编程,用多态的方法来判断具体应该使用那个类,而不是用ifinstanceof 来判断该类是什么接来执行什么。
纯虚构 PureFabrication
分配一系列高度聚合的职责给虚假的类或是不表现某事完成的领域问题概念的有用的类,它支持高内聚、低耦合、可重用。
一个纯虚构意味着虚构某些事物,而不是到了迫不得已我们才这样做。
例,我们的Sale类的数据要存入数据库,但是他必须和数据库接口相连接,如果将接口连接放入Sale类中势必增加该类的耦合度,所以我们可以虚构一个类来处理与数据库接口连接的问题。
这个类就是我们虚构出来的一个事物。
间接 Indirection
问题:
如何分配职责避免直接耦合?
如何减弱对象的耦合?
解决方案:
分配职责给中间的调解对象来调解两个组件之间的关系。
将职责分配给一个中间对象以便在其他构件或服务之间仲裁,这样这些构件或服务没有被直接耦合。
这个中间对象(intermediary)在其他构件或服务间创建一个中介者(Indirection)。
这个中间对象也就事7)中的纯虚构。
防止编译ProtectedVariations
问题:
如何设计对象,子系统和系统,使其内部的变化和不稳定不会对其他元素产生不良影响?
解决方案:
识别设计变化或不稳定之处,分配职责用以在这些变化之外创建稳定接口
分配职责给一个客户端的直接对象以使它与一个间接对象进行协作,这样客户端无需知道这个间接对象。
这个模式-也被叫做(Demeter)准则。
通俗点就是:
只与你直接的朋友们通信
不要跟“陌生人”说话
每个软件单位对其他的单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位
GRASP用职责设计对象:
"Designing Objects with Responsibilities".它包含了9个基本模式:
1.信息专家(Information expert) 2.创建者(Creator) 3.高内聚(High Cohesion) 4.低耦合(Low Coupling) 5.控制器(Controller) 6.多态性(Polymorphism) 7.纯虚构(Pure Fabrication) 8.间接性(Indirection) 9.变化预防(Protected Variations)
GRASP的主要特征:
- 对象职责分配的基本原则。
- 主要应用在分析和建模上。
GRASP的核心思想的理解:
自己干自己的事(职责的分配) 自己干自己的能干的事(职责的分配) 自己只干自己的事(职责的内聚)
21、OO设计的五个基本原则及课件中讲述的其它软件原理r-32-71
单一职责原则
这个原则和关注点分离紧密联系。
它陈述了每个对象应该只有一个理由去改变,