《软件工程——理论、方法与实践》课件第6章.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《《软件工程——理论、方法与实践》课件第6章.ppt》由用户(momomo)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件工程理论、方法与实践 软件工程 理论 方法 实践 课件
- 资源描述:
-
1、1 1第6章 软 件 设 计第6章 软 件 设 计6.1 软件设计过程6.2 软件设计原则6.3 体系结构设计6.4 控制模型6.5 模块分解6.6 体系结构设计案例本章小结习题2 2第6章 软 件 设 计6.1 软件设计过程软件设计活动主要涉及体系结构设计、数据设计、接口设计和组件(过程)设计等内容,是将需求分析模型转换为设计模型的过程,如图6.1所示。3 3第6章 软 件 设 计图6.1 软件设计过程的主要活动4 4第6章 软 件 设 计6.2 软件设计原则软件设计活动应遵循一定的原则以提高软件实现的质量。软件设计应使软件实体有明显的层次结构,以利于软件元素间的控制;软件应是模块化的且模块
2、具有独立性;软件实体边界要清晰,具有良好的接口;设计规格说明也要清晰、简洁、完整、无二义性。5 5第6章 软 件 设 计6.2.1 模块化和信息隐蔽一个软件系统通常是一个能完成多种需求的复杂系统,例如一个图书管理系统,需要能处理图书的分类登记、定购、借阅等多种服务,而仅用一个模块来实现复杂系统是不现实的。经验表明人类求解问题过程的复杂性和工作量与单个问题的规模密切相关。6 6第6章 软 件 设 计设待求解的问题为X,则C(X)和E(X)分别为X相应的复杂性和解决问题所需要的工作量。设对于问题P1、P2,若有C(P1)C(P2),则有E(P1)E(P2)。而另一方面,人类实践表明:C(P1+P2
3、)C(P1)+C(P2)因此E(P1+P2)E(P1)+E(P2)7 7第6章 软 件 设 计这说明将一个复杂的大系统分解成若干个相对简单的子系统(Subsystem)称为大系统模块化,使得求解问题的复杂性和工作量比一个大系统要小,求解更为容易。但模块的分解并非越多越好,模块之间存在着交互接口,当模块过多时,将会增加接口的代价,图6.2说明了这样的问题。从图中可以看出,对于给定的问题,分解的粒度有一个最小成本区M,模块分解得过多或过少均会带来较大的成本开销。8 8第6章 软 件 设 计图6.2 模块与软件消耗9 9第6章 软 件 设 计一个复杂的系统可以按层次分解为子系统(Subsystem)
4、,组件/服务(Components/Services),类(Class)和函数(function),它们构成了不同层次的系统模块,如图6.3所示。1010第6章 软 件 设 计图6.3 复杂系统的构成1111第6章 软 件 设 计6.2.2 内聚和耦合内聚(Cohesion)是子系统内部的相关程度。当子系统中彼此相关的多个对象执行类似的任务时,则认为该子系统是高内聚的;反之,当子系统内的多个对象彼此不相关时,则认为系统是低内聚的。高内聚的方法完成且仅完成一个功能,这使得子系统易于理解和维护。例如方法changeItem()要完成书目的读取、增加、修改和删除等若干方法的功能,则需具有较多的代码行
5、和较复杂的控制逻辑以便完成多个功能,这会为程序的可理解性带来影响,并且由于功能较多将会有较多的其他模块与之发生关联,给后期的维护带来困难。1212第6章 软 件 设 计偶然内聚是指一个模块内容为了节约空间,将并无多少逻辑关联的代码和数据组合在一起,常见的偶然内聚发生是当程序员写完一个程序后发现有一组语句多处出现,于是为节省内存便将这组语句单独组成一个模块;逻辑内聚是指一个模块完成的多个任务逻辑上相关。1313第6章 软 件 设 计例如,一个模块完成所有类型的数据输出,这类模块调用时需要传送控制信息,以便控制不同任务的处理;如果一个模块包含的多个任务必须在同一时间段内执行,则称之为时间内聚,例如
6、一个系统的初始化模块;过程内聚则是指模块内成分彼此逻辑相关,并且必须按特定的次序执行;模块中各成分引用共同的输入数据或产生相同的输出数据则称为通信内聚,这意味着一个模块可能包含多个功能,但却是对相同的数据进行操作,见图6.4;如果一个模块内的各处理成分均与同一功能相关,且这些处理必须顺序执行,即模块中某个成分的输出是另一成分的输入则称顺序内聚,见图6.5;如果模块完成单个功能且不易再分解,则称功能内聚,如求平方根、计算利息等。1414第6章 软 件 设 计图6.4 通信内聚1515第6章 软 件 设 计图6.5 顺序内聚1616第6章 软 件 设 计偶然内聚、逻辑内聚、时间内聚被认为是低级内聚
7、,设计时应尽量避免。过程内聚、通信内聚是中级内聚,而顺序内聚和功能内聚则是高级内聚。设计时应提高内聚度从而获得较好的模块独立性。如高内聚的类表示且仅表示一种类型的对象,例如在一个大学人事管理系统中使用Professor类则比用Employee类更好,因为Employee类涵盖的范围更大。1717第6章 软 件 设 计耦合(Coupling)表示两个子系统(或类)之间的关联程度,当一个子系统(或类)发生变化时对另一个子系统(或类)的影响很小,则称它们是松散耦合的;反之,如果变化的影响很大时,则称它们是紧密耦合的。耦合的强弱取决于模块间接口的复杂性、引用模块的位置和数据的传送方式等。设计时应尽量使
8、模块间的耦合度小,模块间的耦合度直接影响系统的可理解性、可测试性、可靠性和可维护性。1818第6章 软 件 设 计耦合也可分为七级,从低至高为:非直接耦合(Nondirect coupling)、数据耦合(Data coupling)、标记耦合(Stamp coupling)、控制耦合(Control coupling)、外部耦合(External coupling)、公共耦合(Common coupling)、内容耦合(Content coupling)。耦合度应越低越好。1919第6章 软 件 设 计若两模块间彼此无任何交互,则称之为非直接耦合;若两模块间仅通过参数交换信息则称为数据耦合,
9、一般系统中均需要存在这类耦合;如果模块间传送的参数包含着复合数据结构,则为标记耦合,例如含有若干数据项的数据记录;若传递的参数中含有控制信息则上升为控制耦合,如一个标志信息用于控制模块内部逻辑(见图6.6);当若干模块与同一个外部环境关联,则模块间存在着外部耦合。如I/O处理使所有I/O模块与特定的设备、格式和通信协议相关联;公共耦合则是指模块间存在着全局变量、公共数据区或可共享的文件等;而内容耦合是指模块间存在着一个模块直接转入另一模块的内部或一个模块直接使用另一模块的数据或控制信息,见图6.7。2020第6章 软 件 设 计图6.6 控制耦合2121第6章 软 件 设 计图6.7 内容耦合
10、2222第6章 软 件 设 计6.2.3 抽象和求精“抽象(Abstract)是人类处理复杂问题的基本方法之一”(Booch)。抽象是对问题的简化和概括,它忽略了问题的某些细节,有助于把握问题的本质。抽象是分层次的,在软件系统中,高层次的抽象是概念性的,例如用例模型。较低层次的抽象则是具体解决方案和细节,例如类的定义。抽象是自底向上的,是从细节到概要的过程。求精(Refine)是抽象的逆过程,是对问题自顶向下逐步分解、细化至细节的过程。抽象和细化不仅是软件设计反复运用的原则,也贯穿于软件过程活动中。图6.8示意了对同一问题的两个不同抽象级别的描述,可以看出算法2是算法1的细化,而算法1是算法2
11、的抽象。2323第6章 软 件 设 计图6.8 对同一问题的两个不同抽象级别的描述2424第6章 软 件 设 计6.2.4 复用所谓复用(Reuse)就是利用某些已开发的、对建立新系统有用的软件元素来生成新的软件系统。复用的好处在于提高生产效率,提高软件质量,改善软件系统的可维护性。目前软件技术的发展和软件机构项目经验的积累,已具有大量商品化或非商品化的成熟软件组件,因此一个新的系统的构成,可以充分复用现成的软件组件,仅需部分编码。成熟的组件具有较小的风险,且可以加速开发工作和降低开发成本及维护代价。2525第6章 软 件 设 计6.3 体系结构设计6.3.1 什么是体系结构软件体系结构的概念
12、早在20世纪80年代就已经提出。真正引起关注和重视是在90年代,有效的软件体系结构及明确的描述和设计,已经成为软件工程领域中重要的主题。许多研究人员基于自己的经验从不同角度、不同侧面对体系结构进行了刻画。2626第6章 软 件 设 计软件体系结构涉及多方面的内容:软件的组成组件及系统构架;软件各组件的选择,各组件之间的相互作用,软件组件的进一步分解以及指导软件分解过程的总体模式;系统的功能、性能、设计以及从多种方案中进行选样的决策。软件体系结构关注的是系统结构及其组成组件,软件体系结构设计开始于系统的早期设计阶段。体系结构模型主要描述以下属性:系统的组件,包括功能组件和数据组件;系统组件间的连
13、接,包括数据流和控制流;组件和连接的约束,包括组件间的通信协议,组件间的同步等;以及用组件和连接表示的系统整体结构的拓扑关系。因而组件和连接器是软件体系结构的两大构成部分。2727第6章 软 件 设 计最简单的连接器可表现为组件之间的直接连接,如功能调用。当情况复杂时,则有专门的连接器,正如连接硬件设备的特定连接装置,软部件之间也需要连接器,如进程间通信所构成的连接器。连接器的通用表示如图6.9所示。2828第6章 软 件 设 计图6.9 连接器的通用表示2929第6章 软 件 设 计6.3.2 体系结构设计策略一个子系统的识别和设计过程实际是将一个系统分解为大粒度组件的过程,通常可以用块图来
14、描述,也可用UML的包图表示。图6.10构成了一个层次结构的体系结构。3030第6章 软 件 设 计图6.10 OSI体系结构3131第6章 软 件 设 计基于已有的知识和经验,体系结构的设计决策主要应考虑以下一些问题:(1)对于被设计的系统来说,是否存在通用的体系结构模板?(2)所设计的系统是否要分布在不同的处理器上?(3)对于系统来说什么是适合的体系结构风格?(4)建立系统结构的基本方法是什么?(5)系统的结构部件如何进一步被分解成模块?(6)使用何种策略控制系统组件的操作?(7)如何评价体系结构设计?(8)系统的体系结构如何被文档化?3232第6章 软 件 设 计使用软件体系结构的风格和
展开阅读全文