资源预览内容
第1页 / 共67页
第2页 / 共67页
第3页 / 共67页
第4页 / 共67页
第5页 / 共67页
第6页 / 共67页
第7页 / 共67页
第8页 / 共67页
第9页 / 共67页
第10页 / 共67页
亲,该文档总共67页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
软件工程导论第 6 课第 5 章 总体设计 第5章 总体设计分析阶段“做什么” 软件设计“怎样做”将分析模型转换为软件设计第5章 总体设计总体设计的两项任务总体设计的两项任务: 划分出组成系统的物理元素划分出组成系统的物理元素-程序、文件、数据库、人工过程和文档 设计软件的结构设计软件的结构-确定每个程序的模块组成及模块之间的相互关系。第5章 总体设计软件设计软件设计是后续开发步骤及软件维护工作基础如果没有设计,只能建立一个不稳定的系统结构第5章 总体设计从工程管理的角度来看,软件设计分两步完成总体设计总体设计(概要设计),将软件需求转化为数据结构和软件的系统结构。详细设计详细设计,即过程设计。通过对结构表示进行细化, 得到软件详细的数据结构和算法。5.1 设计过程总体设计的过程(两个主要阶段):系统设计系统设计:确定系统的具体实现方案。结构设计结构设计:确定软件结构。软件设计的9个步骤1设想供选择的方案提出各种可能的实现方案以需求分析阶段的数据流图为出发点,画自动化边界,形成不同的实现系统方案设想把数据流图中的处理分组的各种可能方法,抛弃在技术上行不通的分组方法余下的分组方法代表可能的实现策略,并且可以启示供选择的物理系统2 选取合理的方案从前一步得到的一系列供选择的方案中选取若干个合理的方案通常至少选取低成本、中等成本和高成本的三种方案在此基础上分析员对每种方案准备四份文档:(1) 系统流程图(2) 组成系统的物理元素清单(3) 成本/效益分析(4) 实现这个系统的进度计划3 推荐最佳方案综合分析对比各种合理方案的利弊,从中选出一种自己认为是最理想的方案推荐用户和技术专家应认真审查所推荐的最佳系统如果该系统确实符合用户的需要,并且是在现有条件下完全能够实现的,则应该提请使用部门负责人进一步审批在使用部门的负责人也接受了分析员所推荐的方案之后,将进入总体设计过程的下一个重要阶段结构设计4 功能分解首先是进行结构设计,确定系统是由哪些模块组成 的,以及这些模块之间的关系,确定软件体系结构、数据结构其次是过程设计,确定每个模块的处理过程确定详细的数据结构、算法为确定软件结构首先需要从实现角度把复杂的功能进一步分用算法描述仔细分析数据流图中的每个处理,如果一个处理 的功能过分复杂,必须把它的功能适当地分解成一系列比较 简单的功能应该使每个功能对大多数程序员而言都是明显易懂的工具: 系统层次图System Design Hierarchy及(输入/输出图)HIPO5 设计软件结构任务任务: 确定模块组织成良好的层次系统,顶层模块调用它的下层模块以实现程序的完整功能,每个下层模块 再调用更下层的模块,从而完成程序的一个子功能, 最下层的模块完成最具体的功能:方法方法: 层次图 结构图 面向数据流的设计方法6 设计数据库任务:在需求分析阶段所确定的系统数据需求的基础上,进一步设计数据库模式设计:确定数据库的逻辑结构,常见的数据库形式有关系、层次或网状等子模式设计:为系统中各用户设计出各自的数据视图存储模式设计:确定数据库的空间需求、存储格式、索引组成等7 制定测试计划优点: 早期阶段考虑测试问题,促使软件设计人员在设计时注意提高软件的可测试性8 书写文档(1)系统说明系统说明主要内容 系统流程图:描绘系统构成方案、组成系统的物理元素 成本/效益分析 对最佳方案的概括描述、精化的数据流图 用层次图或结构图描绘的软件结构 用IPO图或其它工具简要描述各个模块的算法 模块间接口关系、建立需求、功能和模块三者之间的交叉参照关 系8 书写文档用户手册用户手册:根据总体设计阶段的结果,修改更正在需求分 析阶段产生的初步的用户手册测试计划测试计划:包括测试策略,测试方案,预期的测试结果, 测试进度计划等等。详细的实现计划详细的实现计划数据库设计结果数据库设计结果9审查和复审技术审查管理复审: 部门的负责人从事5.2 设计原理5.2.1 模块化模块模块:由边界元素限定的相邻程序元素(例如,由边界元素限定的相邻程序元素(例如, 数据说明,可执行的语句)的序列,而且有数据说明,可执行的语句)的序列,而且有一个一个 总体标识符代表它总体标识符代表它模块化模块化: 把程序划分成独立命名且可独立访把程序划分成独立命名且可独立访问的模块问的模块,每个模块完成一个子功能,把这些每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定模块集成起来构成一个整体,可以完成指定的功能满足的功能满足 用户的需求。用户的需求。5.2 设计原理模块化依据模块化依据: 设函数设函数C(x)定义问题定义问题x的复杂程的复杂程度,函数度,函数E(x)确定解决问题确定解决问题x需要的工作量需要的工作量(时间时间)。对于两个问题。对于两个问题P1和和P2如果如果 C(P1)C(P2), 显然显然E(P1)E(P2) C(P1+P2)C(P1)+C(P2) E(P1+P2)E(P1)+E(P2)结论: 如果一个问题由如果一个问题由P1和和P2两个问题组合两个问题组合而成,那么它的复杂程度大于分别考虑每个而成,那么它的复杂程度大于分别考虑每个问题时的复杂程度之和问题时的复杂程度之和, 即把复杂的问题分即把复杂的问题分解成许多容易解决的小问题,原来的问题也解成许多容易解决的小问题,原来的问题也就容易解决了就容易解决了5.2 设计原理模块化优点模块化优点软件结构清晰使软件容易测试和调试,提高软件的可靠性提高软件的可靠性模块化能够提高软件的可修改性模块化有助于软件开发工程的组织管理。5.2.2 抽象定义定义: 抽出事物的本质特性而暂时不考虑它抽出事物的本质特性而暂时不考虑它们的细节们的细节。处理复杂问题的方法处理复杂问题的方法:忽略细节,分层理解:忽略细节,分层理解问题,自顶向下层层加细。问题,自顶向下层层加细。模块化可以提出许多抽象的层次,模块化可以提出许多抽象的层次,不同的层不同的层次用不同的方法解决问题次用不同的方法解决问题 例:开发一个CAD软件,实现一个二维绘软件,实现一个二维绘图系统的全部功能,供低级计算机辅助设计图系统的全部功能,供低级计算机辅助设计使用。使用。5.2.2 抽象抽象层次I:用问题所处环境的术语来描述这用问题所处环境的术语来描述这个软件。个软件。该软件包括一个计算机绘图界面,向绘图员该软件包括一个计算机绘图界面,向绘图员显示图显示图 形,以及一个数字化仪界面,用以代形,以及一个数字化仪界面,用以代替绘图板和丁字替绘图板和丁字 尺。所有直线、折线、矩形、尺。所有直线、折线、矩形、圆及曲线的描画、所有圆及曲线的描画、所有 的几何计算、所有的的几何计算、所有的剖面图和辅助视图都可以用这个剖面图和辅助视图都可以用这个 CAD软件软件实现实现。5.2.2 抽象抽象层次II:任务需求的描述任务需求的描述。列出列出“What”而不是而不是“How”。CAD SOFTWARE TASKS: user interaction task; 2-D drawing creation task; graphics display task; drawing file management task;END5.2.3 逐步求精定义定义:为了能集中精力解决主要问题而尽量推为了能集中精力解决主要问题而尽量推迟对问题细节的考虑。迟对问题细节的考虑。依据依据: Miller法则法则-一个人在任何时候都只一个人在任何时候都只能把注意力集中在(能把注意力集中在(72)个知识块上)个知识块上原则原则: 把精力集中在与当前开发阶段最相关把精力集中在与当前开发阶段最相关的那些方面上,而忽略那些对整体解决方案的那些方面上,而忽略那些对整体解决方案来说虽然是必要的,然而目前还不需要考虑来说虽然是必要的,然而目前还不需要考虑的细节,这些细节将留到以后再考虑的细节,这些细节将留到以后再考虑5.2.3 逐步求精实质实质:把一个时期内必须解决的种种问题按优把一个时期内必须解决的种种问题按优先级排序的技术先级排序的技术, 确保每个问题都将被解决,确保每个问题都将被解决,而且每个问题都将在适当的时候被解决而且每个问题都将在适当的时候被解决, 一一个细化的过程个细化的过程抽象与求精是互补的过程抽象与求精是互补的过程 抽象过程,数据数据, 忽略底层细节忽略底层细节 求精设计中揭示出低层细节5.2.4 信息隐藏和局部化信息隐藏和局部化信息隐藏原理信息隐藏原理:应该这样设计和确定模块,使得一 个模块内包含的信息(过程和数据过程和数据)对对于不需要这些信息的模块来说,是不能访问于不需要这些信息的模块来说,是不能访问的的隐藏模块的隐藏模块的实现实现细节细节, “细节隐藏细节隐藏”独立的模块彼此间仅仅交换那些为了完成系统功能而必须交换的信息局部化局部化: 把一些关系密切的软件元素物理地把一些关系密切的软件元素物理地放得彼此靠近放得彼此靠近优点优点: 易于软件的修改易于软件的修改, 错误传播大大减少错误传播大大减少5.2.5 模块独立模块独立模块独立:每个模块完成一个相对独立的子功能,并且和其他模块之间的关系很简单独立性的重要性独立性的重要性有效的模块化的软件比较容易开发出来独立的模块比较容易测试和维护定性标准度量 内聚内聚Cohesion :衡量一个模块内部各个元素彼衡量一个模块内部各个元素彼此结合的紧密程度此结合的紧密程度耦合耦合Coupling : 衡量不同模块彼此间互相依赖衡量不同模块彼此间互相依赖(连接连接)的紧密程度的紧密程度1 耦合数据耦合数据耦合Data coupling :两个模块彼此间通过两个模块彼此间通过参数交换信息,而且交换的信息仅仅是数据参数交换信息,而且交换的信息仅仅是数据控制耦合控制耦合Control coupling : 传递的信息中有传递的信息中有控制信息控制信息(尽管有时这种控制信息以数据的形尽管有时这种控制信息以数据的形式出现式出现)特征耦合特征耦合: 当把整个数据结构作为参数传递而当把整个数据结构作为参数传递而被调用的模块只需要使用其中一部分数据元被调用的模块只需要使用其中一部分数据元素素1 耦合公共环境耦合公共环境耦合Common coupling :当两个或当两个或多个模块通过一个公共数据环境相互作用时多个模块通过一个公共数据环境相互作用时,公共环境可以是全程变量、共享的通信区、公共环境可以是全程变量、共享的通信区、内存的公共覆盖区、任何存储介质上内存的公共覆盖区、任何存储介质上 的文件、的文件、物理设备等等物理设备等等内容耦合内容耦合Content coupling:控制耦合Control coupling : 传递的信息中传递的信息中有控制信息有控制信息(尽管有时这种控制信息以数据的尽管有时这种控制信息以数据的形式出现形式出现)公共环境耦合公共环境耦合Common coupling :当两个或当两个或多个模块通过一个公共数据环境相互作用时多个模块通过一个公共数据环境相互作用时,公共环境可以是全程变量、共享的通信区、公共环境可以是全程变量、共享的通信区、内存的公共覆盖区、任何存内存的公共覆盖区、任何存 储介质上的文件、储介质上的文件、物理设备等等物理设备等等两个模块的公共环境,下面两种可能耦合两个模块的公共环境,下面两种可能耦合内容耦合内容耦合Content Coupling(1)一个模块访问另一个模块的内部数据;一个模块访问另一个模块的内部数据;(2)一个模块不通过正常入口而转到另一个模块的内部;(3)两个模块有一部分程序代码重叠(只可能出现只可能出现在汇编程序中在汇编程序中);(4)一个模块有多个入口(这意味着一个模块有几这意味着一个模块有几种功能种功能)。原则原则: 尽量使用数据耦合,少用控制耦合,尽量使用数据耦合,少用控制耦合,限制公共耦合的范围,完全不用内容耦合限制公共耦合的范围,完全不用内容耦合 设计原则:尽量使用数据耦合,少用控制耦合,限制公共环境耦合,完全不用内容耦合。数据耦合 控制耦合公共环境耦合 内容耦合低高2 内聚低内聚 中内聚 高内聚偶然内聚 过程内聚 顺序内聚逻辑内聚 通信内聚 功能内聚时间内聚设计时应该力求做到高内聚,中内聚也可用实践表明内聚更重要。高内聚顺序内聚顺序内聚Sequential cohesion :如果一个模如果一个模块内的处理元素和同一个功能密切相关,而块内的处理元素和同一个功能密切相关,而且这些处理必须顺且这些处理必须顺 序执行序执行(通常一个处理元通常一个处理元素的输出数据作为下一个处理元素的输入数素的输出数据作为下一个处理元素的输入数据据)功能内聚功能内聚Functional cohesion :如果模块内如果模块内所有处理元素属于一个整体,完成一个单一所有处理元素属于一个整体,完成一个单一的功能的功能5.3 启发规则启发规则人们在开发计算机软件的长期实践中积累了丰富的经验,总结这些经验得出了一些启发式规则。这些规则不是普遍适用不是普遍适用的,但在许多场合能给软件工程师有益的启示有益的启示。下面介绍7条启发式规则5.3 启发规则启发规则1 改进软件结构提高模块独立性改进软件结构提高模块独立性设计出软件的初步结构以后,应该审查分析这个结构,通过模块分解或合并,力求降低耦合提高内聚2 模块规模应该适中模块规模应该适中过大不易理解(60行行)太小则接口开销过大注意分解后不应降低模块的独立性5.3 启发规则启发规则3 深度、宽度、扇出和扇入都应适当深度、宽度、扇出和扇入都应适当深度深度: 软件结构中控制的层数,它往往能粗软件结构中控制的层数,它往往能粗略地标志一个系统的大小和复杂程度略地标志一个系统的大小和复杂程度层数过多则应该考虑合并层数过多则应该考虑合并宽度宽度: 软件结构内同一个层次上的模块总数软件结构内同一个层次上的模块总数的最大值的最大值宽度越大系统越复杂5.3 启发规则启发规则3 深度、宽度、扇出和扇入都应适当深度、宽度、扇出和扇入都应适当扇出扇出: 一个模块直接控制一个模块直接控制(调用调用)的模块数目的模块数目扇出过大意味着模块过分复杂,需要控制和协调扇出过大意味着模块过分复杂,需要控制和协调过多的下级过多的下级 模块模块扇出过小(例如总是例如总是1)也不好也不好3或或4(扇出的上限通常是扇出的上限通常是59)扇入扇入:直接调用它的上级模块个数直接调用它的上级模块个数不能违背模块独立原理单纯追求高扇入不能违背模块独立原理单纯追求高扇入3 深度、宽度、扇出和扇入都应适当深度、宽度、扇出和扇入都应适当深度、宽度、扇出和扇入都应适当原则: 顶层扇出比较高,中层扇出较少,底层扇入顶层扇出比较高,中层扇出较少,底层扇入到公共的实用模块中去到公共的实用模块中去(底层模块有高扇入。底层模块有高扇入。4模块的作用域应该在控制域之内模块的作用域定义作用域定义为受该模块内一个判定影响的所有模块的集合。模块的控制域控制域是这个模块本身以及所有直接或间接从属于它的模块的集合例:在图在图5.2中模块中模块A的的控制域控制域是A、B、C、D、E、F等模块的集合等模块的集合5 力争降低模块接口的复杂程度力争降低模块接口的复杂程度应该仔细设计模块接口,使得信息传递简单并且和模块的功能一致6 设计单入口单出口的模块设计单入口单出口的模块不要使模块间出现内容耦合容易理解,维护维护7 模块功能应该可以预测模块功能应该可以预测只要输入的数据相同就产生同样的输出5.4 描绘软件结构的图形工具描绘软件结构的图形工具5.4.1层次图和HIPO图层次图层次图功能功能: 用来描绘软件的层次结构用来描绘软件的层次结构层次图层次图符号符号说明说明:矩形框代表模块矩形框代表模块方框间的连线表示调用关系调用关系(而不像层次方框而不像层次方框图那样表示组成关系图那样表示组成关系)适用适用范围范围:自顶向下设计自顶向下设计注意注意:直线表示调用关系直线表示调用关系5.4.1层次图和HIPO图HIPO(层次图加输入层次图加输入/处理处理/输出输出)图功能图功能:用来用来描绘软件的层次结构描绘软件的层次结构符号描述:矩形框代表模块矩形框代表模块方框间的连线表示调用关系(而不像层次方框而不像层次方框图那样表示组成关系图那样表示组成关系)在H图图(层次图层次图)里除了最顶层的方框之外,每里除了最顶层的方框之外,每个方框都加了编号个方框都加了编号5.4.1层次图和HIPO图和H图中每个方框相对应,应该有一张图中每个方框相对应,应该有一张IPO图描绘这个方框代表的模块的处理过程。图描绘这个方框代表的模块的处理过程。HIPO图中的每张图中的每张IPO 图内都应该明显地标图内都应该明显地标出它所描绘的模块在出它所描绘的模块在H图中的编号,以便追图中的编号,以便追踪了解这个模块在软件结构中的位置踪了解这个模块在软件结构中的位置5.4.2 结构图结构图Yourdon提出的结构图,一个有力工具工具功能:描绘软件结构的图形工具描绘软件结构的图形工具符号描述:方框代表模块方框代表模块,框内注明模块的名字或主要功框内注明模块的名字或主要功能能箭头(或直线或直线)表示模块的调用关系表示模块的调用关系带注释的箭头表示模块调用过程中来回传递的信息带注释的箭头表示模块调用过程中来回传递的信息尾部是空心圆表示传递的是数据尾部是实心圆表示传递的是控制信息结构图的附加符号注意注意:层次图和结构图并不严格表示模块的调用次序层次图和结构图并不指明什么时候调用下层模块层次图作为描绘软件结构的文档,结构图并不结构图并不合适合适由层次图导出结构图的过程,可以作为检查由层次图导出结构图的过程,可以作为检查设计正确性和评价模块独立性的好方法设计正确性和评价模块独立性的好方法5.5面向数据流的设计方法基本思路:面向数据流的设计方法定义了一些映射,利用这些映射把数据流图变换成软件结构。5.5.1 概念信息流的类型决定了映射的方法信息流有两种类型: 变换流, 事务流1 变换流信息沿输入通路进入系统,同时由外部形式变换成内部形式,进入系统的信息通过变换中心,经加工处理以后再沿输出通路变换成外部形式离开软件系统。当数据流图具有这些特征时,这种信息流称为变换流相应于取得相应于取得数据、变换数据、变换数据、给出数据,数据、给出数据,变换型系统变换型系统结构图由结构图由 输输入、中心变换入、中心变换和输出等三部和输出等三部分组成分组成时间输入流输出流变换流外部表示内部表示信息1事务流数据沿输入通路到达一个处理T,这个处理,这个处理根据输入数据的类型在若干个动作序列中根据输入数据的类型在若干个动作序列中选出一个来执行。这选出一个来执行。这 类数据流应该划为一类数据流应该划为一类特殊的数据流,称为事务流类特殊的数据流,称为事务流事务中心的任务 接收输入数据(输入数据又称为事务输入数据又称为事务);分析每个事务以确定它的类型;根据事务类型选取一条活动通路。事务型系统结构图3 设计过程设计过程不是一成不变的。运用之妙运用之妙存于怀心存于怀心5.5.2 变换分析变换分析变换分析是一系列设计步骤的总称变换分析是一系列设计步骤的总称,经过这些步骤把具有变换流特点的数据流图按预先确定的模式映射成软件结构。下面通过一个例子说明变换分析的方法。1 例子汽车仪表板汽车仪表板, 假设功能如下所示假设功能如下所示:1 通过模数转换实现传感器和微处理机接口;通过模数转换实现传感器和微处理机接口;2 在发光二极管面板上显示数据;3 指示每小时英里数(mph),行驶的里程,每,行驶的里程,每加仑油行驶的英里数加仑油行驶的英里数(mpg)等等;等等;4 指示加速或减速;5 超速警告:如果车速超过55英里英里/小时,则发小时,则发出超速警告铃声。出超速警告铃声。2 设计步骤第1步复查基本系统模型步复查基本系统模型第2步复查并精化数据流图步复查并精化数据流图第3步确定数据流图具有变换特性还是事务步确定数据流图具有变换特性还是事务特性特性第4步确定输入流和输出流的边界,从而孤步确定输入流和输出流的边界,从而孤立出变换中心立出变换中心第5步完成步完成“第一级分解第一级分解”第6步完成步完成“第二级分解第二级分解”第7步使用设计度量和启发式规则对第一次步使用设计度量和启发式规则对第一次分割得到的软件结构进一步精化分割得到的软件结构进一步精化2 复查并精化数据流图对需求分析阶段得到的数据流图认真复查,精化。 确保是正确的逻辑模型。每个处理都 代表一个规模适中相对独立的子功能。
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号