《总体设计方案.pptx》由会员分享,可在线阅读,更多相关《总体设计方案.pptx(153页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第1页/共153页软件工程导论(第6版)第5章 总体设计21世纪软件工程专业规划教材第2页/共153页第5章 总体设计总体设计的基本目的就是回答“概括地说,系统应该如何实现”这个问题,因此,总体设计又称为概要设计或初步设计。总体设计阶段的另一项重要任务是设计软件的结构,也就是要确定系统中每个程序是由哪些模块组成的,以及这些模块相互间的关系。第3页/共153页主要任务:将需求分析阶段获得的需求说明书转换为计算机中可实现的系统,确定系统的软件结构,形成软件的模块结构图,最终得到软件总体设计说明书。第4页/共153页过程设计:确定每个模块的处理过程。结构设计:确定系统由哪些模块组成,以及这些模块之间
2、的相互关系。软件软件设计设计结构结构 对于大型系统的设计,通常分为两个阶段:结构设计和过程设计。其中,结构设计是总体设计阶段的任务,而过程设计则是详细设计阶段的任务。第6页/共153页主要内容 5.1 设计过程 5.2 设计原理 5.3 启发规则 5.4 描绘软件结构的图形工具 5.5 面向数据流的设计方法 第7页/共153页主要内容 5.1 设计过程 5.2 设计原理 5.3 启发规则 5.4 描绘软件结构的图形工具 5.5 面向数据流的设计方法 第8页/共153页5.1 设计过程总体设计过程系统设计阶段结构设计阶段1.设想供选择的方案2.选取合理的方案3.推荐最佳方案4.功能分解5.设计软
3、件结构6.设计数据库7.制定测试计划8.书写文档9.审查和复审总体设计步骤总体设计步骤第9页/共153页5.1 设计过程典型的总体设计步骤1.设想供选择的方案设想供选择的方案在总体设计阶段分析员应该考虑各种可能的实现方案,并且力求从中选出最佳方案。需求分析阶段得出的数据流图是总体设计的极好的出发点。设想供选择的方案的一种常用的方法是,设想把数据流图中的处理分组的各种可能的方法,抛弃在技术上行不通的分组方法(例如,组内不同处理的执行时间不相容),余下的分组方法代表可能的实现策略,并且可以启示供选择的物理系统。第10页/共153页5.1 设计过程2.选取合理的方案选取合理的方案应该从前一步得到的一
4、系列供选择的方案中选取若干个合理的方案,通常至少选取低成本、中等成本和高成本的3种方案。在判断哪些方案合理时应该考虑在问题定义和可行性研究阶段确定的工程规模和目标,有时可能还需要进一步征求用户的意见。对每个合理的方案,分析员都应该准备下列4份资料。(1)系统流程图。(2)组成系统的物理元素清单。(3)成本/效益分析。(4)实现这个系统的进度计划。第11页/共153页5.1 设计过程3.推荐最佳方案推荐最佳方案用户和有关的技术专家应该认真审查分析员所推荐的最佳系统,如果该系统确实符合用户的需要,并且是在现有条件下完全能够实现的,则应该提请使用部门负责人进一步审批。在使用部门的负责人也接受了分析员
5、所推荐的方案之后,将进入总体设计过程的下一个重要阶段结构设计。第12页/共153页5.1 设计过程4.功能分解功能分解为了最终实现目标系统,必须设计出组成这个系统的所有程序和文件(或数据库)。对程序(特别是复杂的大型程序)的设计,通常分为两个阶段完成:首先进行结构设计,然后进行过程设计。为确定软件结构,首先需要从实现角度把复杂的功能进一步分解。分析员结合算法描述仔细分析数据流图中的每个处理,如果一个处理的功能过分复杂,必须把它的功能适当地分解成一系列比较简单的功能。第13页/共153页5.1 设计过程5.设计软件设计软件结构结构通常程序中的一个模块完成一个适当的子功能。应该把模块组织成良好的层
6、次系统,顶层模块调用它的下层模块以实现程序的完整功能,每个下层模块再调用更下层的模块,完成程序的一个子功能,最下层的模块完成最具体的功能。6.设计数据库设计数据库对于需要使用数据库的那些应用系统,软件工程师应该在需求分析阶段所确定的系统数据需求的基础上,进一步设计数据库。第14页/共153页5.1 设计过程7.制定制定测试计划测试计划在软件开发的早期阶段考虑测试问题,能促使软件设计人员在设计时注意提高软件的可测试性。第7章具体讨论8.书写书写文档文档应该用正式的文档记录总体设计的结果,在这个阶段应该完成的文档通常有下述几种。(1)系统说明系统说明(2)用户手册用户手册(3)测试计划测试计划包括
7、测试策略,测试方案,预期的测试结果,测试进度计划等(4)详细的实现计划详细的实现计划(5)数据库数据库设计设计结果结果第15页/共153页5.1 设计过程9.审查和复审审查和复审最后应该对总体设计的结果进行严格的技术审查,在技术审查通过之后再由客户从管理角度进行复审。第16页/共153页总体设计阶段的文档总体设计阶段的文档(1)总体设计说明书(包括系统实现方案和软件模块结构);(2)测试计划(包括测试策略、测试方案、预测的测试结果、测试进度计划等);(3)用户手册(根据总体设计阶段的结果,编写的初步的用户操作手册);(4)详细的实现计划;(5)数据库设计结果。第17页/共153页主要内容 5.
8、1 设计过程 5.2 设计原理 5.3 启发规则 5.4 描绘软件结构的图形工具 5.5 面向数据流的设计方法 第18页/共153页 软件设计基本原理 软件的模块化软件的模块化 模块独立性模块独立性 抽象和逐步求精抽象和逐步求精 信息隐蔽和局部化信息隐蔽和局部化第19页/共153页5.2 设计原理 模块化模块模块是由边界元素限定的相邻程序元素(例如,数据说明,可执行的语句)的序列,而且有一个总体标识符代表它。模块模块是构成程序的基本构件。模块是数据说明、可执行语句等程序对象的集合,是单模块是数据说明、可执行语句等程序对象的集合,是单独命名的并且可以通过名字来访问。例如过程、函数、子程独命名的并
9、且可以通过名字来访问。例如过程、函数、子程序等。序等。模块化模块化就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求。第20页/共153页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)第21页/共153页5.2
10、 设计原理也就是说,如果一个问题由P1和P2两个问题组合而成,那么它的复杂程度大于分别考虑每个问题时的复杂程度之和。综上所述,得到下面的不等式E(P1+P2)E(P1)+E(P2)这种“分而治之”的思想提供了模块化的根据:把复杂的问题分解成许多容易解决的小问题,原来的问题也就容易解决了。第22页/共153页5.2 设计原理由上面的不等式似乎还能得出下述结论:如果无限地分割软件,最后为了开发软件而需要的工作量也就小得可以忽略了。事实上,还有另一个因素在起作用,从而使得上述结论不能成立。如图,当模块数目增加时每个模块的规模将减小,开发单个模块需要的成本(工作量)确实减少了;但是,随着模块数目增加,
11、设计模块间接口所需要的工作量也将增加。根据这两个因素,得出了图中的总成本曲线。每个程序都相应地有一个最适当的模块数目M,使得系统的开发成本最小。第23页/共153页5.2 设计原理虽然目前还不能精确地决定M的数值,但是在考虑模块化的时候总成本曲线确实是有用的指南。在第六章和5.3节讲解。采用模块化原理可以使软件结构清晰,不仅容易设计也容易阅读和理解。模块化也有助于软件开发工程的组织管理,一个复杂的大型程序可以由许多程序员分工编写不同的模块,并且可以进一步分配技术熟练的程序员编写困难的模块。第24页/共153页5.2 设计原理 抽象人类在认识复杂现象的过程中使用的最强有力的思维工具是抽象。人们在
12、实践中认识到,在现实世界中一定事物、状态或过程之间总存在着某些相似的方面(共性)。把这些相似的方面集中和概括起来,暂时忽略它们之间的差异,这就是抽象。或者说抽象就是抽出事物的本质特性而暂时不考虑它们的细节。软件工程过程的每一步都是对软件解法的抽象层次的一次精化。在可行性研究阶段,软件作为系统的一个完整部件;在需求分析期间,软件解法是使用在问题环境内熟悉的方式描述的;当由总体设计向详细设计过渡时,抽象的程度也就随之减少了;最后,当源程序写出来以后,也就达到了抽象的最低层。第25页/共153页5.2 设计原理 逐步求精逐步求精定义为为了能集中精力解决主要问题而尽量推迟对问题细节的考虑。逐步求精最初
13、是由Niklaus Wirth提出的一种自顶向下的设计策略。按照这种设计策略,程序的体系结构是通过逐步精化处理过程的层次而设计出来的。通过逐步分解对功能的宏观陈述而开发出层次结构,直至最终得出用程序设计语言表达的程序。p求精实际上是细化过程。p抽象与求精是一对互补的概念。第26页/共153页5.2 设计原理 信息隐藏和局部化 信息隐藏原理:应该这样设计和确定模块,使得一个模块内包含的信息(过程和数据)对于不需要这些信息的模块来说,是不能访问的。局部化是指把一些关系密切的软件元素物理地放得彼此靠近。如果在测试期间和以后的软件维护期间需要修改软件,使用信息隐藏原理作为模块化系统设计的标准就会带来极
14、大好处。第27页/共153页 软件独立性准则 模模块块独独立立性性是是模模块块化化、抽抽象象和和信信息息隐隐蔽蔽的的直直接接产产物物,每每个个模模块块只只要要完完成成独独立立的的功功能能,与与其其它它模模块块联联系系越越小小,则则模块的独立性就越强。模块的独立性就越强。独立:模块完成独立的功能独立:模块完成独立的功能 符合信息隐蔽和信息局部化原则符合信息隐蔽和信息局部化原则 模块间关联和依赖程度尽量小模块间关联和依赖程度尽量小 思考回答:思考回答:为什么模块独立性很重要?为什么模块独立性很重要?第28页/共153页5.2 设计原理 模块独立模块的独立性很重要,因为有效的模块化(即具有独立的模块
15、)的软件比较容易开发出来。独立的模块比较容易测试和维护。模块的独立程度可以由两个定性标准度量,这两个标准分别称为内聚和耦合。第29页/共153页 耦合度是对软件结构中模块间关联耦合度是对软件结构中模块间关联程度的一种度量,耦合度也可以分为六程度的一种度量,耦合度也可以分为六级:级:非直接耦合非直接耦合数据耦合数据耦合控制耦合控制耦合 特征耦合特征耦合公共环境耦合公共环境耦合内容耦合内容耦合模块的耦合第30页/共153页5.2 设计原理1 耦合耦合耦合是对一个软件结构内不同模块之间互连程度的度量。耦合强弱取决于模块间接口的复杂程度,进入或访问一个模块的点,以及通过接口的数据。模块耦合分为数据耦合
16、、控制耦合、特征耦合、公共环境耦合和内容耦合第31页/共153页1 1)数据耦合)数据耦合 两个模块彼此间通过参数交换信息,而且交换的信息仅仅是数据,那么这种耦合称为数据耦合。数据耦合是低耦合。系统中至少必须存在这种耦合。第32页/共153页2 2)特征耦合)特征耦合 当把整个数据结构作为参数传递而被调用的模块只需要使用其中一部分数据元素时,就出现了特征耦合。计算水电费计算水费计算电费住户情况水费电费住户情况“住户情况”是一个数据结构,图中模块都与此数据结构有关。“计算水费”和“计算电费”本无关,由于引用了此数据结构产生依赖关系,它们之间就是特征偶合。第33页/共153页思考:如何将特征耦合改
17、为数据耦合?思考:如何将特征耦合改为数据耦合?计算水量和电费计算水费计算电费水费电费电费本月用水量本月用电量第34页/共153页3 3)控制耦合)控制耦合 传递的信息中有控制信息(尽管有时这种控制信息以数据的形式出现),则这种耦合称为控制耦合。控制耦合是中等程度的耦合。例如:控制耦合通常会增加系统的复杂性,有时例如:控制耦合通常会增加系统的复杂性,有时适当分解模块可消除控制耦合。适当分解模块可消除控制耦合。第35页/共153页 去除模块间控制耦合的方法:去除模块间控制耦合的方法:将被调用模块内的判定上移到调用模块中进行;将被调用模块内的判定上移到调用模块中进行;被调用模块分解成若干单一功能模块
18、。被调用模块分解成若干单一功能模块。第36页/共153页控制耦合修改控制耦合为数据耦合:A A计算平均分B1B1平均成绩计算最高分B2B2最高成绩第37页/共153页5.2 设计原理4)公共环境耦合)公共环境耦合当两个或多个模块通过一个公共数据环境相互作用时,它们之间的耦合称为公共环境耦合。公共环境可以是全程变量、共享的通信区、内存的公共覆盖区、任何存储介质上的文件、物理设备等。公共环境耦合的复杂程度随耦合的模块个数而变化,当耦合的模块个数增加时复杂程度显著增加。第38页/共153页公共环境耦合公共耦合的复杂程度随耦合模块的个数增多而显著增加。若只有两个模块间存在公共数据环境,则公共耦合有两种
19、情况,松散公共耦合和紧密公共耦合。AB公共数据区AB公共数据区a.松散公共耦合b.紧密公共耦合第39页/共153页5.2 设计原理只有两个模块有公共环境,耦合有下面两种可能。(1)一个模块往公共环境送数据,另一个模块从公共环境取数据。这是数据耦合的一种形式,是比较松散的耦合。(2)两个模块都既往公共环境送数据又从里面取数据,这种耦合比较紧密,介于数据耦合和控制耦合之间。第40页/共153页5.2 设计原理5)内容耦合)内容耦合最高程度的耦合是内容耦合。如果出现下列情况之一,两个模块间就发生了内容耦合。l一个模块访问另一个模块的内部数据。l 一个模块不通过正常入口而转到另一个模块的内部。l 两个
20、模块有一部分程序代码重叠(只可能出现在汇编程序中)。l 一个模块有多个入口(这意味着一个模块有几种功能)。应该坚决避免使用内容耦合。应该坚决避免使用内容耦合。第41页/共153页5.2 设计原理5)内容耦合最高程度的耦合是内容耦合。如果发生下列情形之一,两模块之间就产生了内容耦合:一个模块直接访问另一模块的内部数据;一个模块不通过正常入口转到另一模块的内部;两个模块有部分程序代码重叠;一个模块有多个入口。一模块直接访问另一模块的内部信息 (程序代码或数据)ABAB模块代码重叠Entry1 Entry1 多入口模块第42页/共153页5.2 设计原理总之,耦合是影响软件复杂程度的一个重要因素。应
21、该采取下述设计原则:尽量使用数据耦合,少用控制耦合和特征耦合,限制公共环境耦合的范围,完全不用内容耦合。第43页/共153页小结:小结:模块耦合越弱,则说明模块的独立性越强 与内聚度正好相反,在设计软件时应追求尽可能松散耦合的系统。因为对这类系统中任一模块的设计、测试和维护相对独立。由于模块间联系较少,错误在模块间传播的可能性也随之变小。如何降低模块间的耦合度:尽量使用数据耦合;少用控制耦合;限制公共耦合的范围;坚决避免使用内容耦合。第44页/共153页确定模块之间的耦合类型:编号输入输出1飞机类型状态标志2飞机零件清单3功能代码4飞机零件清单5零件编号零件制造商6零件编号零件名称模块p、t和
22、u更新同一数据库模块接口描述第45页/共153页 模块p和q之间(接口1)数据耦合;模块r和t之间(接口5)数据耦合;模块s和u之间(接口6)数据耦合;模块q和r之间(接口3)传递的是功能代码,因此两个模块之间是控制耦合;模块p调用模块s时(接口2)如果模块s使用或更新模块p传递给它的零件清单中的所有元素,则模块p和s之间的耦合是数据耦合;如果模块s只访问该清单中的一部分元素,则模块p和模块s之间的耦合是特征耦合。模块q和模块s(接口4)的情况如上。模块p、t、u更新同一个数据库,因此,它们之间具有公共环境耦合。第46页/共153页模块的内聚 内聚度按其高低程度可分为七级,内聚度越高越好。内聚
23、度按其高低程度可分为七级,内聚度越高越好。内聚性:又称为块内联系,指模块的功能强度的度量,即内聚性:又称为块内联系,指模块的功能强度的度量,即一个模块内部各个元素彼此结合的紧密程度的度量。一个模块内部各个元素彼此结合的紧密程度的度量。(1 1)偶然内聚)偶然内聚(2 2)逻辑内聚)逻辑内聚(3 3)时间内聚)时间内聚 (4 4)过程内聚)过程内聚(5 5)通信内聚)通信内聚 (6 6)顺序内聚)顺序内聚 (7 7)功能内聚)功能内聚第47页/共153页内聚标志着一个模块内部各个元素间彼此结合的紧密程度。简单地说,理想内聚的模块只做一件事情。设计时应该力求做到高内聚,通常中等程度的内聚也是可以采
24、用的,而且效果和高内聚相差不多。但是,坚决不要使用低内聚。内聚和耦合是密切相关的,模块内的高内聚往往意味着模块间的低耦合。内聚和耦合都是进行模块化设计的有力工具。实践表明,内聚更重要,应该把更多注意力集中到提高模块的内聚程度上。第48页/共153页5.2 设计原理2)内聚内聚内聚衡量一个模块内部各个元素彼此结合的紧密程度。内聚标志着一个模块内各个元素彼此结合的紧密程度,它是信息隐藏和局部化概念的自然扩展。简单地说,理想内聚的模块只做一件事情。内聚和耦合是密切相关的,模块内的高内聚往往意味着模块间的松耦合。内聚分为三大类低内聚、中内聚和高内聚第49页/共153页5.2 设计原理低内聚低内聚u偶然
25、内聚u逻辑内聚u时间内聚第50页/共153页1 1)偶然内聚)偶然内聚低级内聚低级内聚 一个模块完成一组任务,这些任务彼此间即使有关系,关系也是很松散的,就叫做偶然内聚。如:如:A A、B B两个模块含有相同的一段代码两个模块含有相同的一段代码C C,程序员,程序员为了节约内存,而将为了节约内存,而将A A、B B放在同一模块内,以共享放在同一模块内,以共享C C,模块模块ABAB即为偶然内聚。即为偶然内聚。缺点:可理解性差,缺点:可理解性差,可修改性差可修改性差第51页/共153页2 2)逻辑内聚)逻辑内聚低级内聚低级内聚 一个模块完成的任务在逻辑上属于相同或相似的一类,则称为逻辑内聚。例如
26、:把几种相关的例如:把几种相关的功能(逻辑上相似的功能)功能(逻辑上相似的功能)组合在一模块内,每次调用组合在一模块内,每次调用时,由传给模块的判定参数时,由传给模块的判定参数来确定该模块应执行哪一个来确定该模块应执行哪一个功能。功能。调用模块判定读一个记录写一个记录被调用模块!逻辑内聚导致模块间的控制耦合第52页/共153页3 3)时间内聚)时间内聚低级内聚低级内聚 一个模块包含的任务必须在同一段时间内执行,就叫时间内聚。例如:系统初始化模块、系统结束模块、紧急故障处例如:系统初始化模块、系统结束模块、紧急故障处理模块等均是时间性内聚模块理模块等均是时间性内聚模块 例如:财务软件中,例如:财
27、务软件中,“年终结算年终结算”就是在年终时需就是在年终时需要做的一系列任务,如第四季度结算、年结算、年度要做的一系列任务,如第四季度结算、年结算、年度经费结余额转入下一年度的经费结余额转入下一年度的“经费来源经费来源”、“下一年下一年度度”的的“支出支出”取初始值为取初始值为0 0等,把这些任务放在同一等,把这些任务放在同一模块中。模块中。第53页/共153页5.2 设计原理中内聚中内聚u过程内聚u通信内聚第54页/共153页4 4)过程内聚)过程内聚中级内聚中级内聚 一个模块内的处理元素是相关的,而且必须以特定次序执行,则称为过程内聚。读入成绩单读入并审查成绩单审查成绩单统计成绩打印成绩统计
28、并打印成绩单第55页/共153页5 5)通信内聚)通信内聚中级内聚中级内聚 模块中所有元素都使用同一个输入数据和(或)产生同一个输出数据,则称为通信内聚。流水账文件产生上旬统计表产生中旬统计表产生下旬统计表产生月统计表 例如,财务软件中的例如,财务软件中的流水账文件中含有某个流水账文件中含有某个月内全部收支流水账记月内全部收支流水账记录,利用该文件可分别录,利用该文件可分别产生该月上旬、中旬、产生该月上旬、中旬、下旬的三种不同统计表,下旬的三种不同统计表,以及该月总统计报表。以及该月总统计报表。第56页/共153页5.2 设计原理高高内内聚聚u 顺序内聚u 功能内聚第57页/共153页6 6)
29、顺序内聚)顺序内聚高级内聚高级内聚 一个模块内的处理元素和同一个功能密切相关,而且一个成分的输出作为另一个成分的输入,则称为顺序内聚。求一元二次方程1.输入系数2.求解3.打印方程的解思考:过程内聚和顺序内聚区别?顺序内聚中是数据流从一个处理元流到另一个处理元;过程内聚是控制流从一个动作流到另一动作。第58页/共153页7 7)功能内聚)功能内聚高级内聚高级内聚 模块内所有处理元素属于一个整体,完成一个单一的功能,则称为功能内聚。功能内聚是最高程度的内聚。例如,一个模块仅完成一个矩阵的输出,就是一个具例如,一个模块仅完成一个矩阵的输出,就是一个具有功能性内聚的模块。有功能性内聚的模块。第59页
30、/共153页内聚性:内聚性:设计软件时,应该能够识别内聚度的高低,设计软件时,应该能够识别内聚度的高低,并通过修改设计尽可能提高模块内聚度,并通过修改设计尽可能提高模块内聚度,从而获得较高的模块独立性。从而获得较高的模块独立性。力求做到高内聚,尽量少用中内聚,不用力求做到高内聚,尽量少用中内聚,不用低内聚低内聚第60页/共153页例题:确定每个模块的内聚类型第61页/共153页耦合、内聚与模块独立性的关系第62页/共153页主要内容 5.1 设计过程 5.2 设计原理 5.3 启发规则 5.4 描绘软件结构的图形工具 5.5 面向数据流的设计方法 第63页/共153页结构设计原则结构设计原则第
31、64页/共153页5.3 启发规则1.改进软件结构提高模块独立性改进软件结构提高模块独立性设计出软件的初步结构以后,应该审查分析这个结构,通过模块分解或合并,力求降低耦合提高内聚。2.模块规模应该适中模块规模应该适中一个模块的规模不应过大,最好能写在一页纸内(通常不超过60行语句)第65页/共153页5.3 启发规则3.深度、宽度、扇出和扇入都应适当深度、宽度、扇出和扇入都应适当深度:软件结构中控制的层数,过大表示分工过细。宽度:软件结构内同一个层次上的模块总数的最大值,过大表示系统复杂度大。扇出:一个模块直接控制(调用)的模块数目,3 fan-out 9扇入:一个模块被多少个上级模块直接调用
32、的数目 在不破坏独立性的前提下,fan-in 大的比较好。第66页/共153页 软软件件结结构构表表示示软软件件的的系系统统结结构构,它它是是软软件件模模块块间间关关系系的表示,均表示为层次关系的表示,均表示为层次关系。软 件 结 构 示 意 图0层层1层层2层层ABCDEFGHIJKLMN深度宽度扇入为2扇出为3扇入为3宽度深度宽度3层层4层层模块间的关系模块间的关系第67页/共153页l 尽量减少高扇出结构的数目,随着深度的增加争取更多的扇入;l 扇出过大意味着模块过分复杂,需要控制和协调过多的下级模块。一般来说,顶层扇出高,中间扇出少,底层高扇入。第68页/共153页5.3 启发规则4.
33、模块的作用域应该在控制域之内模块的作用域应该在控制域之内作用域:受该模块内一个判定影响的所有模块的集合。控制域:模块本身以及所有直接或间接从属于它的模块的集合。第69页/共153页模块模块A A的控制域:的控制域:ABCDEABCDE模块的集合模块的集合当当A A中的判定只影响中的判定只影响B B时,满足规则;时,满足规则;若若A A中的一个判定影响中的一个判定影响F F时,则模块时,则模块A A的作用范围不在的作用范围不在它的控制范围内。它的控制范围内。第70页/共153页解决的办法有下面两种:(1 1)将将将将A A中的判定点上移至中的判定点上移至中的判定点上移至中的判定点上移至WW模块模
34、块模块模块(2 2)把模块)把模块)把模块)把模块F F移到移到移到移到A A的控制域的控制域的控制域的控制域内,成为它的直接下级模块内,成为它的直接下级模块内,成为它的直接下级模块内,成为它的直接下级模块第71页/共153页5.3 启发规则怎样修改软件结构才能使作用域是控制域的子集呢?方法1是把做判定的点往上移方法2是把那些在作用域内但不在控制域内的模块移到控制域内。如果在设计过程中,发现模块作用范围不在其控制范围之内,可以用“上移判点”或“下移受判断影响的模块,将它下移到判断所在模块的控制范围内”的方法加以改进。第72页/共153页5.3 启发规则5.力争降低模块接口的复杂程度力争降低模块
35、接口的复杂程度模块接口复杂是软件发生错误的一个主要原因。应该仔细设计模块接口,使得信息传递简单并且和模块的功能一致。接口复杂或不一致(即看起来传递的数据之间没有联系),是紧耦合或低内聚的征兆,应该重新分析这个模块的独立性。第73页/共153页5.3 启发规则6.设计单入口单出口的模块设计单入口单出口的模块这条启发式规则警告软件工程师不要使模块间出现内容不要使模块间出现内容耦合耦合。当从顶部进入模块并且从底部退出来时,软件是比较容易理解容易理解的,因此也是比较容易维护容易维护的。7.模块功能应该可以预测模块功能应该可以预测相同的输入应该有相同的输出,否则难以理解、测试和维护。模块的功能应该能够预
36、测,但也要防止模块功能过分局限。第74页/共153页主要内容 5.1 设计过程 5.2 设计原理 5.3 启发规则 5.4 描绘软件结构的图形工具 5.5 面向数据流的设计方法 第75页/共153页5.4 描绘软件结构的图形工具层次图用来描绘软件的层次结构。数据结构的层次方框图相同,但是表现的内容却完全不同。层次图很适于在自顶向下设计软件的过程中使用。层次图和HIPO图正文加工系统正文加工系统输入输入 输出输出 编辑编辑 加标题加标题 存储存储 检索检索 编目录编目录 格式化格式化添加添加 删除删除 插入插入 修改修改 合并合并 列表列表第76页/共153页IPO图图层次图中的每一个模块,均可
37、用一张IPO图来描述。IPO 图由输入、处理和输出三个框组成,需要时还可以增加一个数据文件框。IPO图在需求分析阶段主要用来描述系统的主要算法。第77页/共153页IPO图例子图例子(班务管理系统)未缴班费处理添加新的缴费学生名单出错信息 记录不符合1 将合格标志送回上一级2 调用模式3 将核对的记录记入文件4 修改学生记录5 添加学生记录1 核对学号和原有学生记录2 核查学生缴费状况3 处理过程1 上组模块送入学生数据2 读取原有学生记录3 读取学生学号4 学生所缴班费 输出部分 O O 处理部分 P P输入部分 I I使用单位 教务处和班主任模块名称 财务信息查询 IPO图图 财务查询财务
38、查询IPO图图1 表示了财务查询系统,它讲述如何查询学生缴费情况,表示了财务查询系统,它讲述如何查询学生缴费情况,并且验证其并且验证其是否准确是否准确第78页/共153页HIPO图图层次图加上编号称为H图。在层次图的基础上,除最顶层的方框之外,其余每个方框都加了编号。层次图中每一个方框都有一个对应IPO图(表示模块的处理过程)。每张IPO图应增加编号与其表示的(对应的)层次图编号一致。正文加工系统输入1.0输出2.0编辑3.0加标题4.0存储5.0检索6.0编目录7.0格式化8.0添加3.1删除3.2插入3.3修改3.4合并3.5列表3.6第79页/共153页 一个一个IPOIPO图仅能够描述
39、单个处理功能的输入数据、图仅能够描述单个处理功能的输入数据、数据处理和输出数据之间的关系,对于整个软件系统数据处理和输出数据之间的关系,对于整个软件系统的总体结构不能进行清晰的描述。因此在软件设计中,的总体结构不能进行清晰的描述。因此在软件设计中,我们通常将我们通常将HIPOHIPO图和图和IPOIPO图相结合,利用这两个工具同图相结合,利用这两个工具同共来表达系统的总体结构和模块的处理功能。共来表达系统的总体结构和模块的处理功能。HIPOHIPO图称为层次结构图,即分层的图称为层次结构图,即分层的IPOIPO图,是系图,是系统设计的描述工具,是一种描述系统结构和模块内部统设计的描述工具,是一
40、种描述系统结构和模块内部处理功能的工具。处理功能的工具。HIPOHIPO图由以下两部分组成:图由以下两部分组成:(1 1)层次结构图:描述整个系统的设计结以及各类模)层次结构图:描述整个系统的设计结以及各类模块之间的关系。块之间的关系。(2 2)IPOIPO图:描述某个特定模块内部的处理过程和输图:描述某个特定模块内部的处理过程和输入入/输出关系。输出关系。第80页/共153页检 索2 题名检索1 ISBN号检索3 作者检索 HIPO图 IPO图 第81页/共153页5.4 描绘软件结构的图形工具Yourdon提出的结构图是进行软件结构设计的工具。图中一个方框代表一个模块,框内注明模块的名字或
41、主要功能;方框之间的箭头(或直线)表示模块的调用关系。尾部是空心圆表示传递的是数据,实心圆表示传递的是控制信息。结构图第82页/共153页结构化设计图(SC图的符号)(1)方框代表模块,框内注明模块的名字和主要功能。同一名字的模块只允许出现一次。(2)方框之间的大箭头或直线表示模块的调用关系。(3)带注释的小箭头表示模块调用时传递的信息及其传递方向。v尾部加空心圆的小箭头表示传递数据信息。v尾部加实心圆的小箭头表示传递控制信息。(4)选择结构,菱形表示有条件的调用(5)循环结构,模块 H 循环调用模块 A,B,C,由左到右顺序调用第83页/共153页结构图例:编辑学生记录读学生记录学生数据无此
42、学生学号第84页/共153页模块结构图中的模块类型(1)(1)传入模块传入模块 传入模块从下属模块取得数据传入模块从下属模块取得数据,经过某些处理经过某些处理,再将其传送给上级模再将其传送给上级模块。块。(2)(2)传出模块传出模块 传出模块从上级模块中获取数据传出模块从上级模块中获取数据,进行某些处理进行某些处理,再将其传送给下属再将其传送给下属模块。模块。(3)(3)变换模块变换模块 也叫加工模块也叫加工模块,它从上级模块取得数据它从上级模块取得数据,进行特定的处理进行特定的处理,转换成转换成其他形式其他形式,再传送回上级模块。再传送回上级模块。第85页/共153页(4)(4)协调模块协调
43、模块 对所有的下属模块进行协调和管理的模块对所有的下属模块进行协调和管理的模块,在一个较好的模块结构图中在一个较好的模块结构图中,该模块应在较高层出现。该模块应在较高层出现。第86页/共153页模块间调用的规则(1 1)每个模块有自身的任务,只有接收到上级模块的调用命令时才能执行。(2 2)模块之间的通信只限于其直接上、下级模块,任何模块不能直接与其他上下级模块或同级模块发生通信联系。(3 3)若有某模块要与非直接上、下级的其他模块发生通信联系,必须通过其上下级模块进行传递(4 4)模块调用顺序为自上而下。第87页/共153页提示层次图和结构图并不严格表示模块的调用次序,也不指明什么时候调用下
44、层模块,他们仅仅表示一个模块调用那些模块,至于模块内有无其他成分则完全没有表示。通常用层次图作为描述软件结构的文档。结构图作为文档并不合适,因为图中包含信息过多,有时反而降低了清晰程度。但是,结构图可以作为检查设计正确性和评价模块独立性的好方法。第88页/共153页主要内容 5.1 设计过程 5.2 设计原理 5.3 启发规则 5.4 描绘软件结构的图形工具 5.5 面向数据流的设计方法 第89页/共153页 SD(Structured Design)法法与与SA、SP法法前前后后衔衔接接,是结构化开发方法的核心。是结构化开发方法的核心。它是以需求分析阶段产生的数据流图为基础,根据问题域的数据
45、流定义一组不同的映射,把数据流图变换成软件结构。5.5 面向数据流的设计方法第90页/共153页2.作用作用 提供了方便的从数据流图到软件结构的变提供了方便的从数据流图到软件结构的变换。换。3.目的目的 提出满足系统需求的最佳软件结构。提出满足系统需求的最佳软件结构。变换流事务流1.SD SD 法的总体设计阶段 任务:解解决决系系统统的的模模块块结结构构,即即分分解解模模块块,确确定定模块功能模块功能及系统模块的层次结构。及系统模块的层次结构。文档:模块结构图及其模块功能说明。模块结构图及其模块功能说明。第91页/共153页面向数据流的设计方法面向数据流的设计方法以数据流图为基础,它定义了把数
46、据流图变换成软件结构的不同映射方法。因为任何系统都可以用数据流图表示,所以面向数据流的设计方法理论上可以设计出任何软件的系统结构。数据流类型决定了映射方法。数据流有变换流和事务流两种基本类型。第92页/共153页5.5 面向数据流的设计方法面向数据流的设计方法把信息流映射成软件结构面向数据流的设计方法把信息流映射成软件结构,信息流信息流的类型决定了映射的方法的类型决定了映射的方法。信息流有下述两种类型。1)变换流)变换流信息沿输入通路进入系统,由外部形式变换成内部形式,进入系统的信息通过变换中心,经加工处理以后再沿输出通路变换成外部形式离开软件系统。当数据流图具有这些特征时,这种信息流就叫作变
47、换流。概念第93页/共153页5.5 面向数据流的设计方法2)事务流)事务流数据沿输入通路到达一个处理T,这个处理根据输入数据的类型在若干个动作序列中选出一个来执行。这类数据流应该划为一类特殊的数据流,称为事务流。处理T称为事务中心完成下述任务:(1)接收输入数据(输入数据又称为事务)。(2)分析每个事务以确定它的类型。(3)根据事务类型选取一条活动通路。第94页/共153页变换型数据流图VS事务性数据流图变换中心输入输出变换型结构事务中心接受路径动作路径基本结构 特征特征事务型结构由输入、变换中心和输出三部分组成具有在多种事务中选择执行某类事物的能力变换型数据流图事务型数据流图第95页/共1
48、53页5.5 面向数据流的设计方法3)设计过程第96页/共153页SDSD方法方法实施的要点是:(1)首先研究、分析和审查数据流图,从软件的需求规格说明中弄清数据流加工的过程。(2)然后根据数据流图决定问题的类型,即确定是变换型还是事务型。针对两种不同的类型分别进行分析处理。(3)由数据流图推导出系统的初始结构图。(4)利用一些试探性原则来改进系统的初始结构图,直到得到符合要求的结构图为止。(5)修改和补充数据词典。(6)制定测试计划。第97页/共153页 简单地说,SD方法的步骤有两步:第一步是建立符合需求规格说明书要求的初始结构图(一般由数据流图导出初始结构图);第二步再用块间联系和块内联
49、系等概念对初始结构图做进一步改进。SD方法的步骤 第98页/共153页变换分析步骤:(1)在)在DFD上区分输入、变换中心和输出上区分输入、变换中心和输出3个部分,个部分,标出它们之间的边界;标出它们之间的边界;(2)画出初始的)画出初始的SC图框架,顶层是主控模块,下层图框架,顶层是主控模块,下层(第一层)一般包括输入、输出、变换三个模块。沿数(第一层)一般包括输入、输出、变换三个模块。沿数据调用线标注数据流的名称。据调用线标注数据流的名称。(3)对输入、变换处理、输出这三个分支进行自顶向对输入、变换处理、输出这三个分支进行自顶向下的分解,画出各个分支所需要的全部模块。下的分解,画出各个分支
50、所需要的全部模块。(4)将初始的将初始的SC图的框架和各个分支所需要的全部模图的框架和各个分支所需要的全部模块结合起来,就构成了底层的软件结构图。块结合起来,就构成了底层的软件结构图。总控模块总控模块输入模块输入模块加工模块加工模块输出模块输出模块第99页/共153页映射变换型数据流图变换中心传入部分传出部分总控模块加工模块输入模块输出模块变换型结构图输入加工输出映射第100页/共153页 这这类类数数据据流流图图可可看看成成是是对对输输入入数数据据进进行行转转换换而而得得到到输输出出数数据的处理。据的处理。DFDDFD图图具具有有较较明明确确的的输输入入流流、变变换换中中心心和和输输出出流流