《软件工程05总体设计》由会员分享,可在线阅读,更多相关《软件工程05总体设计(114页珍藏版)》请在金锄头文库上搜索。
1、个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播软件工程软件工程张康立 Email:个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播软件定义软件定义软件开发软件开发软件使用软件使用与维护与维护软件生命周期软件生命周期个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播软件开发的三个关联步骤软件开发的三个关联步骤每个步骤都按某种方式进行信息变换,最后得到有效的计算机软件个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播分析模型和设计模型的转换分析模型和设计模型的转换n将分析模型转换为软件设计个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播软件设计软件设计是后续开
2、发步骤及软件维护工作基础是后续开发步骤及软件维护工作基础如果没有设计,只能建立一个不稳定的系统结构如果没有设计,只能建立一个不稳定的系统结构个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播软件设计的任务软件设计的任务n从工程管理的角度来看,软件设计分两步完成个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播软件设计的任务软件设计的任务n从工程管理的角度来看,软件设计分两步完成总体设计(概要设计),将软件需求转化为数据结构和软件的系统结构。详细设计,即过程设计。通过对结构表示进行细化,得到软件详细的数据结构和算法。个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播课程内容提纲
3、课程内容提纲n第3章:“总体设计”总体设计过程软件设计原理软件设计中的启发规则描绘软件结构的图形工具面向数据流的设计方法个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播总体设计过程总体设计过程n总体设计(概要设计或初步设计)划分出组成系统的物理元素n程序、文件、数据库、人工过程和文档等n并不涉及物理元素内部设计总体设计阶段的一项任务是设计软件结构n确定系统中每个程序是由哪些模块组成的n以及这些模块相互间的关系个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播总体设计过程总体设计过程n总体设计过程总体设计过程一般分为两个阶段系统设计阶段:确定系统的具体实现方案结构设计阶段:确定软件
4、的结构个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播总体设计过程总体设计过程n总体设计的步骤1 设想供选择的方案n提出各种可能的实现方案n以需求分析阶段的数据流图为出发点,画自动化边界,形成不同的实现系统方案n设想把数据流图中的处理分组的各种可能方法,抛弃在技术上行不通的分组方法n余下的分组方法代表可能的实现策略,并且可以启示供选择的物理系统个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播总体设计过程总体设计过程n总体设计的步骤2 选取合理方案n从前一步得到的一系列供选择的方案中选取若干个合理的方案 通常至少选取低成本、中等成本和高成本的三种方案通常至少选取低成本、中等成本和
5、高成本的三种方案n在此基础上分析员对每种方案准备四份文档: 系统流程图系统流程图 组成系统的物理元素清单组成系统的物理元素清单 成本成本/ /效益分析效益分析 实现这个系统的进度计划实现这个系统的进度计划个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播总体设计过程总体设计过程n总体设计的步骤3 推荐最佳方案n综合分析对比各种合理方案的利弊,从中选出一种自己认为是最理想的方案推荐n用户和技术专家应认真审查所推荐的最佳系统n如果该系统确实符合用户的需要,并且是在现有条件下完全能够实现的,则应该提请使用部门负责人进一步审批n在使用部门的负责人也接受了分析员所推荐的方案之后,将进入总体设计过程
6、的下一个重要阶段结构设计 个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播总体设计过程总体设计过程n总体设计的步骤4 功能分解目标系统的实现一般要分两步进行:n首先是进行结构设计,确定系统是由哪些模块组成的,以及这些模块之间的关系 确定软件体系结构、数据结构确定软件体系结构、数据结构n其次是过程设计,确定每个模块的处理过程 确定详细的数据结构、算法确定详细的数据结构、算法 结构设计是总体设计阶段的任务,而过程设计是详细设计阶段的任务。个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播总体设计过程总体设计过程n总体设计的步骤5 设计软件结构n模块确定以后,每个模块的功能也就随之确定
7、n把这些模块自顶向下组成一种良好的层次调用关系,就完成了软件结构设计的任务n如果数据流图已经细化到适当的层次,那么我们便可以从数据流图映射成软件结构图总体设计过程总体设计过程n总体设计的步骤6 设计数据库n数据库的设计一般包括如下几步: 模式设计模式设计:确定数据库的逻辑结构,常见的数据库形:确定数据库的逻辑结构,常见的数据库形式有关系、层次或网状等式有关系、层次或网状等 子模式设计子模式设计:为系统中各用户设计出各自的数据视图:为系统中各用户设计出各自的数据视图 存储模式设计存储模式设计:确定数据库的空间需求、存储格式、:确定数据库的空间需求、存储格式、索引组成等索引组成等个人成果,妥善保存
8、,请勿传播个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播总体设计过程总体设计过程n总体设计的步骤7 制定测试计划n在软件开发的早期阶段考虑测试问题n使软件设计人员在设计时注意软件的可测试性总体设计过程总体设计过程n总体设计的步骤8 书写文档n系统说明 系统流程图系统流程图: :描绘系统构成方案、组成系统的物理元素描绘系统构成方案、组成系统的物理元素 成本成本/ /效益分析效益分析 对最佳方案的概括描述、精化的数据流图对最佳方案的概括描述、精化的数据流图 用层次图或结构图描绘的软件结构用层次图或结构图描绘的软件结构 用用IPOIPO图或其它工具简要描述各个模
9、块的算法图或其它工具简要描述各个模块的算法 模块间接口关系、建立需求、功能和模块三者之间的模块间接口关系、建立需求、功能和模块三者之间的交叉参照关系交叉参照关系个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播总体设计过程总体设计过程n总体设计的步骤8 书写文档n用户手册n测试计划 测试策略、测试方案、预期的测试结果、测试进度计测试策略、测试方案、预期的测试结果、测试进度计划等划等n详细的实现计划n数据库设计结果 数据库系统的选择、模式、子模式、存储模式的设计数据库系统的选择、模式、子模式、存储模式的设计结果等结果等个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播个人成果,妥善保
10、存,请勿传播个人成果,妥善保存,请勿传播总体设计过程总体设计过程n总体设计的步骤9 复审n对总体设计的结果进行严格的技术审查n在技术审查通过之后再由使用部门的负责人从管理角度进行复审个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播课程内容提纲课程内容提纲n第3章:“总体设计”总体设计过程软件设计原理软件设计中的启发规则描绘软件结构的图形工具面向数据流的设计方法个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播软件设计原理软件设计原理1. 抽象抽象:人们在实践中认识到,在现实世界中一定事物、状态或过程之间总存在着某些相似的方面(共性)。把这些相似的方面集中和概括起来,暂时忽略它们之
11、间的差异,这就是抽象。抽象就是:抽出本质,忽略细节,分层理解个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播软件设计原理软件设计原理举例说明:软件工程各阶段的抽象n在可行性研究阶段,软件作为系统的一个完整部件;n在需求分析阶段,软件解法是使用在问题环境内熟悉的方式描述;n进入总体设计向详细设计过渡阶段,抽象的程度将随之减少;n最后当源程序被写出后,抽象则达到最低层个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播软件设计原理软件设计原理2. 模块化模块:是由边界元素限定的相邻程序元素(例如,数据说明,可执行的语句)的序列,而且有一个总体标识符代表它。nPASCAL或 Ada 这样
12、的块结构语言中的BeginEnd对nC、C+和Java语言中的 . 对n过程、函数、子程序和宏等n面向对象方法学中的对象(见第9章)是模块,对象内的方法(或称为服务)也是模块个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播软件设计原理软件设计原理模块化:就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求。模块化的数学依据nC(x) 定义问题x的复杂程度,E(x)确定解决问题x需要的工作量(时间),对于两个问题P1和P2有如果如果C(P1)C(P2)C(P1)C(P2)显然显然 E(P1)E(P2)E(P1
13、)E(P2)当当 C(P1+P2)C(P1)+C(P2)C(P1+P2)C(P1)+C(P2)则则 E(P1+P2)E(P1)+E(P2) E(P1+P2)E(P1)+E(P2) 个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播软件设计原理软件设计原理nE(P1+P2+Pn)E(P1)+E(P2)+ +E(Pn) 以上揭示了把一个复杂问题分成许多容易解决的小问题,原来问题将容易解决n每个程序都相应地有一个最适当的模块数目M,使得系统的开发成本最小。M成本成本/ /模块模块接口成本接口成本软件总成本软件总成本成本成本模块数模块数最小成本区最小成本区个人成果,妥善保存,请勿传播个人成果,妥
14、善保存,请勿传播软件设计原理软件设计原理3. 逐步求精逐步求精:为了能集中精力解决主要问题而尽量推迟对问题细节的考虑。n其作用就在于它能帮助软件工程师把精力集中在与当前开发阶段最相关的那些方面上n忽略那些对整体解决方案来说虽然是必要的,然而目前还不需要考虑的细节,这些细节将留到以后再考虑。个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播软件设计原理软件设计原理3. 逐步求精Miller法则:n一个人在任何时候都只能把注意力集中在(72)个知识块上nMiller法则是人类智力的基本局限,我们不可能战胜自己的自然本性,只能接受这个事实,承认自身的局限性,并在这个前提下尽我们的最大努力工作个
15、人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播软件设计原理软件设计原理3. 逐步求精抽象与求精是一对互补的概念n抽象使得设计者能够说明过程和数据,同时却忽略低层细节;可以把抽象看作是一种通过忽略多余的细节同时强调有关的细节,而实现逐步求精的方法n求精则帮助设计者在设计过程中逐步揭示出低层细节n这两个概念都有助于设计者在设计演化过程中创造出完整的设计模型个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播软件设计原理软件设计原理4. 信息隐蔽和局部化信息隐蔽原理n应该这样设计和确定模块,使得一个模块内包含的信息(过程或数据)对于不需要这些信息的模块来说,是不能访问的局部化n是把一些关
16、系密切的软件元素物理地放得彼此靠近。显然, 局部化有助于实现信息隐藏个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播软件设计原理软件设计原理5. 模块独立性模块独立性的概念是模块化、抽象化、信息隐蔽概念的一个直接产物强调模块的独立性,有两个重要原因:n模块化程度较高的软件容易编制n独立的模块比较容易维护和测试模块独立是好设计的关键,而设计又是决定软件质量的关键环节个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播软件设计原理软件设计原理5. 模块独立性模块的独立程度可以由两个定性标准度量,这两个标准分别称为内聚和耦合 耦合耦合(Coupling) & 内聚内聚(Cohesion)
17、个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播软件设计原理软件设计原理5.1 耦合耦合:是对一个软件结构内不同模块之间互连程度的度量耦合强弱取决于模块间接口复杂程度,进入或访问一个模块的点,以及通过接口的数据模块间的耦合程度强烈影响系统的可理解性、可测试性、可靠性和可维护性个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播软件设计原理软件设计原理Great deal of dependenceIndependent 高耦合高耦合中等耦合中等耦合无耦合无耦合 耦合表示一个软件结构内各个模块之间的互连程度,耦合表示一个软件结构内各个模块之间的互连程度,应尽量选用松散耦合的系统应尽量
18、选用松散耦合的系统个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播软件设计原理软件设计原理例例1 1:A A访问访问C C的内部数据的内部数据或不通过正常入口或不通过正常入口而转入而转入C C的内部的内部ABCDA:goto C1C:C1: 独立性由弱到强(耦合程度由强到弱)排列为:独立性由弱到强(耦合程度由强到弱)排列为: 内容耦合内容耦合: 一个模块直接影响另一个一个模块直接影响另一个模块,调用或操纵其他模块的数据模块,调用或操纵其他模块的数据个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播软件设计原理软件设计原理例例2 2:部分代码重叠(常:部分代码重叠(常现在汇编程序中
19、)现在汇编程序中)B A例例3 3:一个模块有多个:一个模块有多个入口(功能)入口(功能)A:entry 1:entry 2:软件设计原理软件设计原理如果发生下列情形,模块间就发生了内容耦合内容耦合内容耦合内容耦合(1) 一个模块直接访问另一个模块的内部数据(2) 一个模块不通过正常入口转到另一模块内部(3) 两个模块有一部分程序代码重迭(只可能出现在汇编语言中)(4) 一个模块有多个入口个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播软件设计原理软件设计原理 公共耦合:公共耦合:几个模块共享一个数据区域几个模块共享一个数据区域G
20、lobal : V1 V2A:A1=V1+V2B:V1=B1Global : V1 V2A:V1+B:V2=B1+V1缺陷:缺陷: 公共部分的改动将影响所有调用它的模块;公共部分的改动将影响所有调用它的模块; 公共部分的数据存取无法控制;公共部分的数据存取无法控制; 复杂程度随耦合模块的个数增加而增加。复杂程度随耦合模块的个数增加而增加。个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播软件设计原理软件设计原理 特征耦合:特征耦合:把整个数据结构作为参数传递而被调把整个数据结构作为参数传递而被调把整个数据结构作为参数传递而被调把整个数据结构作为参数传递而被调用模块只使用其中一部分数据元素
21、时就出现了用模块只使用其中一部分数据元素时就出现了用模块只使用其中一部分数据元素时就出现了用模块只使用其中一部分数据元素时就出现了特特特特征耦合征耦合征耦合征耦合。 控制耦合控制耦合:一个模块通过传递控制信息来控制:一个模块通过传递控制信息来控制另一个模块另一个模块ABFlagF2F1FnFlag接口单一,但影响被控模块的内部逻辑个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播软件设计原理软件设计原理 数据耦合数据耦合: 只有数据在模块之间进行交换,只通过参只有数据在模块之间进行交换,只通过参数传递数传递基本类型基本类型的数据的数据标记耦合标记耦合与与数据耦合数据耦合形式相同,区别在于
22、调用时传递形式相同,区别在于调用时传递的参数是否为基本数据类型的参数是否为基本数据类型 标记耦合标记耦合: 模块间通过参数表传递模块间通过参数表传递记录信息记录信息,这个记,这个记录是某一数据结构的子结构,而不是简单变量录是某一数据结构的子结构,而不是简单变量 非直接耦合非直接耦合: 两个模块之间没有直接关系,它们之两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的间的联系完全是通过主模块的控制和调用来实现的非直接耦合的模块独立性最强非直接耦合的模块独立性最强个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播软件设计原理软件设计原理n关于“耦合”的使用原则尽量使
23、用数据耦合少用控制耦合和特征耦合限制公共环境耦合的范围完全不用内容耦合个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播软件设计原理软件设计原理5.2 内聚内聚:标志着一个模块内各个元素彼此结合的紧密程度内聚和耦合都是进行模块化设计的有力工具实践表明内聚更重要,应该把更多注意力集中到提高模块的内聚程度上个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播软件设计原理软件设计原理5.2 内聚内聚有七种,由弱到强分别为 偶然内聚-逻辑内聚-时间内聚-过程内聚-通信内聚-顺序内聚-功能内聚个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播软件设计原理软件设计原理5.2 内聚偶然内聚(
24、低内聚)n如果一个模块完成一组任务,这些任务彼此间即使有关系,关系也是很松散的,就叫做偶然内聚n有时在写完一个程序之后,发现一组语句在两处或多处出现,于是把这些语句作为一个模块以节省内存,这样就出现了偶然内聚的模块。 个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播软件设计原理软件设计原理5.2 内聚逻辑内聚(低内聚)n如果一个模块完成的任务在逻辑上属于相同或相似的一类,由参数决定模块执行的功能,则称为逻辑内聚例如,一个模块产生各种类型的全部输出A:Read inputsfrom diskfrom tapefrom 个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播软件设计原理软
25、件设计原理5.2 内聚时间内聚 (低内聚)n如果一个模块包含的任务必须在同一段时间内执行,就叫时间内聚 例如,模块完成各种初始化工作或当一个模块处理意外故障时,这个模块必须在中断处理的同时完成关闭文件、报警和保留现场等任务,这就构成了时间内聚。个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播软件设计原理软件设计原理5.2 内聚过程内聚 (中内聚)n如果一个模块内的处理元素是相关的而且以特定次序执行,则称为过程内聚。 使用程序流程图作为工具设计软件时,常常通过研究流程图确定模块的划分,这样得到的往往是过程内聚的模块 enter datacheck datamanipulate data个
26、人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播软件设计原理软件设计原理5.2 内聚通信内聚 (中内聚)n如果模块中所有元素都使用同一个输入数据和(或)产生同一个输出数据,则称为通信内聚。 例如,一个模块的功能是从输入的文件中读出数据,然后由这些数据产生报表,同时也由这些数据产生单项报表。 例如:从同一磁带上读取不相干的数据 可能破坏独立性个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播软件设计原理软件设计原理个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播软件设计原理软件设计原理5.2 内聚顺序内聚 (高内聚)n如果一个模块内的处理元素和同一个功能密切相关,而且这些处理
27、必须顺序执行(通常一个处理元素的输出数据作为下一个处理元素的输人数据),则称为顺序内聚。 例如,一个解非线性方程组的模块,它的功能依次为:输入常数项系数,求解,输出方程组的解。个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播软件设计原理软件设计原理5.2 内聚顺序内聚 (高内聚)个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播软件设计原理软件设计原理5.2 内聚功能内聚 (高内聚)n如果模块内所有处理元素属于一个整体,完成一个单一的功能,则称为功能内聚。 例如,一个模块只完成矩阵加法运算或只打印输出一种特定的表格功能。个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播软件
28、设计原理软件设计原理n七种内聚的优劣评分,将得到如下结果:功能内聚 10分 时间内聚 3分顺序内聚 9分 逻辑内聚 1分通信内聚 7分 偶然内聚 0分过程内聚 5分 对于一个模块而言,模块自身的内聚越强,模块间的耦合就越小,模块所具有的独立性就越好。可以说高内聚低耦合是我们进行软件设计的一贯原则个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播软件设计原理软件设计原理 耦合、内聚与模块独立性的关系:耦合、内聚与模块独立性的关系:个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播课程内容提纲课程内容提纲n第3章:“总体设计”总体设计过程软件设计原理软件设计中的启发规则描绘软件结构的图
29、形工具面向数据流的设计方法个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播软件设计中的启发规则软件设计中的启发规则n结构设计原则个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播软件设计中的启发规则软件设计中的启发规则n结构设计原则总结经验“启发式规则”找到改进软件设计,提高软件质量的途径1. 提高模块独立性争取低耦合、高内聚(增加内聚 减少耦合)2. 模块规模适中过大不易理解;太小则接口开销过大注意分解后不应降低模块的独立性个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播软件设计中的启发规则软件设计中的启发规则3. 选择适当的深度、宽度、扇出和扇入 个人成果,妥善保存,
30、请勿传播个人成果,妥善保存,请勿传播软件设计中的启发规则软件设计中的启发规则3. 选择适当的深度、宽度、扇出和扇入 深度 = 分层的层数n过大表示分工过细宽度 = 同一层上模块数的最大值n过大表示系统复杂度大个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播软件设计中的启发规则软件设计中的启发规则 扇出 = 一个模块直接调用控制的模块数。 3 fan-out 9AA的扇出的扇出AA的扇入的扇入 扇入 = 直接调用该模块的模块数在不破坏独立性的前提下,fan-in 大的比较好。个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播软件设计中的启发规则软件设计中的启发规则3. 选择适当的深
31、度、宽度、扇出和扇入深度:表示软件结构中控制的层数n深度能粗略地标志一个系统的大小和复杂程度,深度和程序长度之间有粗略的对应关系宽度:表示软件结构中控制的总跨度n宽度是同一个层次上的模块总数的最大值,宽度越大系统越复杂;对宽度影响最大的因素是模块的扇出扇出:表示一个模块直接控制(调用)的模块数目n扇出为3-4,上限扇出为5-9扇入:表示有多少个上级模块直接调用该模块n扇入越大则共享该模块的上级模块数目越多。 软件结构一般要求顶层扇出比较高,中层扇出较少,底层模块有高扇入 个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播软件设计中的启发规则软件设计中的启发规则4. 模块的作用域应在其控制
32、域之内模块的作用域n受模块判定条件影响的所有模块集合模块的控制域n模块本身以及所有直接从属模块的集合个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播4. 作用域在控制域内作用域在控制域内 控制域控制域MACBM的控制域为的控制域为 M,A,B,C 作用域作用域:M中的一个判定所影响的模块。中的一个判定所影响的模块。例如:例如:A: if then goto B1 B: B1: 作用域在控制域内作用域在控制域内A: if then goto M1 M: M1: goto C1 作用域超出了控制域作用域超出了控制域上例(右图)中A的作用超出了控制域。改进方法之一,可以把A中的 if 移到M
33、中;方法之二,可以把C移到A下面。个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播软件设计中的启发规则软件设计中的启发规则4. 模块的作用域应在其控制域之内n上移判断点:使该判断层次升高以扩大它的控制范围;n下移受判断影响的模块:将受判断影响的模块下移到判断所在模块的控制范围内 个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播软件设计中的启发规则软件设计中的启发规则5. 降低接口的复杂程度接口复杂可能表明模块的独立性差6. 单出单入,避免内容耦合7. 模块功能可预测 相同输入必产生相同输出反例:模块中使用全局变量或静态变量,则可能导致不可预测软件模块结构的改进软件模块结构的改进
34、n模块功能的完善化一个完整的模块应当有以下几部分:n 执行规定的功能的部分;n 出错处理的部分,当模块不能完成规定的功能时,必须回送出错标志,出现例外情况的原因n 如果需要返回数据给它的调用者,在完成数据加工或结束时, 应当给它的调用者返回一个状态码。n消除重复功能,改善软件结构完全相似n在结构上完全相似,可能只在数据类型上不一,此时可以采取完全合并的方法局部相似n找出其相同部分,分离出去,重新定义成一个独立的下一层模块n还可以与它的上级模块合并软件模块结构的改进软件模块结构的改进n消除重复功能,改善软件结构完全相似n完全合并局部相似n分离n与上级合并软件模块结构的改进软件模块结构的改进n模块
35、的作用范围应在控制范围之内n尽可能减少高扇出结构,随深度增大扇入如果一个模块的扇出数过大,就意味着该模块过分复杂,需要协调和控制过多的下属模块应当适当增加中间层次的控制模块软件模块结构的改进软件模块结构的改进n避免或减少使用病态联接应限制使用如下三种病态联接n1.直接病态联接 即模块A直接从模块B内部取出某些数据,或者把某些数据直接送到模块B内部软件模块结构的改进软件模块结构的改进n避免或减少使用病态联接应限制使用如下三种病态联接n2.公共数据域病态联接,模块A和模块B通过公共数据域,直接传送或接受数据,而不是通过它们的上级模块n这种方式将使得模块间的耦合程度剧增,它不仅影响模块和模块,而且影
36、响与公共数据域有关联的所有模块软件模块结构的改进软件模块结构的改进n避免或减少使用病态联接应限制使用如下三种病态联接n3.通信模块联接 即模块A和模块B通过通信模块TABLEIT传送数据。从表面看这不是病态联接,因为模块和模块B都未涉及通信模块TABLEIT的内部。n然而,它们之间的通信(即数据传送)没有通过它们的上级模块,从这个意义上讲,这种联接是病态的。软件模块结构的改进软件模块结构的改进n模块的大小要适中模块大小,可以用模块中语句的数量来衡量模块的大小应限制在一定的范围之内n一个模块的语句超过30行以后,可理解性迅速下降n通常规定其语句行数在50100左右,保持在一页纸之内,最多不超过5
37、00行软件模块结构的改进软件模块结构的改进n设计功能可预测的模块,但要避免过分受限制的模块一个功能可预测的模块,不论内部处理细节如何,但对相同的输入数据,总能产生同样的结果n如果模块内部蕴藏有一些特殊的鲜为人知的功能时,这个模块就可能是不可预测的n对于这种模块,如果调用者不小心使用,其结果将不可预测软件模块结构的改进软件模块结构的改进n设计功能可预测的模块,但要避免过分受限制的模块 如果一个模块的局部数据结构的大小、控制流的选择或者与外界(人、硬软件) 的接口模式被限制死了,则很难适应用户新的要求或环境的变更 为了能够适应将来的变更,软件模块中局部数据结构的大小应当是可控制的,控制流的选择对于
38、调用者来说,应当是可预测的。而与外界的接口应当是灵活的。软件模块结构的改进软件模块结构的改进n软件应满足设计约束和可移植性为了使得软件可以在某些特定的环境下能够安装和运行,对软件提出了一些设计约束和可移植的要求n例如,设计约束有时要求一个程序段在存储器中覆盖自身。当这种情况出现时,设计出来的软件程序结构不得不根据重复程度、访问频率、调用间隔等等特性,重新加以组织。软件模块结构的改进软件模块结构的改进设计的后处理设计的后处理为每一个模块写一份处理说明为每一个模块提供一份接口说明确定全局数据结构和局部数据结构指出所有的设计约束和限制进行概要设计的评审进行设计的优化(如果需要和可能的话)个人成果,妥
39、善保存,请勿传播个人成果,妥善保存,请勿传播课程内容提纲课程内容提纲n第3章:“总体设计”总体设计过程软件设计原理软件设计中的启发规则描绘软件结构的图形工具面向数据流的设计方法个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播描绘软件结构的图形工具描绘软件结构的图形工具n总体设计阶段常用的几种图形工具层次图HIPO图结构图(SC图)个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播描绘软件结构的图形工具描绘软件结构的图形工具n层次图和HIPO图层次图:每个方框代表一个模块,方框间的连线表示调用关系例如 正文加工系统正文加工系统正文加工系统输入输入输出输出编辑编辑加标题加标题存储存储
40、检索检索列表列表编目录编目录格式化格式化合并合并修改修改添加添加删除删除插入插入个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播描绘软件结构的图形工具描绘软件结构的图形工具n层次图和HIPO图HIPO图:HIPO图是美国IBM公司发明的“层次加输入/处理/输出”图的英文缩写正文加工系统正文加工系统输入输入1.0输出输出2.0编辑编辑3.0加标题加标题4.0存储存储5.0检索检索6.0列表列表3.6编目录编目录7.0格式化格式化8.0合并合并3.5修改修改3.4添加添加3.1删除删除3.2插入插入3.3个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播描绘软件结构的图形工具描绘软件
41、结构的图形工具HIPO图n和H图中每个方框相对应,应该有一张IPO图描绘这个方框代表的模块的处理过程系统:系统:模块:模块:编号:编号:作者:作者:日期:日期:IPO图图被调用:被调用:输输 入:入:调调 用:用:输输 出:出:处处 理:理:局部数据元素:局部数据元素:注注 释:释:个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播描绘软件结构的图形工具描绘软件结构的图形工具n结构图SC图Yourdon提出的结构图是进行软件结构设计的一个有力工具结构图反映程序中模块之间的层次调用关系和联系n它以特定的符号表示模块、模块间的调用关系和模块间信息的传递个人成果,妥善保存,请勿传播个人成果,妥
42、善保存,请勿传播描绘软件结构的图形工具描绘软件结构的图形工具n结构图SC图模块:模块用矩形框表示,并用模块的名字标记它个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播描绘软件结构的图形工具描绘软件结构的图形工具n结构图SC图模块的调用关系和接口:模块之间用单向箭头联结,箭头从调用模块指向被调用模块个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播描绘软件结构的图形工具描绘软件结构的图形工具n结构图SC图模块间的信息传递n当一个模块调用另一个模块时,调用模块把数据或控制信息传送给被调用模块,以使被调用模块能够运行n被调用模块在执行过程中又把它产生的数据或控制信息回送给调用模块个人成
43、果,妥善保存,请勿传播个人成果,妥善保存,请勿传播描绘软件结构的图形工具描绘软件结构的图形工具n结构图SC图在模块A的箭头尾部标以一个菱形符号,表示模块A有条件地调用另一个模块B。当一个在调用箭头尾部标以一个弧形符号,表示模块A反复调用模块C和模块D个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播描绘软件结构的图形工具描绘软件结构的图形工具n结构图SC图产生最佳解产生最佳解计算最佳解计算最佳解得到好输入得到好输入输出结果输出结果编辑输入编辑输入读输入读输入显示结果显示结果结果格式化结果格式化编辑结果原始输入原始输入好输入好输入解解解格式化的解格式化的解个人成果,妥善保存,请勿传播个人成
44、果,妥善保存,请勿传播描绘软件结构的图形工具描绘软件结构的图形工具n结构图SC图通常用层次图作为描绘软件结构的文档利用IPO图或数据字典中的信息得到模块调用时传递的信息由层次图导出结构图的过程 导出结构图可以作为检查设计正确性和评价模块独立性的好方法个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播课程内容提纲课程内容提纲n第3章:“总体设计”总体设计过程软件设计原理软件设计中的启发规则描绘软件结构的图形工具面向数据流的设计方法个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播面向数据流的设计方法面向数据流的设计方法n基本原理又称为 SD:Structural Design面向数据
45、流的设计方法把信息流映射成软件结构。信息流的类型决定了映射的方法信息流有下述两种类型n变化流n事务流个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播面向数据流的设计方法面向数据流的设计方法n基本原理变换流信息通常以“外部世界”的形式进入软件系统,经过处理以后再以“外部世界”的形式离开系统信息时间输入流输出流变换流信息流信息流个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播面向数据流的设计方法面向数据流的设计方法n基本原理事务流n这种数据流是“以事务为中心的”n数据沿输入通路到达一个处理T,这个处理根据输入数据的类型在若干动作序列中选出一个执行 (1)(1)接收输入数据接收输入数
46、据( (输人数据又称为事务输人数据又称为事务) ); (2)(2)分析每个事务以确定它的类型;分析每个事务以确定它的类型; (3)(3)根据事务类型选取一条活动通路。根据事务类型选取一条活动通路。个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播面向数据流的设计方法面向数据流的设计方法n基本原理事务流当信息流具有明显的“发射中心”时,可归结为事务流T事务事务中心.活动通路个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播面向数据流的设计方法面向数据流的设计方法n软件结构的标准形式常见的软件结构标准型有两种:n变换型n事务型(1)变换型结构变换型结构的数据流图基本上呈线性形状明显地分
47、为输入、变换(加工)、输出三部分输入部分输入部分输出部分输出部分变换部分变换部分输入信息输入信息正确正确 信息信息结结 果果数据数据正确性正确性检查检查处理处理显示显示个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播面向数据流的设计方法面向数据流的设计方法(1)变换型结构n变换流:取得数据、变换数据、给出数据n相应于取得数据、变换数据、给出数据,变换型系统结构图由输入、中心变换和输出等三部分组成个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播面向数据流的设计方法面向数据流的设计方法个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播面向数据流的设计方法面向数据流的设计方法n
48、软件结构的标准形式(2)事务型结构n系统的数据流图常呈辐射状;n一个加工(事务中心)将它的输入分离成若干种发散的数据流,从而形成若干条活动的路径,然后根据输入值选择其中的一条路径处理事务中心事务中心处理处理处理处理处理处理处理处理分类分类事务事务2事务事务1事务事务n事务事务个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播面向数据流的设计方法面向数据流的设计方法事务事务个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播面向数据流的设计方法面向数据流的设计方法n变换分析变换分析n是一系列设计步骤的总称n经过这些步骤把具有变换流特点的数据流图映射成软件结构设计步骤n(1) 复查基本系
49、统模型n(2) 复查并精化数据流图n(3) 确定数据流图具有变换特性还是事务特性n(4) 确定输入流和输出流的边界,从而孤立出变换中心个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播面向数据流的设计方法面向数据流的设计方法n变换分析变换分析设计步骤n(5) 完成“第一级分解”,把数据流图映射成系统模块结构,即设计系统的上层模块结构n(6) 完成“第二级分解”,基于数据流图逐步分解高层模块结构,设计出下层模块n(7) 使用设计度量和启发式规则对第一次分割得到的软件结构进一步精化个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播面向数据流的设计方法面向数据流的设计方法n变换分析应用案
50、例:开发一个带有微处理器的汽车数字仪表板控制系统功能描述n1)通过模数转换实现传感器和微处理机的接口;n2)在发光二极管在面板上显示如下数据: 显示每小时行驶的英里数显示每小时行驶的英里数(mph)(mph); 显示每加仑油行驶的英里数显示每加仑油行驶的英里数(mpg)(mpg); 显示汽车是加速或减速行驶;显示汽车是加速或减速行驶; 显示里程。显示里程。n3)如果汽车的速度超过55英里/小时,则发出超速警告铃声。个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播燃料流燃料流 传感器信号传感器信号SPS旋转信号旋转信号读读旋转旋转信号信号收集收集和求和求平均平均确定确定加加/ /减减速速
51、转换转换成成转转/ /分分计算计算里程里程计算计算mph,超超速值速值产生产生加加/ /减减速显示速显示计算计算燃料燃料消耗消耗计算计算gph读和读和校核校核产生产生mpg显示显示产生产生mph显示显示发出发出铃声铃声产生产生里程里程显示显示SPS SPS箭头指示箭头指示燃烧流燃烧流上箭头上箭头水平线水平线下箭头下箭头rpmrpmgphmphmpgmph超速值超速值英里英里显示显示铃声铃声mph显示显示mpg显示显示n设计步骤1)复查基本系统模型2)复查并精化数据流个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播燃料流燃料流 传感器信号传感器信号SPS旋转信号旋转信号读读旋转旋转信号信
52、号收集收集和求和求平均平均确定确定加加/ /减减速速转换转换成成转转/ /分分计算计算里程里程计算计算mph,超超速值速值产生产生加加/ /减减速显示速显示计算计算燃料燃料消耗消耗计算计算gph读和读和校核校核产生产生mpg显示显示产生产生mph显示显示发出发出铃声铃声产生产生里程里程显示显示SPS SPS箭头指示箭头指示燃烧流燃烧流上箭头上箭头水平线水平线下箭头下箭头rpmrpmgphmphmpgmph超速值超速值英里英里显示显示铃声铃声mph显示显示mpg显示显示n3)确定数据流图具有变换特性还是事务特性n4)确定输入流和输出流的边界,从而孤立出变换中心输入流边界输入流边界输出流边界输出流
53、边界IPO第一步:第一步:DFD的分界,先分出的分界,先分出I、P、O三块三块个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播一般问题的一般问题的一级分解方一级分解方法:法:数字仪表板数字仪表板控制控制数据转换数据转换控制控制驱动仪表板驱动仪表板接收传感器接收传感器信号信号MPIO个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播第二步:映射第二步:映射ADCBMICBDA:每个处理直接对应:每个处理直接对应一个下层模块。一个下层模块。P:由边界向回溯,将:由边界向回溯,将每个遇到的处理器映每个遇到的处理器映成相应的层模块。成相应的层模块。I:由边界向外推,方:由边界向外推,方法
54、与法与 类似类似OI个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播例:例:数字仪表板数字仪表板控制控制数据转换数据转换控制控制驱动仪表板驱动仪表板接收传感器接收传感器信号信号计算计算gph读燃料流读燃料流转换成转换成rpm收集收集sps读旋转信号读旋转信号确定确定加加/ /减速减速计算计算mph计算计算mpg计算计算里程里程加加/ /减速减速显示显示显示显示mpg显示显示mph显示显示里程里程发出发出铃声铃声发光二极管显示发光二极管显示个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播n每个模块应附一简要说明描述 进出该模块的信息(接口描述) 模块内部的信息 过程陈述,包括主要
55、判定点及任务等 对约束和特殊特点的简短讨论第三步:修改第三步:修改-本着高内聚、低耦合的原则个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播MIIISABCIIISBACn事务分析事务分析个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播“变换变换”“事物事物”精化数据流图精化数据流图流类型流类型区分事物中心和区分事物中心和数据接收通路数据接收通路区分输入和区分输入和输出分支输出分支映射成事务结构映射成事务结构映射成变换结构映射成变换结构用启发式设计规用启发式设计规则精化软件结构则精化软件结构导出接口描述和导出接口描述和全程数据结构全程数据结构复复 查查详细设计详细设计变换分析变
56、换分析事物分析事物分析优化的前题是优化的前题是:“Get it to work, then make it fast.”SD的总体过程的总体过程个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播F 软件设计软件设计主要任务是根据需求规格说明导出系统主要任务是根据需求规格说明导出系统的实现方案,分为概要设计和详细设计两部分的实现方案,分为概要设计和详细设计两部分 主要概念:主要概念:模块化模块化、抽象抽象、信息隐蔽信息隐蔽。尽量保证。尽量保证模块的独立性模块的独立性。 SDSD分析方法分析方法分为变换分析和事务分析,要将分为变换分析和事务分析,要将DFDDFD转换为转换为SCSC图,最后完成概要设计的文档图,最后完成概要设计的文档小结:面向数据流的设计方法小结:面向数据流的设计方法个人成果,妥善保存,请勿传播个人成果,妥善保存,请勿传播本章结束本章结束 下一章节导读:“详细设计”