清华大学郑人杰殷仁昆教授软件工程讲义03.ppt
《清华大学郑人杰殷仁昆教授软件工程讲义03.ppt》由会员分享,可在线阅读,更多相关《清华大学郑人杰殷仁昆教授软件工程讲义03.ppt(94页珍藏版)》请在三一文库上搜索。
1、软件工程,1,软件工程 第三章 软件设计,3.1 软件设计的概念 3.2 功能独立性 3.3 结构化设计方法 3.4 过程设计,清华大学计算机系 殷人昆,软件工程,2,3.1 软件设计的概念,软件设计的基本目标是用比较抽象概括的方式确定目标系统如何完成预定的任务,即软件设计是确定系统的物理模型。 从技术观点来看,软件设计包括数据设计、体系结构设计、接口设计、过程设计。 数据设计将实体关系图中描述的对象和关系,以及数据字典中描述的详细数据内容转化为数据结构的定义。,软件工程,3,体系结构设计定义软件系统各主要成份之间的关系。 接口设计根据数据流图定义软件内部各成份之间、软件与其它协同系统之间及软
2、件与用户之间的交互机制。 过程设计则是把结构成份转换成软件的过程性描述。,软件工程,4,软件工程,5,从工程管理角度来看,软件设计分两步完成:概要设计和详细设计。 概要设计 将软件需求转化为软件体系结构 确定系统级接口 全局数据结构或数据库模式。 详细设计 确立每个模块的实现算法和局部数据结构 用适当方法表示算法和数据结构的细节,软件工程,6,软件设计是后续开发步骤及软件维护工作的基础。如果没有设计,只能建立一个不稳定的系统结构。,软件工程,7,软件设计既是过程又是模型。 设计过程是一系列的迭代步骤,使设计人员能够描述目标系统的各个侧面。 设计模型首先描述目标系统的整体架构,然后逐步细化架构得
3、到构造每个细节的指导原则,从而得到系统的一系列不同的视图。 良好的设计原则可为设计过程导航。 衡量设计过程的技术原则: 设计必须实现分析模型中描述的所有显式需求,必须满足用户希望的所有隐式需求。,衡量软件设计的原则,软件工程,8,对于开发者和未来的维护者而言,设计必须是可读的、可理解的,使得将来易于编程、易于测试、易于维护。 设计应该给出软件的全貌,包括从实现角度可看到的数据、功能、行为。 衡量设计模型的技术原则 设计模型应该是一个分层结构。该结构: 使用可识别的设计模式搭建系统结构。 用显示良好设计特征的构件构成。 可以用演化的方式实现。 设计应当模块化。,软件工程,9,设计应当包含数据、体
4、系结构、接口和构件(模块)的清晰的视图。 设计应当根据将要实现的对象和数据模式导出合适的数据结构。 设计应当建立具有独立功能特征的构件。 设计应当建立能够降低模块与外部环境之间复杂连接的接口。 设计模型应当通过使用软件需求信息所驱动的可重复的方法导出。 Davis的软件设计原则 设计应具有可跟踪性,能回溯到软件需求;,软件工程,10,设计不必每次都从头做起,可以复用已有的设计模式和数据模式。 设计应当缩小软件与现实世界中问题的“智力距离”,尽量逼近问题领域的结构; 设计应具有一致性和集成性。整个系统应具有统一的风格和格式,具有良好的接口。 设计结果应能适应未来可能的变更; 设计不是编码,编码也
5、不是设计。设计模型的抽象级别比源代码高。在编码级别上唯一的设计决策是补充一些实现细节。,软件工程,11,设计应具有容错性和异常处理能力。对于异常数据、事件、操作条件等能够平滑处理。 在建立设计方案时就应能评估设计质量,而不是在系统编码之后。 应坚持设计评审,减少概念性(语义性)的错误。 1) 设计应遵循抽象化的原则,包含数据抽象和过程抽象。,软件设计的主要手段,软件工程,12,过程抽象 是指在软件设计中将处理过程的实现细节隐藏在数据抽象中,可以直接通过模块接口使用这些处理操作。 数据抽象 是指采用抽象数据类型表示数据,实现数据封装,使得使用者可通过接口使用数据而不必关心数据结构的实现。 设计应
6、遵循自顶向下、逐步细化的原则,建立一个层次的结构。 将软件体系结构自顶向下,对过程细节和数据细节从抽象到具体,逐层细化,直到用编程语言的语句能够实现为止。,软件工程,13,设计应当遵循模块化的原则。 每个模块可独立地开发、测试,最后组装成完整的程序。 其出发点是本着将一种复杂问题“分而治之”的原则。其目的是使程序的结构清晰,容易阅读、理解、测试、修改。 Meyer的良好模块设计方法的标准 模块可分解性 可将系统按问题子问题分解的原则分解成系统的模块层次结构; 模块可组装性 可利用已有的设计构件组装成新系统,不必一切从头开始。,软件工程,14,模块可理解性 一个模块可不参考其他模块而被理解; 模
7、块连续性 对软件需求的一些微小变更只导致对某个模块的修改而整个系统不用大动; 模块保护 将模块内出现异常情况的影响范围限制在模块内部; 设计应遵循信息隐蔽的原则。 Patnas主张在开发时,将每个程序的成分隐藏在模块内,定义每一个模块时尽可能少地显露其内部的处理。,软件工程,15,每个模块的实现细节对于其它模块是隐蔽的,将来修改软件时偶然引入错误所造成的影响就可以局限在一个或几个模块内部,不致波及到软件的其它部分。 在可预见将来可能修改的场合,信息隐蔽可以提高软件的可修改性、可测试性和可移植性。,软件工程,16,3.2 功能独立性,功能独立性是抽象、模块化和信息隐蔽的直接产物。如果一个模块能够
8、独立于其他模块被编程、测试和修改,则该模块具有功能独立性。 1978年Myers提出用两个准则来度量功能独立性,即模块间的耦合和模块的内聚。 内聚性:内聚是一个模块内部各个元素彼此结合的紧密程度的度量。 耦合性: 耦合是模块间互相连接的紧密程度的度量,它取决于各个模块之间接口的复杂度、调用方式以及哪些信息通过接口。,软件工程,17,模块间的耦合,模块之间耦合性越强,功能独立性越差,这样形成的模块结构界面不好。,软件工程,18,非直接耦合(Nondirect Coupling),两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的。 非直接耦合的模块独立性最强。,软件工程
9、,19,数据耦合 (Data Coupling),一个模块访问另一个模块时,彼此之间是通过简单数据参数 (不是控制参数、公共数据结构或外部变量) 来交换输入、输出信息的。,软件工程,20,标记耦合 (Stamp Coupling),一组模块通过参数表传递记录信息,就是标记耦合。这个记录是某一数据结构的子结构,而不是简单变量。,软件工程,21,控制耦合 (Control Coupling),如果一个模块通过 传送开关、标志、 名字等控制参数, 明显地控制选择另 一模块的功能,就 是控制耦合。,软件工程,22,外部耦合(External Coupling) 一组模块都访问同一全局简单变量而不是同一
10、全局数据结构,而且不是通过参数表传递该全局变量的信息,则称之为外部耦合。 公共耦合(Common Coupling) 若一组模块都访问同一个公共数据环境,则它们之间的耦合就称为公共耦合。公共的数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等。,软件工程,23,公共耦合的复杂程度随耦合模块的个数增加而显著增加。若只是两模块间有公共数据环境,则公共耦合有两种情况。松散公共耦合和紧密公共耦合。,松散的公共耦合,紧密的公共耦合,软件工程,24,如果发生下列情形,模块之间就是内容耦合: 一个模块直接访问另一个模块的内部数据; 一个模块不通过正常入口转到另一模块内部; 两个模块有一部分程序代码
11、重迭(只可能出现在汇编语言中); 一个模块有多个入口。,内容耦合 (Content Coupling),软件工程,25,c,进入另一模块内部,模块代码重叠,模块多个入口,软件工程,26,模块内聚,模块内聚性越强,功能独立性越好,对于形成的模块结构有比较好的作用。 要求模块结构达到高内聚,低耦合。,软件工程,27,一个模块中各个部分都是完成某一具体功能必不可少的组成部分,或者说该模块中所有部分都是为了完成一项具体功能而协同工作,紧密联系,不可分割的。则称该模块为功能内聚模块。 功能内聚模块的功能独立性最强。,功能内聚 (Functional Cohesion),软件工程,28,这种模块完成多个功
12、能,各个功能相互独立但都在同一数据结构上操作,每一项功能有一个唯一的入口点。这个模块将根据不同的要求,确定该执行哪一个功能。 由于这个模块的所有功能都是基于同一个数据结构(符号表),因此,它是一个信息内聚的模块。 信息内聚模块可以看成是多个功能内聚模块的组合,并且达到信息的隐蔽。,信息内聚 (Informational Cohesion),软件工程,29,初始化,插入,删除,查找,修改,符 号 表,软件工程,30,如果一个模块内各功能部分都使用了相同的输入数据,或产生了相同的输出数据,则称之为通信内聚模块。通常,通信内聚模块是通过数据流图来定义的。 模块内各个功能是紧密相连的。,通信内聚 (C
13、ommunication Cohesion),软件工程,31,软件工程,32,使用流程图做为工具设计程序时,如果流程图太大,可以把流程图中的某一部分划出组成模块,就得到过程内聚模块。 例如,把流程图中的循环部分、判定部分、计算部分分成三个模块,这三个模块都是过程内聚模块。,过程内聚(Procedural Cohesion),软件工程,33,时间内聚又称为经典内聚。这种模块大多为多功能模块,但模块的各个功能的执行与时间有关,通常要求所有功能必须在同一时间段内执行。 例如,初始化模块和终止模块就是时间内聚模块。,时间内聚(Classical Cohesion),软件工程,34,这种模块把几种相关的
14、功能组合在一起,每次被调用时,由传送给模块的判定参数来确定该模块应执行哪一种功能。,逻辑内聚(Logical Cohesion),软件工程,35,当几个模块内正好有一段代码是相同的,将它们抽取出来形成单独的模块,即巧合内聚模块。这种模块没有独立功能,各部分之间没有联系,或联系很松散。,巧合内聚(Coincidental Cohesion),软件工程,36,结构化设计(structured design,SD)是一种面向数据流的设计方法,它可以与SA方法衔接。 结构化设计是基于模块化、自顶向下细化、结构化程序设计等程序设计技术基础上发展起来的。基本思想是将系统设计成由相对独立、功能单一的模块组成
15、的结构。 该方法实施的要点是: 首先研究、分析和审查数据流图。 从软件,3.3 结构化设计方法,软件工程,37,的需求规格说明中弄清数据流加工的过程,对于发现的问题及时解决。 然后根据数据流图确定数据处理的类型。典型的类型有两种:变换型和事务型。针对两种不同类型分别进行分析处理。 由数据流图推导出系统的初始结构图。 利用一些启发式原则改进系统初始结构图,直到得到符合要求的结构图为止。 修改和补充数据字典。 制定测试计划。,软件工程,38,在系统结构图中的模块,传入模块 从下属模块取得数据,经过某些处理, 再将其传送给上级模块。它传送的数据流叫做逻辑输入数据流。 传出模块 从上级模块获得数据,进
16、行某些处理,再将其传送给下属模块。它传送的数据流叫做逻辑输出数据流。 变换模块 它从上级模块取得数据,进行特定的处理,转换成其它形式, 再传送回上级模块。,软件工程,39,协调模块 对所有下属模块进行协调和管理的模块。,软件工程,40,系统结构图的基本符号,软件工程,41,软件工程,42,数据:模块之间传送的数据用带空心圆的箭头表示,并在旁边标上数据名。 控制信息:控制信息与数据的主要区别是前者只反映数据的某种状态。,软件工程,43,数据处理的类型,在需求分析阶段,面向数据流的SA方法产生数据流图DFD。 在软件设计阶段,面向数据流的SD方法将DFD转换成程序结构图。 数据处理即为在DFD中从
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 清华大学 人杰 殷仁昆 教授 软件工程 讲义 03
链接地址:https://www.31doc.com/p-3217315.html