版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数据流图改错题(1)外部实体和实体之间不存在数据流;DF2有错(2)外部实体和数据存储之间不存在数据流;DF6有错(3)数据存储和数据存储之间不存在数据流;DF7有错(4)P1缺少输入数据流,数据不守恒;P1有错(5)P3缺少输出数据流,数据不守恒;P3有错(6)P4的输入和输出数据流是一样的,数据不守恒;P4有错。软件工程导论(第软件工程导论(第6 6版)版)第第5 5章章 总体设计总体设计21世纪软件工程专业规划教材第第5 5章章 总体设计总体设计总体设计的基本目的就是回答“概括地说,系统应该如何实现”这个问题,因此,总体设计又称为概要设计或初步设计。总体设计阶段的另一项重要任务是设计软件
2、的结构,也就是要确定系统中每个程序是由哪些模块组成的,以及这些模块相互间的关系。主要任务: 将需求分析阶段获得的需求说明书转换为计算机中可实现的系统,确定系统的软件结构,形成软件的模块结构图,最终得到软件总体设计说明书。 即软件设计的任务是通过多项设计,构造一个即软件设计的任务是通过多项设计,构造一个高内聚低耦合的软件模型。高内聚低耦合的软件模型。过程设计过程设计系统结构设计系统结构设计数据设计数据设计界面设计界面设计软件设计软件设计过程设计:确定每个模块的处理过程。结构设计:确定系统由哪些模块组成,以及这些模块之间的相互关系。 软件软件设计设计结构结构 对于大型系统的设计,通常分为两个阶段:
3、结构设计和过程设计。其中,结构设计是总体设计阶段的任务,而过程设计则是详细设计阶段的任务。主要内容主要内容 5.1 5.1 设计过程设计过程 5.2 5.2 设计原理设计原理 5.3 5.3 启发规则启发规则 5.4 5.4 描绘软件结构的图形工具描绘软件结构的图形工具 5.5 5.5 面向数据流的设计方法面向数据流的设计方法 主要内容主要内容 5.1 5.1 设计过程设计过程 5.2 5.2 设计原理设计原理 5.3 5.3 启发规则启发规则 5.4 5.4 描绘软件结构的图形工具描绘软件结构的图形工具 5.5 5.5 面向数据流的设计方法面向数据流的设计方法 5.15.1 设计过程设计过程
4、总体设计过程系统设计阶段结构设计阶段1.设想供选择的方案2.选取合理的方案3.推荐最佳方案4.功能分解5.设计软件结构6.设计数据库7.制定测试计划8.书写文档9.审查和复审5.15.1 设计设计过程过程典型的总体设计步骤典型的总体设计步骤1. 设想供选择的方案设想供选择的方案在总体设计阶段分析员应该考虑各种可能的实现方案,并且力求从中选出最佳方案。需求分析阶段得出的数据流图是总体设计的极好的出发点。设想供选择的方案的一种常用的方法是,设想把数据流图中的处理分组的各种可能的方法,抛弃在技术上行不通的分组方法(例如,组内不同处理的执行时间不相容),余下的分组方法代表可能的实现策略,并且可以启示供
5、选择的物理系统。5.15.1 设计设计过程过程2.选取合理的方案选取合理的方案应该从前一步得到的一系列供选择的方案中选取若干个合理的方案,通常至少选取低成本、中等成本和高成本的3种方案。在判断哪些方案合理时应该考虑在问题定义和可行性研究阶段确定的工程规模和目标,有时可能还需要进一步征求用户的意见。对每个合理的方案,分析员都应该准备下列4份资料。(1) 系统流程图。(2) 组成系统的物理元素清单。(3) 成本/效益分析。(4) 实现这个系统的进度计划。5.15.1 设计设计过程过程3.推荐最佳方案推荐最佳方案用户和有关的技术专家应该认真审查分析员所推荐的最佳系统,如果该系统确实符合用户的需要,并
6、且是在现有条件下完全能够实现的,则应该提请使用部门负责人进一步审批。在使用部门的负责人也接受了分析员所推荐的方案之后,将进入总体设计过程的下一个重要阶段结构设计。5.15.1 设计设计过程过程4.功能分解功能分解为了最终实现目标系统,必须设计出组成这个系统的所有程序和文件(或数据库)。对程序(特别是复杂的大型程序)的设计,通常分为两个阶段完成:首先进行结构设计,然后进行过程设计。为确定软件结构,首先需要从实现角度把复杂的功能进一步分解。分析员结合算法描述仔细分析数据流图中的每个处理,如果一个处理的功能过分复杂,必须把它的功能适当地分解成一系列比较简单的功能。5.15.1 设计设计过程过程5.
7、设计软件设计软件结构结构通常程序中的一个模块完成一个适当的子功能。应该把模块组织成良好的层次系统,顶层模块调用它的下层模块以实现程序的完整功能,每个下层模块再调用更下层的模块,完成程序的一个子功能,最下层的模块完成最具体的功能。6. 设计数据库设计数据库对于需要使用数据库的那些应用系统,软件工程师应该在需求分析阶段所确定的系统数据需求的基础上,进一步设计数据库。5.15.1 设计设计过程过程7.制定制定测试计划测试计划在软件开发的早期阶段考虑测试问题,能促使软件设计人员在设计时注意提高软件的可测试性。第7章具体讨论8. 书写书写文档文档应该用正式的文档记录总体设计的结果,在这个阶段应该完成的文
8、档通常有下述几种。(1)系统说明系统说明(2)用户手册用户手册(3)测试计划测试计划包括测试策略,测试方案,预期的测试结果,测试进度计划等(4)详细的实现计划详细的实现计划(5)数据库数据库设计设计结果结果5.15.1 设计设计过程过程9.审查和复审审查和复审最后应该对总体设计的结果进行严格的技术审查,在技术审查通过之后再由客户从管理角度进行复审。总体设计阶段的文档总体设计阶段的文档(1)总体设计说明书(包括系统实现方案和软件模块结构);(2)测试计划(包括测试策略、测试方案、预测的测试结果、测试进度计划等);(3)用户手册(根据总体设计阶段的结果,编写的初步的用户操作手册);(4)详细的实现
9、计划;(5)数据库设计结果。主要内容主要内容 5.1 5.1 设计过程设计过程 5.2 5.2 设计原理设计原理 5.3 5.3 启发规则启发规则 5.4 5.4 描绘软件结构的图形工具描绘软件结构的图形工具 5.5 5.5 面向数据流的设计方法面向数据流的设计方法 软件设计基本原理 软件的模块化软件的模块化 模块独立性模块独立性 抽象和逐步求精抽象和逐步求精 信息隐蔽和局部化信息隐蔽和局部化5.25.2 设计原理设计原理5.2.15.2.1 模块化模块化模块模块是由边界元素限定的相邻程序元素(例如,数据说明,可执行的语句)的序列,而且有一个总体标识符代表它。模块模块是构成程序的基本构件。模块
10、是数据说明、可执行语句等程序对象的集合,是单模块是数据说明、可执行语句等程序对象的集合,是单独命名的并且可以通过名字来访问。例如过程、函数、子程独命名的并且可以通过名字来访问。例如过程、函数、子程序等。序等。模块化模块化就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求。5.25.2 设计原理设计原理模块化是为了使一个复杂的大型程序能被人的智力所管理,是软件应该具备的唯一属性。下面论证上面结论。设函数C(x)定义问题x的复杂程度,函数E(x)确定解决问题x需要的工作量(时间)。对于两个问题P1和P2,如果C(P1
11、)C(P2)显然 E(P1)E(P2)根据人类解决一般问题的经验,另一个有趣的规律是C(P1+P2)C(P1)+C(P2)5.25.2 设计原理设计原理也就是说,如果一个问题由P1和P2两个问题组合而成,那么它的复杂程度大于分别考虑每个问题时的复杂程度之和。综上所述,得到下面的不等式E(P1+P2)E(P1)+E(P2)这种“分而治之”的思想提供了模块化的根据:把复杂的问题分解成许多容易解决的小问题,原来的问题也就容易解决了。 5.25.2 设计原理设计原理由上面的不等式似乎还能得出下述结论:如果无限地分割软件,最后为了开发软件而需要的工作量也就小得可以忽略了。事实上,还有另一个因素在起作用,
12、从而使得上述结论不能成立。如图,当模块数目增加时每个模块的规模将减小,开发单个模块需要的成本(工作量)确实减少了;但是,随着模块数目增加,设计模块间接口所需要的工作量也将增加。根据这两个因素,得出了图中的总成本曲线。每个程序都相应地有一个最适当的模块数目M,使得系统的开发成本最小。5.25.2 设计原理设计原理虽然目前还不能精确地决定M的数值,但是在考虑模块化的时候总成本曲线确实是有用的指南。在第六章和5.3节讲解。采用模块化原理可以使软件结构清晰,不仅容易设计也容易阅读和理解。模块化也有助于软件开发工程的组织管理,一个复杂的大型程序可以由许多程序员分工编写不同的模块,并且可以进一步分配技术熟
13、练的程序员编写困难的模块。5.25.2 设计原理设计原理5.2.25.2.2 抽象抽象人类在认识复杂现象的过程中使用的最强有力的思维工具是抽象。人们在实践中认识到,在现实世界中一定事物、状态或过程之间总存在着某些相似的方面(共性)。把这些相似的方面集中和概括起来,暂时忽略它们之间的差异,这就是抽象。或者说抽象就是抽出事物的本质特性而暂时不考虑它们的细节。软件工程过程的每一步都是对软件解法的抽象层次的一次精化。在可行性研究阶段,软件作为系统的一个完整部件;在需求分析期间,软件解法是使用在问题环境内熟悉的方式描述的;当由总体设计向详细设计过渡时,抽象的程度也就随之减少了;最后,当源程序写出来以后,
14、也就达到了抽象的最低层。5.25.2 设计原理设计原理5.2.35.2.3 逐步求精逐步求精逐步求精定义为为了能集中精力解决主要问题而尽量推迟对问题细节的考虑。逐步求精最初是由Niklaus Wirth提出的一种自顶向下的设计策略。按照这种设计策略,程序的体系结构是通过逐步精化处理过程的层次而设计出来的。通过逐步分解对功能的宏观陈述而开发出层次结构,直至最终得出用程序设计语言表达的程序。p 求精实际上是细化过程。p 抽象与求精是一对互补的概念。5.25.2 设计原理设计原理5.2.45.2.4 信息信息隐藏和局部化隐藏和局部化 信息隐藏原理:应该这样设计和确定模块,使得一个模块内包含的信息(过
15、程和数据)对于不需要这些信息的模块来说,是不能访问的。 局部化是指把一些关系密切的软件元素物理地放得彼此靠近。 如果在测试期间和以后的软件维护期间需要修改软件,使用信息隐藏原理作为模块化系统设计的标准就会带来极大好处。 软件独立性准则 模块独立性模块独立性是模块化、抽象和信息隐蔽的直接产物,是模块化、抽象和信息隐蔽的直接产物,每个模块只要完成独立的功能,与其它模块联系越小,则每个模块只要完成独立的功能,与其它模块联系越小,则模块的独立性就越强。模块的独立性就越强。独立:模块完成独立的功能独立:模块完成独立的功能 符合信息隐蔽和信息局部化原则符合信息隐蔽和信息局部化原则 模块间关联和依赖程度尽量
16、小模块间关联和依赖程度尽量小 思考回答:思考回答: 为什么模块独立性很重要?为什么模块独立性很重要?5.25.2 设计原理设计原理5.2.55.2.5 模块独立模块独立模块的独立性很重要,因为有效的模块化(即具有独立的模块)的软件比较容易开发出来。独立的模块比较容易测试和维护。模块的独立程度可以由两个定性标准度量,这两个标准分别称为内聚和耦合。 耦合度是对软件结构中模块间关联程耦合度是对软件结构中模块间关联程度的一种度量,耦合度也可以分为六级:度的一种度量,耦合度也可以分为六级: 非直接耦合非直接耦合 数据耦合数据耦合 控制耦合控制耦合 特征耦合特征耦合 公共环境耦合公共环境耦合 内容耦合内容
17、耦合模块的耦合5.25.2 设计原理设计原理1 耦合耦合耦合是对一个软件结构内不同模块之间互连程度的度量。耦合强弱取决于模块间接口的复杂程度,进入或访问一个模块的点,以及通过接口的数据。模块耦合分为数据耦合、控制耦合、特征耦合、公共环境耦合和内容耦合 1 1)数据耦合)数据耦合 两个模块彼此间通过参数交换信息,而且交换的信息仅仅是数据,那么这种耦合称为数据耦合。数据耦合是低耦合。系统中至少必须存在这种耦合。 2 2)特征耦合)特征耦合 当把整个数据结构作为参数传递而被调用的模块只需要使用其中一部分数据元素时,就出现了特征耦合。计算水电费计算水电费计算水费计算水费计算电费计算电费住户情况住户情况
18、水费水费电费电费住户情况住户情况“住户情况住户情况”是一个数据结构是一个数据结构, ,图中模块都与此数据结构有关。图中模块都与此数据结构有关。“计算水费计算水费”和和“计算电费计算电费”本无关本无关, ,由于引用了此数据结构产生依赖关系由于引用了此数据结构产生依赖关系, ,它们之间就是特征偶合。它们之间就是特征偶合。思考:如何将特征耦合改为数据耦合?思考:如何将特征耦合改为数据耦合?计算水量和电费计算水量和电费计算水费计算水费计算电费计算电费水费水费本月用水量本月用水量本月用电量本月用电量 3 3)控制耦合)控制耦合 传递的信息中有控制信息(尽管有时这种控制信息以数据的形式出现),则这种耦合称
19、为控制耦合。控制耦合是中等程度的耦合。 例如:控制耦合通常会增加系统的复杂性,有时例如:控制耦合通常会增加系统的复杂性,有时适当分解模块可消除控制耦合。适当分解模块可消除控制耦合。 去除模块间控制耦合的方法:去除模块间控制耦合的方法: 将被调用模块内的判定上移到调用模块中进行;将被调用模块内的判定上移到调用模块中进行; 被调用模块分解成若干单一功能模块。被调用模块分解成若干单一功能模块。控制耦合控制耦合修改控制耦合为数据耦合:修改控制耦合为数据耦合:A A计算平均分计算平均分B1B1平均成绩计算最高分计算最高分B2B2最高成绩5.25.2 设计原理设计原理4)公共环境耦合)公共环境耦合当两个或
20、多个模块通过一个公共数据环境相互作用时,它们之间的耦合称为公共环境耦合。公共环境可以是全程变量、共享的通信区、内存的公共覆盖区、任何存储介质上的文件、物理设备等。公共环境耦合的复杂程度随耦合的模块个数而变化,当耦合的模块个数增加时复杂程度显著增加。公共环境耦合公共环境耦合公共耦合的复杂程度随耦合模块的个数增多而公共耦合的复杂程度随耦合模块的个数增多而显著增加。若只有两个模块间存在公共数据环显著增加。若只有两个模块间存在公共数据环境,则公共耦合有两种情况,松散公共耦合和境,则公共耦合有两种情况,松散公共耦合和紧密公共耦合。紧密公共耦合。AB公共数据区公共数据区AB公共数据区公共数据区a. 松散公
21、共耦合松散公共耦合b.紧密公共耦合紧密公共耦合5.25.2 设计原理设计原理只有两个模块有公共环境,耦合有下面两种可能。(1) 一个模块往公共环境送数据,另一个模块从公共环境取数据。这是数据耦合的一种形式,是比较松散的耦合。(2) 两个模块都既往公共环境送数据又从里面取数据,这种耦合比较紧密,介于数据耦合和控制耦合之间。5.25.2 设计原理设计原理5)内容耦合)内容耦合最高程度的耦合是内容耦合。如果出现下列情况之一,两个模块间就发生了内容耦合。l一个模块访问另一个模块的内部数据。l 一个模块不通过正常入口而转到另一个模块的内部。l 两个模块有一部分程序代码重叠(只可能出现在汇编程序中)。l
22、一个模块有多个入口(这意味着一个模块有几种功能)。应该坚决避免使用内容耦合。应该坚决避免使用内容耦合。5.25.2 设计原理设计原理5)内容耦合)内容耦合最高程度的耦合是内容耦合。如果发生下列情形之一,两模如果发生下列情形之一,两模块之间就产生了内容耦合:块之间就产生了内容耦合:一个模块直接访问另一模块的内部数据;一个模块直接访问另一模块的内部数据;一个模块不通过正常入口转到另一模块的内部;一个模块不通过正常入口转到另一模块的内部;两个模块有部分程序代码重叠;两个模块有部分程序代码重叠;一个模块有多个入口。一个模块有多个入口。一模块直接访问另一模块的内一模块直接访问另一模块的内部信息部信息 (
23、 (程序代码或数据)程序代码或数据)ABAB模块代码重叠模块代码重叠Entry1 Entry1 多入口模块多入口模块5.25.2 设计原理设计原理总之,耦合是影响软件复杂程度的一个重要因素。应该采取下述设计原则:尽量使用数据耦合,少用控制耦合和特征耦合,限制公共环境耦合的范围,完全不用内容耦合。小结:小结:模块耦合越弱,则说明模块的独立性越强 与内聚度正好相反,在设计软件时应追求尽可能松散耦合的系统。因为对这类系统中任一模块的设计、测试和维护相对独立。由于模块间联系较少,错误在模块间传播的可能性也随之变小。 如何降低模块间的耦合度:尽量使用数据耦合;少用控制耦合;限制公共耦合的范围;坚决避免使
24、用内容耦合。确定模块之间的耦合类型:编号编号输入输入输出输出1飞机类型状态标志2飞机零件清单3功能代码4飞机零件清单5零件编号零件制造商6零件编号零件名称模块p、t和u更新同一数据库模块接口描述 模块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)
25、的情况如上。 模块p、t、u更新同一个数据库,因此,它们之间具有公共环境耦合。模块的内聚 内聚度按其高低程度可分为七级,内聚度越高越好。内聚度按其高低程度可分为七级,内聚度越高越好。内聚性:又称为块内联系,指模块的功能强度的度量,即一内聚性:又称为块内联系,指模块的功能强度的度量,即一个模块内部各个元素彼此结合的紧密程度的度量。个模块内部各个元素彼此结合的紧密程度的度量。 (1 1)偶然内聚)偶然内聚 (2 2)逻辑内聚)逻辑内聚 (3 3)时间内聚)时间内聚 (4 4)过程内聚)过程内聚 (5 5)通信内聚)通信内聚 (6 6)顺序内聚)顺序内聚 (7 7)功能内聚)功能内聚内聚标志着一个模
26、块内部各个元素间彼此结内聚标志着一个模块内部各个元素间彼此结合的紧密程度。简单地说,理想内聚的模块只做合的紧密程度。简单地说,理想内聚的模块只做一件事情。设计时应该力求做到高内聚,通常中一件事情。设计时应该力求做到高内聚,通常中等程度的内聚也是可以采用的,而且效果和高内等程度的内聚也是可以采用的,而且效果和高内聚相差不多。但是,坚决不要使用低内聚。聚相差不多。但是,坚决不要使用低内聚。内聚和耦合是密切相关的,模块内的高内聚内聚和耦合是密切相关的,模块内的高内聚往往意味着模块间的低耦合。内聚和耦合都是进往往意味着模块间的低耦合。内聚和耦合都是进行模块化设计的有力工具。实践表明,内聚更重行模块化设
27、计的有力工具。实践表明,内聚更重要,应该把更多注意力集中到提高模块的内聚程要,应该把更多注意力集中到提高模块的内聚程度上。度上。 5.25.2 设计原理设计原理2) 内聚内聚内聚衡量一个模块内部各个元素彼此结合的紧密程度。内聚标志着一个模块内各个元素彼此结合的紧密程度,它是信息隐藏和局部化概念的自然扩展。简单地说,理想内聚的模块只做一件事情。内聚和耦合是密切相关的,模块内的高内聚往往意味着模块间的松耦合。内聚分为三大类低内聚、中内聚和高内聚5.25.2 设计原理设计原理 低内聚低内聚u偶然内聚u逻辑内聚u时间内聚 1 1)偶然内聚)偶然内聚低级内聚低级内聚 一个模块完成一组任务,这些任务彼此间
28、即使有关系,关系也是很松散的,就叫做偶然内聚。 如:如:A A、B B两个模块含有相同的一段代码两个模块含有相同的一段代码C C,程序员,程序员为了节约内存,而将为了节约内存,而将A A、B B放在同一模块内,以共享放在同一模块内,以共享C C,模块模块ABAB即为偶然内聚。即为偶然内聚。缺点:可理解性差,缺点:可理解性差, 可修改性差可修改性差 2 2)逻辑内聚)逻辑内聚低级内聚低级内聚 一个模块完成的任务在逻辑上属于相同或相似的一类,则称为逻辑内聚。 例如:把几种相关的例如:把几种相关的功能(逻辑上相似的功能)功能(逻辑上相似的功能)组合在一模块内,每次调用组合在一模块内,每次调用时,由传
29、给模块的判定参数时,由传给模块的判定参数来确定该模块应执行哪一个来确定该模块应执行哪一个功能。功能。调用模块调用模块判定判定读读一一个个记记录录写写一一个个记记录录被被调调用用模模块块!逻辑内聚导致模块间的控制耦合!逻辑内聚导致模块间的控制耦合 3 3)时间内聚)时间内聚低级内聚低级内聚 一个模块包含的任务必须在同一段时间内执行,就叫时间内聚。 例如:系统初始化模块、系统结束模块、紧急故障处例如:系统初始化模块、系统结束模块、紧急故障处理模块等均是时间性内聚模块理模块等均是时间性内聚模块 例如:财务软件中,例如:财务软件中,“年终结算年终结算”就是在年终时需就是在年终时需要做的一系列任务,如第
30、四季度结算、年结算、年度要做的一系列任务,如第四季度结算、年结算、年度经费结余额转入下一年度的经费结余额转入下一年度的“经费来源经费来源”、“下一年下一年度度”的的“支出支出”取初始值为取初始值为0 0等,把这些任务放在同一等,把这些任务放在同一模块中。模块中。5.25.2 设计原理设计原理 中内聚中内聚u过程内聚u通信内聚 4 4)过程内聚)过程内聚中级内聚中级内聚 一个模块内的处理元素是相关的,而且必须以特定次序执行,则称为过程内聚。读入读入成绩单成绩单读入并审查读入并审查成绩单成绩单审查审查成绩单成绩单统计统计成绩成绩打印打印成绩成绩统计并打印统计并打印成绩单成绩单 5 5)通信内聚)通
31、信内聚中级内聚中级内聚 模块中所有元素都使用同一个输入数据和(或)产生同一个输出数据,则称为通信内聚。流水账文件产生上旬统计表产生中旬统计表产生下旬统计表产生月统计表 例如,财务软件中的例如,财务软件中的流水账文件中含有某个流水账文件中含有某个月内全部收支流水账记月内全部收支流水账记录,利用该文件可分别录,利用该文件可分别产生该月上旬、中旬、产生该月上旬、中旬、下旬的三种不同统计表,下旬的三种不同统计表,以及该月总统计报表。以及该月总统计报表。5.25.2 设计原理设计原理 高高内内聚聚u 顺序内聚u 功能内聚 6 6)顺序内聚)顺序内聚高级内聚高级内聚 一个模块内的处理元素和同一个功能密切相
32、关,而且一个成分的输出作为另一个成分的输入,则称为顺序内聚。求一元二次方程求一元二次方程1.输入系数输入系数2.求解求解3.打印方程的解打印方程的解思考:过程内聚和顺序内聚区别?思考:过程内聚和顺序内聚区别? 顺序内聚中是数据流从一个处理元流到另一个处理元;顺序内聚中是数据流从一个处理元流到另一个处理元; 过程内聚是控制流从一个动作流到另一动作。过程内聚是控制流从一个动作流到另一动作。7 7)功能内聚)功能内聚高级内聚高级内聚 模块内所有处理元素属于一个整体,完成一个单一的功能,则称为功能内聚。功能内聚是最高程度的内聚。 例如,一个模块仅完成一个矩阵的输出,就是一个具例如,一个模块仅完成一个矩
33、阵的输出,就是一个具有功能性内聚的模块。有功能性内聚的模块。内聚性:内聚性: 设计软件时,应该能够识别内聚度的高低,设计软件时,应该能够识别内聚度的高低,并通过修改设计尽可能提高模块内聚度,从并通过修改设计尽可能提高模块内聚度,从而获得较高的模块独立性。而获得较高的模块独立性。 力求做到高内聚,尽量少用中内聚,不用低力求做到高内聚,尽量少用中内聚,不用低内聚内聚例题:确定每个模块的内聚类型耦合、内聚与模块独立性的关系耦合、内聚与模块独立性的关系ZhangLingling主要内容主要内容 5.1 5.1 设计过程设计过程 5.2 5.2 设计原理设计原理 5.3 5.3 启发规则启发规则 5.4
34、 5.4 描绘软件结构的图形工具描绘软件结构的图形工具 5.5 5.5 面向数据流的设计方法面向数据流的设计方法 结构设计原则ZhangLingling5.35.3 启发规则启发规则1.改进软件结构提高模块独立性改进软件结构提高模块独立性设计出软件的初步结构以后,应该审查分析这个结构,通过模块分解或合并,力求降低耦合提高内聚。2. 模块规模应该适中模块规模应该适中一个模块的规模不应过大,最好能写在一页纸内(通常不超过60行语句)5.35.3 启发规则启发规则3.深度、宽度、扇出和扇入都应适当深度、宽度、扇出和扇入都应适当深度:软件结构中控制的层数,过大表示分工过细。宽度:软件结构内同一个层次上
35、的模块总数的最大值,过大表示系统复杂度大。扇出:一个模块直接控制(调用)的模块数目, 3 fan-out 9扇入:一个模块被多少个上级模块直接调用的数目 在不破坏独立性的前提下,fan-in 大的比较好。 软件结构表示软件的系统结构,它是软件模块间关系软件结构表示软件的系统结构,它是软件模块间关系的表示,均表示为层次关系的表示,均表示为层次关系。软 件 结 构 示 意 图0层层1层层2层层ABCDEFGHIJKLMN深度宽度扇入为扇入为2扇出为扇出为3扇入为扇入为3宽度深度宽度3层层4层层模块间的关系l 尽量减少高扇出结构的数目,随着深度的增加争取更多的扇入;l 扇出过大意味着模块过分复杂,需
36、要控制和协调过多的下级模块。一般来说,顶层扇出高,中间扇出少,底层高扇入。5.35.3 启发规则启发规则4.模块的作用域应该在控制域之内模块的作用域应该在控制域之内作用域:受该模块内一个判定影响的所有模块的集合。控制域:模块本身以及所有直接或间接从属于它的模块的集合。模块模块A A的控制域:的控制域:ABCDEABCDE模块的集合模块的集合 当当A A中的判定只影响中的判定只影响B B时,满足规则;时,满足规则; 若若A A中的一个判定影响中的一个判定影响F F时,则模块时,则模块A A的作用范围不在它的作用范围不在它的控制范围内。的控制范围内。解决的办法有下面两种:解决的办法有下面两种:5.
37、35.3 启发规则启发规则怎样修改软件结构才能使作用域是控制域的子集呢?方法1是把做判定的点往上移方法2是把那些在作用域内但不在控制域内的模块移到控制域内。 如果在设计过程中,发现模块作用范围不在其控制范围之内,可以用“上移判点”或“下移受判断影响的模块,将它下移到判断所在模块的控制范围内”的方法加以改进。5.35.3 启发规则启发规则5.力争降低模块接口的复杂程度力争降低模块接口的复杂程度模块接口复杂是软件发生错误的一个主要原因。应该仔细设计模块接口,使得信息传递简单并且和模块的功能一致。接口复杂或不一致(即看起来传递的数据之间没有联系),是紧耦合或低内聚的征兆,应该重新分析这个模块的独立性
38、。5.35.3 启发规则启发规则6.设计单入口单出口的模块设计单入口单出口的模块这条启发式规则警告软件工程师不要使模块间出现内容不要使模块间出现内容耦合耦合。当从顶部进入模块并且从底部退出来时,软件是比较容易理解容易理解的,因此也是比较容易维护容易维护的。7.模块功能应该可以预测模块功能应该可以预测相同的输入应该有相同的输出,否则难以理解、测试和维护。模块的功能应该能够预测,但也要防止模块功能过分局限。主要内容主要内容 5.1 5.1 设计过程设计过程 5.2 5.2 设计原理设计原理 5.3 5.3 启发规则启发规则 5.4 5.4 描绘软件结构的图形工具描绘软件结构的图形工具 5.5 5.
39、5 面向数据流的设计方法面向数据流的设计方法 5.45.4 描绘软件结构的图形工具描绘软件结构的图形工具层次图用来描绘软件的层次结构。数据结构的层次方框图相同,但是表现的内容却完全不同。层次图很适于在自顶向下设计软件的过程中使用。5.4.15.4.1 层次层次图和图和HIPO图图正文加工系统正文加工系统输入输入 输出输出 编辑编辑 加标题加标题 存储存储 检索检索 编目录编目录 格式化格式化添加添加 删除删除 插入插入 修改修改 合并合并 列表列表IPO图图 层次图中的每一个模块,均可用一张层次图中的每一个模块,均可用一张IPO图来描述。图来描述。IPO 图由输入、处理和输出三个框组成,需要时
40、还可图由输入、处理和输出三个框组成,需要时还可以增加一个数据文件框。以增加一个数据文件框。IPO图在需求分析阶段主要用图在需求分析阶段主要用来描述系统的主要算法。来描述系统的主要算法。 IPO图例子图例子(班务管理系统班务管理系统)未缴班费处理添加新的缴费学生名单出错信息 记录不符合1 将合格标志送回上一级2 调用模式3 将核对的记录记入文件4 修改学生记录5 添加学生记录1 核对学号和原有学生记录2 核查学生缴费状况3 处理过程1 上组模块送入学生数据2 读取原有学生记录3 读取学生学号4 学生所缴班费 输出部分输出部分 O O 处理部分处理部分 P P输入部分输入部分 I I使用单位 教务
41、处和班主任模块名称 财务信息查询 IPO图图 财务查询财务查询IPO图图1 表示了财务查询系统,它讲述如何查询学生缴费情况,表示了财务查询系统,它讲述如何查询学生缴费情况, 并且验证其并且验证其是否准确是否准确HIPO图图 层次图加上编号称为层次图加上编号称为H图。在层次图的基础上,除最顶层图。在层次图的基础上,除最顶层的方框之外,其余每个方框都加了编号。层次图中每一个的方框之外,其余每个方框都加了编号。层次图中每一个方框都有一个对应方框都有一个对应IPO图图(表示模块的处理过程表示模块的处理过程)。每张。每张IPO图应增加编号与其表示的图应增加编号与其表示的(对应的对应的)层次图编号一致。层
42、次图编号一致。 正文加工系统输入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 一个一个IPOIPO图仅能够描述单个处理功能的输入数据、数图仅能够描述单个处理功能的输入数据、数据处理和输出数据之间的关系,对于整个软件系统的总据处理和输出数据之间的关系,对于整个软件系统的总体结构不能进行清晰的描述。因此在软件设计中,我们体结构不能进行清晰的描述。因此在软件设计中,我们通常将通常将HIPOHIPO图和图和IPOIPO图相结合,利用这两个工具同共来表图相结合,利用这两个工具同共来表达系统的总体结构和模块的
43、处理功能。达系统的总体结构和模块的处理功能。 HIPOHIPO图称为层次结构图,即分层的图称为层次结构图,即分层的IPOIPO图,是系统图,是系统设计的描述工具,是一种描述系统结构和模块内部处理设计的描述工具,是一种描述系统结构和模块内部处理功能的工具。功能的工具。HIPOHIPO图由以下两部分组成:图由以下两部分组成: (1 1)层次结构图:描述整个系统的设计结以及各类模块)层次结构图:描述整个系统的设计结以及各类模块之间的关系。之间的关系。 (2 2)IPOIPO图:描述某个特定模块内部的处理过程和输入图:描述某个特定模块内部的处理过程和输入/ /输出关系。输出关系。检 索2 题名检索1
44、ISBN号检索3 作者检索 HIPO图 IPO图 5.45.4 描绘软件结构的图形工具描绘软件结构的图形工具Yourdon提出的结构图是进行软件结构设计的工具。图中一个方框代表一个模块,框内注明模块的名字或主要功能;方框之间的箭头(或直线)表示模块的调用关系。尾部是空心圆表示传递的是数据,实心圆表示传递的是控制信息。5.4.25.4.2 结构图结构图结构化设计图(SC图的符号)(1)方框代表模块,框内注明模块的名字和主要功能。同一名字的模块只允许出现一次。(2)方框之间的大箭头或直线表示模块的调用关系。 (3)带注释的小箭头表示模块调用时传递的信息及其传递方向。v尾部加空心圆的小箭头表示传递数
45、据信息。v尾部加实心圆的小箭头表示传递控制信息。(4)选择结构,菱形表示有条件的调用(5)循环结构,模块 H 循环调用模块 A,B,C,由左到右顺序调用结构图结构图 例:例:编辑学生记录编辑学生记录读学生记录读学生记录学生数据学生数据无此学生无此学生学号学号模块结构图中的模块类型 (1) (1) 传入模块传入模块 传入模块从下属模块取得数据传入模块从下属模块取得数据, , 经过某些处理经过某些处理, , 再将再将其传送给上级模块。其传送给上级模块。 (2) (2) 传出模块传出模块 传出模块从上级模块中获取数据传出模块从上级模块中获取数据, , 进行某些处理进行某些处理, , 再再将其传送给下
46、属模块。将其传送给下属模块。 (3) (3) 变换模块变换模块 也叫加工模块也叫加工模块, , 它从上级模块取得数据它从上级模块取得数据, , 进行特定的进行特定的处理处理, , 转换成其他形式转换成其他形式, , 再传送回上级模块。再传送回上级模块。 (4) (4) 协调模块协调模块 对所有的下属模块进行协调和管理的模块对所有的下属模块进行协调和管理的模块, , 在一在一个较好的模块结构图中个较好的模块结构图中, , 该模块应在较高层出现。该模块应在较高层出现。模块间调用的规则 (1 1)每个模块有自身的任务,只有接收到上级模)每个模块有自身的任务,只有接收到上级模块的调用命令时才能执行。块
47、的调用命令时才能执行。 (2 2)模块之间的通信只限于其直接上、下级模块)模块之间的通信只限于其直接上、下级模块,任何模块不能直接与其他上下级模块或同级模,任何模块不能直接与其他上下级模块或同级模块发生通信联系。块发生通信联系。 (3 3)若有某模块要与非直接上、下级的其他模块)若有某模块要与非直接上、下级的其他模块发生通信联系,必须通过其上下级模块进行传递发生通信联系,必须通过其上下级模块进行传递 (4 4)模块调用顺序为自上而下。)模块调用顺序为自上而下。 提示提示 层次图和结构图并不严格表示模块的调用次序,也不指明什么时候调用下层模块,他们仅仅表示一个模块调用那些模块,至于模块内有无其他
48、成分则完全没有表示。 通常用层次图作为描述软件结构的文档。 结构图作为文档并不合适,因为图中包含信息过多,有时反而降低了清晰程度。但是,结构图可以作为检查设计正确性和评价模块独立性的好方法。主要内容主要内容 5.1 5.1 设计过程设计过程 5.2 5.2 设计原理设计原理 5.3 5.3 启发规则启发规则 5.4 5.4 描绘软件结构的图形工具描绘软件结构的图形工具 5.5 5.5 面向数据流的设计方法面向数据流的设计方法 SD(Structured Design)法与法与SA、SP法前后衔接,法前后衔接,是结构化开发方法的核心。是结构化开发方法的核心。 它是以需求分析阶段产生的数据流图为基
49、础,根它是以需求分析阶段产生的数据流图为基础,根据问题域的数据流定义一组不同的映射,把数据流图据问题域的数据流定义一组不同的映射,把数据流图变换成软件结构。变换成软件结构。5.55.5 面向面向数据流的设计方法数据流的设计方法2.作用作用 提供了方便的从数据流图到软件结构的变换。提供了方便的从数据流图到软件结构的变换。3.目的目的 提出满足系统需求的最佳软件结构。提出满足系统需求的最佳软件结构。变换流事务流1. SD SD 法的法的总体设计总体设计阶段阶段 任务:任务: 解决系统的模块结构,即分解模块,解决系统的模块结构,即分解模块,确定确定模块功能模块功能及系统模块的层次结构。及系统模块的层
50、次结构。 文档:文档:模块结构图及其模块功能说明。模块结构图及其模块功能说明。 面向数据流的设计方法面向数据流的设计方法 面向数据流的设计方法以数据流图为基础,它定义了把数据流图变换成软件结构的不同映射方法。 因为任何系统都可以用数据流图表示,所以面向数据流的设计方法理论上可以设计出任何软件的系统结构。 数据流类型决定了映射方法。数据流有变换流和事务流两种基本类型。5.55.5 面向面向数据流的设计方法数据流的设计方法面向数据流的设计方法把信息流映射成软件结构面向数据流的设计方法把信息流映射成软件结构,信息流信息流的类型决定了映射的方法的类型决定了映射的方法。信息流有下述两种类型。1)变换流)
51、变换流信息沿输入通路进入系统,由外部形式变换成内部形式,进入系统的信息通过变换中心,经加工处理以后再沿输出通路变换成外部形式离开软件系统。当数据流图具有这些特征时,这种信息流就叫作变换流。5.5.15.5.1 概念概念5.55.5 面向面向数据流的设计方法数据流的设计方法2)事务流)事务流数据沿输入通路到达一个处理T,这个处理根据输入数据的类型在若干个动作序列中选出一个来执行。这类数据流应该划为一类特殊的数据流,称为事务流。 处理T称为事务中心完成下述任务:(1)接收输入数据(输入数据又称为事务)。(2) 分析每个事务以确定它的类型。(3) 根据事务类型选取一条活动通路。变换型数据流图变换型数
52、据流图VS事务性数据流图事务性数据流图变换变换中心中心输入输入输出输出变换型结构变换型结构事务事务中心中心接受接受路径路径动动作作路路径径基本结构 特征特征事务型事务型结构结构由输入、变换中心和输出由输入、变换中心和输出三部分组成三部分组成具有在多种事务中选择具有在多种事务中选择执行某类事物的能力执行某类事物的能力变换型数据流图变换型数据流图事务型数据流图事务型数据流图5.55.5 面向面向数据流的设计方法数据流的设计方法3)设计过程)设计过程SDSD方法方法实施的要点是:方法方法实施的要点是:(1)首先研究、分析和审查数据流图,从软件的需求规格说明中弄清数据流加工的过程。(2)然后根据数据流
53、图决定问题的类型,即确定是变换型还是事务型。针对两种不同的类型分别进行分析处理。(3)由数据流图推导出系统的初始结构图。(4)利用一些试探性原则来改进系统的初始结构图,直到得到符合要求的结构图为止。(5)修改和补充数据词典。 (6)制定测试计划。 简单地说,简单地说,SD方法的步骤有两步方法的步骤有两步: 第一步是建立符合需求规格说明书要求的第一步是建立符合需求规格说明书要求的初始结构图(一般由数据流图导出初始结构初始结构图(一般由数据流图导出初始结构图);图); 第二步再用块间联系和块内联系等概念对第二步再用块间联系和块内联系等概念对初始结构图做进一步改进。初始结构图做进一步改进。 SD方法
54、的步骤方法的步骤 变换分析步骤: (1)在)在DFD上区分输入、变换中心和输出上区分输入、变换中心和输出3个部分,标出个部分,标出它们之间的边界;它们之间的边界; (2)画出初始的)画出初始的SC图框架,顶层是主控模块,下层(第图框架,顶层是主控模块,下层(第一层)一般包括输入、输出、变换三个模块。沿数据调用一层)一般包括输入、输出、变换三个模块。沿数据调用线标注数据流的名称。线标注数据流的名称。 (3) 对输入、变换处理、输出这三个分支进行自顶向下对输入、变换处理、输出这三个分支进行自顶向下的分解,画出各个分支所需要的全部模块。的分解,画出各个分支所需要的全部模块。 (4) 将初始的将初始的
55、SC图的框架和各个分支所需要的全部模块图的框架和各个分支所需要的全部模块结合起来,就构成了底层的软件结构图。结合起来,就构成了底层的软件结构图。总控模块总控模块输入模块输入模块加工模块加工模块输出模块输出模块映射变换型数据流图变换中心传入部分传出部分总控模块加工模块输入模块输出模块变换型结构图输入加工输出映射 这类数据流图可看成是对输入数据进行转换而得到输出这类数据流图可看成是对输入数据进行转换而得到输出数据的处理。数据的处理。 DFDDFD图具有较明确的输入流、变换中心和输出流可以明显图具有较明确的输入流、变换中心和输出流可以明显分为分为 “ “输入输入处理处理输出输出 ” ”三部分三部分(
56、物理输入)(物理输入)(逻辑输入)(逻辑输入)(逻辑输出)(逻辑输出)输输 入入处理处理输输 出出(物理输出)(物理输出)中心变换型 的 DFD 图(物理输入)(物理输入)(逻辑输入)(逻辑输入)(物理输出)(物理输出)检查检查顺序顺序检查检查合理性合理性扩充扩充代码代码核对核对 记录记录修改修改压缩压缩代码代码格式化格式化修改修改数据数据 旧文件旧文件新文件新文件变换流数据流图的“第一级分解” 对于变换流,数据流图将被映射成一个特殊的软件结构,这个结构控制输入、变换和输出信息等处理过程:位于软件结构最顶层的控制模块Cm协调下述从属的控制功能:(1)输入信息处理控制模块Ca,协调对所有输入数据
57、的接收;(2)变换中心控制模块Ct,管理对内部形式的数据的所有操作;(3)输出信息控制模块Ce,协调输出信息的产生过程。变换流数据流图的“第二级分解” 把数据流图中的每一个处理映射成软件结构中一个适当的模块: 从变换中心的边界开始沿着输入通路向外移动,把输入通路中每个处理映射成软件结构中Ca控制下的一个低层模块; 然后沿着输出通路向外移动,把输出通路中每个处理映射成直接或间接Ce控制的一个低层模块; 最后把变换中心内的每个处理映射成受Ct控制的一个模块。变换分析步骤变换分析步骤 第一级分解第一级分解(建立初始结构图框架建立初始结构图框架)设计顶层和第一层模块设计顶层和第一层模块总控模块总控模块
58、第一层分解后的结构图第一层分解后的结构图-1c,ec,eu,wu,w典型的变换型软件结构典型的变换型软件结构主控模块主控模块取得取得C取得取得BB转换成转换成CBBCC取得取得AA转换成转换成BAAB变换模块变换模块CD给出给出DDD转换成转换成E给出给出EDEE变换分析步骤变换分析步骤 第二级分解:第二级分解:自顶向下分解,设计出每个分支的中、下层模自顶向下分解,设计出每个分支的中、下层模块块 方法方法 从变换中心的边界开始沿输入通路向外移动,把输从变换中心的边界开始沿输入通路向外移动,把输入通路中每个处理逻辑映射成软件结构中入通路中每个处理逻辑映射成软件结构中CaCa控制的控制的一个下层模
59、块;一个下层模块; 然后沿输出通路向外移动,把输出通路中每个处理然后沿输出通路向外移动,把输出通路中每个处理逻辑映射成直接或间接受模块逻辑映射成直接或间接受模块CeCe控制的一个底层模控制的一个底层模块;块; 最后把变换中心内的每个处理映射成受最后把变换中心内的每个处理映射成受CtCt控制的一控制的一个模块。个模块。传传入入分分支支的的分分解解CaGet CGet BRead AbacGet ERead Ddec,eD to EB to CA to Bbcdeab传传出出分分支支的的分分解解CePut UWrite Vuuw,uU to VvvWrite Ww中心加工分支的分解中心加工分支的分
60、解CtPQRec,pru,wpr事务分析事务分析事务分析的设计步骤和变换分析的设计步骤大事务分析的设计步骤和变换分析的设计步骤大部分相同或类似,主要差别仅在由数据流图到部分相同或类似,主要差别仅在由数据流图到软件结构图的映射方法不同。由事务流映射成软件结构图的映射方法不同。由事务流映射成软件结构包括一个接受分支和一个发送分支。软件结构包括一个接受分支和一个发送分支。映射出接受分支结构的方法和变换分析映射出映射出接受分支结构的方法和变换分析映射出输入结构的方法相似,即从事务中心的边界开输入结构的方法相似,即从事务中心的边界开始,把沿着接受流通路的处理逻辑模块映射成始,把沿着接受流通路的处理逻辑模
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 大体积混凝土工程施工方案
- Unit 3 课时1 Section A 1a-1d(大单元课时课件)英语新教材人教版八年级下册
- 中国石油外包合同
- 临时展板墙外包合同
- 交通外包合同
- 仓储操作外包合同
- 企业消防外包合同
- 供电杆塔外包合同
- 公路维护外包合同
- 冰雪清除外包合同
- 施工作业A票操作手册
- 五年(2020-2024)高考生物真题分类汇编(全国版)专题14 神经调节(解析版)
- 第六章-专家系统与IDSS
- 2021年西藏地区中考满分作文《平凡生活别具温情》
- (正式版)SH∕T 3548-2024 石油化工涂料防腐蚀工程施工及验收规范
- 傅里叶变换红外光谱仪FTIR简介课件
- 慢性疼痛的药物治疗:慢性疼痛的药物治疗方案
- 跖骨骨折护理查房
- 施工员学习课件第7章建筑构造与建筑结构
- 住院精神疾病患者攻击行为预防-2023中华护理学会团体标准
- 13诗第十二-整本书阅读系列《经典常谈》名著阅读与练习
评论
0/150
提交评论