第4章总体设计_第1页
第4章总体设计_第2页
第4章总体设计_第3页
第4章总体设计_第4页
第4章总体设计_第5页
已阅读5页,还剩106页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 1 2 Contents Page目录页第4章 总体设计4.4 总体设计描述工具4.1 4.1 总体设计步骤及主要过程4.2 总体设计中的一些概念4.3 总体设计的原则4.5 面向数据流的设计方法 3 4.1 总体设计步骤及主要过程 总体设计的基本目的是回答“软件系统总体上应如何实现”这一问题。因此,总体 设计有时又称初步设计或概要设计,其关键是确定软件的总体结构,即确定软件系统的组成成分及其相互关系。 详细设计是对总体设计结果的进一步细化,其主要任务是确定软件系统各组成成分内部的数据结构和算法的过程。总体设计详细设计软件设计 4 4.1 总体设计步骤及主要过程需求分析需求分析介绍系统必须“

2、做什么”的问题,并在需求规格说明中进行充分的描述。总体设计总体设计与详细设计阶段决定“怎样做”的问题。需求分析转换到需求分析转换到总体设计时的对总体设计时的对应分解应分解 5 4.1 总体设计步骤及主要过程总体设计的主要任务4.1.1总体设计的主要任务有两个:一是系统设计阶段,确定系统的具体实现方案,划分出组成系统的物理元素,如程序、文件、数据库、文档等;二是结构设计阶段,确定系统的软件结构,即组成系统的各个模块及模块间的关系。, 6 4.1 总体设计步骤及主要过程总体设计的过程4.1.2在此阶段分析员应该考虑各种可能的实现方案,并且力求从中选出最佳方案。推荐最佳方案选取合理的方案设想供选择的

3、方案123功能分解4从前一步中选择若干个方案,通常至少选取低、中、高3种层次的成本方案,并对其进行全面分析。对每一个合理的方案分析员应该准备以下4份资料:系统流程图、组成系统的系统流程图、组成系统的物理元素清单、成本物理元素清单、成本/效益效益分析、实现这个系统的进分析、实现这个系统的进度计划。度计划。综合分析合理方案后,推荐一种最佳方案,并且为推荐的方案制订详细的实现计划、审批、进入软件结构设计。把复杂的功能进一步分解成简单的功能,遵循模块划分独立性原则(模块功能单一、模块和外部联系降低)。功能分解是对数据流图的进一步细化。 7 4.1 总体设计步骤及主要过程功能分解后,可以用层次图(HC)

4、、结构图来描绘模块组成的层次系统,即反映软件结构。当数据流图细化到适当的层次时,由结构化的设计方法可以直接映射出结构图。制订测试计划数据库设计与文档结构设计设计软件结构567书写文档8审查和复审9确定系统的数据结构、文件结构。根据系统需要,可以进一步完成数据库的模式设计,确定数据库物理数据的结构约束、进行数据库子模式设计、对用户使用的数据视图,子进行完整性和安全性设计等。为保证软件的可测试性,一开始就要考虑测试的问题。仅从I/O功能出发做黑盒测试计划,这样详细设计时才能制定详细的测试用例与计划。这个阶段一般要完成以下文档最后应该对总体设计的结果进行严格的技术审查,在技术审查通过之后再由客户从管

5、理的角度进行复审。下一页 8 4.1 总体设计步骤及主要过程(1) 系统说明,主要内容包括用系统流程图描绘的系统构成方案,组成系统的物理元系统说明,主要内容包括用系统流程图描绘的系统构成方案,组成系统的物理元素清单,成本素清单,成本/效益分析;对最佳方案的概括描述,精化的数据流图,用层次图或效益分析;对最佳方案的概括描述,精化的数据流图,用层次图或结构图描绘的软件结构,用结构图描绘的软件结构,用IPO图模块图模块间的接口关系,以及需求、功能和模块三者间的接口关系,以及需求、功能和模块三者之间的交叉参照关系等等。之间的交叉参照关系等等。(2) 用户手册,根据总体设计阶段的结果,修改更正在需求分析

6、阶段产生的初步的用用户手册,根据总体设计阶段的结果,修改更正在需求分析阶段产生的初步的用户手册。户手册。(3) 测试计划,包括测试策略,测试方案,预期的测试结果,测试进度计划等等。测试计划,包括测试策略,测试方案,预期的测试结果,测试进度计划等等。 (4) 详细的实现计划。详细的实现计划。 (5) 数据库设计结果。数据库设计结果。返回 9 Contents Page目录页第4章 总体设计4.4 总体设计描述工具4.1 总体设计步骤及主要过程4.2 4.2 总体设计中的一些概念4.3 总体设计的原则4.5 面向数据流的设计方法 10 4.2 总体设计中的一些概念模块化4.2.1模块概念 是指具有

7、相对独立性的,由数据说明、执行语句等程序对象构成的集合。程序中的每个模块都需要单独命名,通过名字可实现对指定模块的访问属性 (1)接口接口:指模块的输入与输出。 (2)功能功能:指模块实现什么功能。 (3)逻辑逻辑:描述内部如何实现要求的功能及所需的数据,即描述模块内部怎样做。 (4)状态状态:指该模块的运行环境,即模块的调用与被调用关系。 11 4.2 总体设计中的一些概念 因此,一个模块具有四个特征:输入/输出(接口)、功能、内部数据和程序代码。 模块的输入/输出和功能构成了模块的外部特征。 模块的内部数据和程序代码反映的是模块的内部特征。 12 4.2 总体设计中的一些概念模块化 模块化

8、就是把程序划分成若干个模块,每个模块具有一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能,实现问题的求解。 13 4.2 总体设计中的一些概念可对问题复杂性、开发工作量和模块数之间的关系进行以下推理 首先, 设C(x)为问题x所对应的复杂度函数,E(x)为解决问题x所需要的工作量函数。对于两个问题P1和P2,如果: C(P1) C(P2) 即问题P1的复杂度比P2高,则显然有: E(P1) E(P2) 即解决问题P1比P2所需的工作量大。模块化的理论依据如下: 14 4.2 总体设计中的一些概念 发现其中存在有另一个有趣的规律:C(P1+P2) C(P1)+C(P2) 即解决由多

9、个问题复合而成的大问题的复杂度大于单独解决各个问题的复杂度之和。 由此推出:E(P1+P2) E(P1)+E(P2) 即将复杂问题分解成若干个小问题,所需要的工作量小于直接解决复杂问题所需的工作量。 这个不等式导致这个不等式导致“各个击破各个击破”的结论的结论把复杂的问题分解成许多容易解决的小问题,原来的问把复杂的问题分解成许多容易解决的小问题,原来的问题也就容易解决了。这就是模块化的根据。题也就容易解决了。这就是模块化的根据。 15 4.2 总体设计中的一些概念理想模式:如果把软件无限细分,那么最后开发软件所需要的工作量就小得可以忽略了。现实情况:事实并非如此!因为影响软影响软件开发工作量的

10、因素还有许多件开发工作量的因素还有许多。 16 4.2 总体设计中的一些概念随着模块数目的增加,虽然开发单随着模块数目的增加,虽然开发单个模块需要的成本确实减少了,但个模块需要的成本确实减少了,但是模块之间接口的复杂程度和接口是模块之间接口的复杂程度和接口所需的工作量也成倍增加,如右图所需的工作量也成倍增加,如右图所示。所示。图中虚线所示为总成本曲线。从图图中虚线所示为总成本曲线。从图中可以看出存在着一个开发成本最中可以看出存在着一个开发成本最小的模块数目小的模块数目M区。虽然到目前为区。虽然到目前为止还不能决定止还不能决定M的准确数值,但在的准确数值,但在考虑模块时软件总成本曲线确实给考虑模

11、块时软件总成本曲线确实给我们提供了非常有用的指导。我们提供了非常有用的指导。 17 4.2 总体设计中的一些概念 优点: 1、模块化 可以降低软件开发的难度,而且可以使程序结构清晰,增加易读性和易修改性。 2、模块化有利于提高代码的可重用性及团队合作开发大型软件的可行性。 18 4.2 总体设计中的一些概念模块独立性4.2.2内聚耦合模块独立程度定性标准耦合是衡量不同模块彼此间互相依赖(连接)的紧密程度。内聚是衡量一个模块内部各个元素彼此结合的紧密程度。 模块独立性是软件系统中每个模块只涉及软件要求的具体子功能,而和软件系统中模块独立性是软件系统中每个模块只涉及软件要求的具体子功能,而和软件系

12、统中其他的模块接口是简单的。也就是说其他的模块接口是简单的。也就是说功能功能独立而且独立而且和其他模块之间没有过多的相互作用和其他模块之间没有过多的相互作用的模块,就可以做到模块独立的模块,就可以做到模块独立。一个模块内部各个元素之间的联系越紧密,它的内聚性就越高,对应地它与其他模块之间的耦合性就会减低,模块独立性就越强。相反,模块内聚性越低,模块间耦合性就越强,模块的独立性也就越弱。在软件设计中应追求高内聚低耦合的模块,尽量提高模块的独立性。 19 4.2 总体设计中的一些概念1.耦合耦合 耦合是程序结构中各个耦合是程序结构中各个模块之间相互关联的度量。模块之间相互关联的度量。耦合强弱取决于

13、模块间接口耦合强弱取决于模块间接口的复杂程度、调用模块的方的复杂程度、调用模块的方式及通过接口的信息。式及通过接口的信息。 从耦合的机制上将耦合从耦合的机制上将耦合分为非直接耦合、数据耦合、分为非直接耦合、数据耦合、标记耦合、控制耦合、外部标记耦合、控制耦合、外部耦合、公共耦合、内容耦合耦合、公共耦合、内容耦合7种类型。种类型。 20 4.2 总体设计中的一些概念 标记耦合 数据耦合 非直接耦合如果两个模块之间没有直接关系,彼此之间完全独立,它们之间的联系完全是通过主模块的控制和调用来实现的,称之为非直接耦合。非直接耦合程度最低,因此模块的独立性最强。耦合耦合如果两个模块彼此间通过参数交换信息

14、,而且交换的信息仅仅是数据(不是控制参数、公共数据结构或外部变量),那么这种耦合称为数据耦合。通常软件中都包含有数据耦合。数据耦合是松散的耦合,模块的独立性比较强。如果一组模块通过参数表传递具有某一数据结构的记录信息,即标记耦合。这个记录是某一数据结构的子结构,而不是简单变量。传递的是这个数据结构的地址,这就意味着另一模块要共享这个记录,必须清楚该记录的数据结构,并按要求对此记录进行操作。这就使得在数据结构上的操作复杂化,在设计中应尽量避免或采用相应的其他方法消除这种耦合。下一页 21 4.2 总体设计中的一些概念数据耦合的例子如下所示:sum(int a,int b)int c; c=a+b

15、; return(c); main()int x,y; printf(x+y= %d,sum(x,y);/*主函数与sum函数之间即为数据耦合关系*/返回 22 4.2 总体设计中的一些概念 公共耦合 外部耦合 控制耦合如果两个模块之间传递的信息有控制信息(尽管有时控制信息是以数据的形式出现的) ,则这种耦合称为控制耦合。控制耦合是中等程度的耦合,它增加了系统的复杂程度。耦合耦合如果几个模块都访问同一全局简单变量而不是同一全局数据结构,且不是通过参数表传递该变量的信息,则称之为外部耦合。外部耦合程度较高,模块的独立性较弱耦合程度较高,模块的独立性较弱。外部耦合可能引起数据的修改等。在程序设计时

16、尽量少用外部耦合。当两个或多个模块通过一个公共数据区相互作用时,它们之间的耦合称为公共耦合。公共数据区可以是全程数据区、共享通信区、内存公共覆盖区、任何介质上的文件、物理设备等。下一页 23 4.2 总体设计中的一些概念公共耦合会引起下列问题:1、所有公共耦合模块都与某一个公共数据环境内部各项的物理安排有关,若修改某个数据的大小,将会影响到所有的模块。2、无法控制各个模块对公共数据的存取,严重影响软件模块的可靠性和适应性。3、公共数据名的使用,明显降低了程序的可读性。 24 4.2 总体设计中的一些概念公共耦合的复杂程度随耦合模块的个数增加而显着增加。若只是两个模块之间有公共数据环境,则公共耦

17、合有两种情况。1、若一个模块只是往公共数据环境里传送数据,而另一个模块只是从公共数据环境中取数据,则这种公共耦合叫做松散公共耦合。2、若两个模块都从公共数据环境中取数据,又都向公共数据环境里送数据,则这种公共耦合叫做紧密公共耦合。只有在模块之间共享的数据很多,且通过参数表传递不方便时,才使用公共耦合。否则,还是使用模块独立性比较高的数据耦合好些。返回 25 4.2 总体设计中的一些概念void output(flag)if (flag) printf(OK! ); else printf(NO! );main() int flag;output(flag); /*主函数与output函数之间即

18、为控制耦合关系*/控制耦合的例子如下所示:返回 26 4.2 总体设计中的一些概念 内容耦合最高程度的耦合是内容耦合内容耦合,它使得模块的独立性最弱,应该坚决避免使用内容耦合。耦合耦合出现下列情况之一就是内容耦合:1、一个模块对另一模块中的内容(包括数据和程序段)进行了直接的引用甚至修改;2、两个模块有一部分程序代码重叠(只可能出现在汇编语言中);3、一个模块有多个入口。 27 4.2 总体设计中的一些概念非直接耦合 数据耦合标记耦合控制耦合外部耦合公共耦合内容耦合低高强弱耦合性模块独立性 上图为7种耦合类型的关系图。需要注意的是,实际中模块之间的耦合并不是7种耦合类型中的某一种,而是多种类型

19、的混合。 28 4.2 总体设计中的一些概念“” 在设计中处理耦合的总体原则是:尽量使用数据耦合,少用标记耦合和控制耦合,限制外部耦合和公共耦合的范围,完全不用内容耦合。 29 4.2 总体设计中的一些概念2.内聚内聚 内聚是程序结构中模块内聚是程序结构中模块内各个元素彼此结合紧密程内各个元素彼此结合紧密程度的度量。理想内聚的模块度的度量。理想内聚的模块只做一件事情。只做一件事情。保证模块的高内聚性比低耦合性更保证模块的高内聚性比低耦合性更为重要,在为重要,在软件设计时应将更多的软件设计时应将更多的注意力集中在提高模块的内聚性上注意力集中在提高模块的内聚性上。 根据模块内部构成情况根据模块内部

20、构成情况,可以分成,可以分成高、中、低内聚高、中、低内聚3类。其中高内聚有类。其中高内聚有功能内聚功能内聚和和顺序内聚顺序内聚;中内聚有;中内聚有通通信内聚信内聚、过程内聚过程内聚;低内聚有;低内聚有时间时间内聚内聚、逻辑内聚逻辑内聚和和偶然内聚偶然内聚。 30 4.2 总体设计中的一些概念 通信内聚 顺序内聚 功能内聚如果一个模块内所有处理元素仅为完成一个具体的功能而协同工作,紧密联系,不可分割,则称为功能内聚。功能内聚是最功能内聚是最高程度的内聚高程度的内聚。在设计时应尽可能使模块到达功能内聚这一级别。内聚内聚如果一个模块内的处理元素和同一个功能密切相关,而且这些处理必须按顺序执行(通常一

21、个处理元素的输出数据作为下一个处理元素的输入数据),则称为顺序内聚。根据数据流图划分出的模块通常都是顺序内聚的模块。由于顺序内聚模块中的各个部分在功能和执行顺序上都密切相关,因此内聚程度很高且易于理解。如果模块中各功能部分都使用同一个输入数据和(或)产生同一个输出数据,则称为通信内聚。通信内聚模块中的各个部分都与某个共同的数据密切相关,因此内聚性高。 31 4.2 总体设计中的一些概念 过程内聚 如果一个模块内的处理元素是相关的,而且必须以特定次序执行,则称为过程内聚, 区别主要在于:顺序内聚中是数据流从一个处理元流到另一个处理元,而过程内聚中是控制流从一个动作流向另一个动作。因为过程内聚模块

22、仅完成完整功能的一部分,所以它的内聚程度仍然比较低,模块间的耦合程度还是比较高。 在结构化程序中,通常采用程序流程图作为设计软件和确定模块划分的工具, 这样得到的模块往往具有过程内聚的特性。内聚内聚 32 4.2 总体设计中的一些概念 时间内聚内聚内聚 如果一个模块包含的任务必须在同一段时间内执行,就称为时间内聚,又称瞬时内聚或经典内聚。这种模块大多为多功能模块,功能之间没有太大的实质联系,仅要求它们在同一时间内完成。例如,许多程序中的初始化模块和终止模块,就是时间内聚模块。 由于时间内聚模块中的各个部分在时间上的联系,其内聚程度比逻辑内聚高一些。但这样的模块往往会和其他相关模块有着紧密的联系

23、,因而会造成耦合性的增加。 33 4.2 总体设计中的一些概念 逻辑内聚如果一个模块完成的任务在逻辑上属于相同或相似的一类,则称为逻辑内聚逻辑内聚。这种模块通常是几种相关的功能组合在一起,对这种模块的调用常常需要有一个功能开关,由上层调用模块向它发出一个控制信号,在多个关联性功能中选择执行某一个功能。缺点:1、虽然逻辑聚合模块的组成部分之间有一定的关系,但不同功能混在一起并公用模块中的部分代码,给修改带来了一定的麻烦。 2、为了在调用模块时能选择执行其中的某个功能,需要传递相应的控制参数,因而会造成模块间的控制耦合,降低模块的独立性。内聚内聚 34 4.2 总体设计中的一些概念偶然内聚内聚内聚

24、偶然内聚又称巧合内聚偶然内聚又称巧合内聚,这种模块由完成若干毫无关系(或关系不大)的功能处理元素偶然组合在一起。各语句段之间的联系十分松散或根本没有任何联系。例如,有时在写完一个程序之后,发现一组语句在两处或多处出现,于是把这些语句作为一个模块以节省内存,这样就出现了偶然内聚的模块。偶然内聚的模块出错的机率要比其他类型的模块大得多。偶然内聚是内聚程度最低的一种,在软件设计时应尽量避免。 35 4.2 总体设计中的一些概念功能单一功能分散功能内聚顺序内聚通信内聚过程内聚时间内聚逻辑内聚偶然内聚低高强弱内聚性模块独立性 上图为这7种内聚类型关系图。从图中可以看出,功能内聚的模块独立性最强,偶然内聚

25、模块独立性最弱。在设计时尽量做到高内聚,并辨别出低内聚的模块,然后对其修改,提高模块的内聚程度,从而得到高内聚独立性强的模块。 36 4.2 总体设计中的一些概念面向对象设计面向对象设计中的内聚中的内聚如果类中的一个服务只完成一个且仅完成一个功能,则是服务内聚。服务内聚如果类的属性和服务全都是完成该类对象的任务所必需的,其中不包含无用的属性或服务,则称为类内聚。类内聚泛化内聚则是按照多数人的概念及对相应的领域知识的正确抽取得出的泛化关系结构,一般说来,紧密的继承耦合与高度的泛化内聚是一致的。泛化内聚 类内聚和泛化内聚程度较高,在设计中应尽量使用这些内聚,提高模块的独立性。 37 4.2 总体设

26、计中的一些概念“” 耦合和内聚是进行模块化设计的有力工具,内聚和耦合并不是孤立的,而是密切相关的。模块内的高内聚往往意味着模块间的松耦合,模块间的强耦合往往意味着模块内的低内聚。但增加内聚比减少耦合更重要,因此在实践中人们常常把更多注意力集中到提高模块的内聚程度上,设计时考虑内聚更多一点。 38 4.2 总体设计中的一些概念抽象4.2.3指将现实世界中具有共性的一类事物的相似的、本质的方面集中概括起来,而暂时忽略它们之间的细节差异。抽象就是指出事物的本质特性而暂时不考虑它们的细节。在软件开发中运用抽象的概念,可以将复杂问题的求解过程分层,在不同的抽象层上实现难度的分解。 39 4.2 总体设计

27、中的一些概念需求分析阶段软件设计阶段编码阶段使用“问题环境中熟悉的”语言来描述待开发的软件系统往往同时使用面向问题环境的术语和面向实现的术语来描述软件系统使用直接实现的方式来描述软件系统 抽象的概述广泛应用于软件工程领域,实际上整个软件开发过程就是一个从抽象到具体的过程。软件开发过程中从问题定义到最终的软件生成,每一阶段都是在前一阶段基础上对软件解法的抽象层上的一次求精和细化。 40 4.2 总体设计中的一些概念实例分析一个供低级计算机辅助设计用的CAD软件,可实现二维绘图。 该该CAD软件系统提供所见即所得的绘图用软件系统提供所见即所得的绘图用户界面向用户显示图形,以及一个数字化仪器户界面向

28、用户显示图形,以及一个数字化仪器界面,用以代替绘图板和丁字尺;能够实现各界面,用以代替绘图板和丁字尺;能够实现各种类型的直线、矩形、圆及曲线的绘制,几何种类型的直线、矩形、圆及曲线的绘制,几何计算、视图或剖面图处理等工作;设计结果存计算、视图或剖面图处理等工作;设计结果存放在图形文件中。放在图形文件中。 从上述软件系统的描述可以看出,在该抽象级别所用术语是问题所处环境的术语。抽象级别 41 4.2 总体设计中的一些概念CAD软件任务:软件任务:“用户交互用户交互”任务:任务:“二维图形创建二维图形创建”任务:任务:“图形显示任务图形显示任务”:“图形文件管理图形文件管理”任务:任务:结束。结束

29、。 这一抽象级别给出了CAD软件的主要子任务,所用术语不再是问题所处环境的术语。但它并未给出“怎样做”的信息,仍不是实现用的术语。抽象级别 42 4.2 总体设计中的一些概念PROCEDURE 二维图创建REPEAT 下列操作下列操作 UNTIL 图形图形创建完毕创建完毕DO WHILE 出现与数字化仪交互出现与数字化仪交互时时数字化仪接口处理任务;数字化仪接口处理任务;CASE 绘图请求绘图请求 OF直线:画直线任务;直线:画直线任务;矩形:画矩形任务;矩形:画矩形任务;圆:画圆形任务;圆:画圆形任务;曲线:画曲线任务;曲线:画曲线任务;ENDCASEEND DO抽象级别PROCEDURE

30、二维图创建DO WHILE 出现与键盘交互时出现与键盘交互时键盘交互任务;键盘交互任务;CASE 分析分析/计算计算 OF视图:辅助视图处理任务;视图:辅助视图处理任务;剖面图:剖面图处理任务;剖面图:剖面图处理任务;计算:几何计算处理任务;计算:几何计算处理任务;END CASEEND DOEND REPEATEND PROCEDURE 仅以二维图形的创建为例。 43 4.2 总体设计中的一些概念逐步求精4.2.4概念1 1主要思想2 2要求3 3逐步求精逐步求精是人类解决复杂问题时采用的基本方法,也是许多软件工程技术的基础。可以把逐步求精定义为:“为了能集中精力解决主要问题而尽量推迟对问题

31、细节的考虑为了能集中精力解决主要问题而尽量推迟对问题细节的考虑。将某个宏观功能不断分解,逐步确定过程细节,直至用程序设计语言描述的算法实现为止。求精要求设计者细化原始陈述,随着每个后续求精(细化)步骤的完成而提供越来越多的细节。 44 4.2 总体设计中的一些概念逐步求精逐步求精之所以如此重要,是因为人类的认知过程遵守之所以如此重要,是因为人类的认知过程遵守Miller法法则则:一个人在任何时候都只能把注意力集中在(:一个人在任何时候都只能把注意力集中在(72)个知识块上。)个知识块上。 逐步求精方法的逐步求精方法的强大作用强大作用就在于,它能帮助软件工程师把精力就在于,它能帮助软件工程师把精

32、力集中在与当前开发阶段最相关的那些方面上,而忽略那些对整体解集中在与当前开发阶段最相关的那些方面上,而忽略那些对整体解决方案来说虽然是必要的,然而目前还不需要考虑的细节,这些细决方案来说虽然是必要的,然而目前还不需要考虑的细节,这些细节将留到以后再考虑。节将留到以后再考虑。 45 4.2 总体设计中的一些概念信息隐藏4.2.5信息隐蔽:一个模块将自身的内部信息向其他模块隐藏起来,以避免其他模块不恰当的访问和修改,只有那些为了完成软件的总体功能而必须在模块间交换的信息,才允许在模块间进行传递。目的:为了提高模块的独立性,减少将一个模块中的错误目的:为了提高模块的独立性,减少将一个模块中的错误扩散

33、到其他模块的机会。扩散到其他模块的机会。信息隐藏是模块化的重要指导原则,信息隐藏是模块化的重要指导原则,采用该原则来指导模块划分,不仅支持模块的并行开发、提高软件的可读性,而且可以减少测试和后期维护的工作量。 46 Contents Page目录页第4章 总体设计4.4 总体设计描述工具4.1 总体设计步骤及主要过程4.2 总体设计中的一些概念4.3 4.3 总体设计的原则4.5 面向数据流的设计方法 47 4.3 总体设计的原则体系结构设计的原则有如下6点。 (1) 降低模块的耦合性,提高模块的内聚性。 (2) 保持适中的模块规模。 48 4.3 总体设计的原则 (3) 模块应具有高扇入和适

34、当的扇出。 扇出:表示一个模块直接调用(或控制其他模块数目) 即可以调用的下级模块数 扇入:表示调用(或控制)一个给定模块的模块个数。 即某个模块的上级模块数 其实也就是,一个模块的扇入就是共有多少个模块需要调用该模块,而其扇出是该模块可以控制的下级模块的数目。 49 4.3 总体设计的原则图 模块的扇入和扇出(a) 扇入;(b) 扇出M1M2MnM(a)(b)M1M2MkM 50 4.3 总体设计的原则 多扇出表示需要控制和协调许多下属模块 多扇入的模块通常是公用模块 模块的扇入越大,则说明共享该模块的上级模块数越多,模块的扇入越大,则说明共享该模块的上级模块数越多,或者说该模块在程序中的重

35、用性越高。 模块的扇出若过大模块的扇出若过大,在一个模块中要调用八个下级模块,则会使该会使该模块的调用控制过于复杂模块的调用控制过于复杂。 在设计良好的软件结构中,通常顶层的扇出数较大,中间层的扇出数较小,底层的扇入数较大, 模块的平均扇出通常为3或4 如图所示。 51 4.3 总体设计的原则图 软件结构图示例 52 (4) 软件结构中的深度和宽度不宜过大。 所谓深度,是指软件体系结构中控制的层数,它能够粗略地反映出软件系统的规模和复杂程度; 所谓宽度,是指软件体系结构内同一层次上模块个数的最大值,通常宽度越大的系统越复杂。 如上图所示的软件结构图中,深度为5,宽度为8。 53 (5) 模块的

36、作用域应处于其控制域范围之内。 模块的作用域是指受该模块内一个判定条件影响的所有模块范围。 模块的控制域是指该模块本身以及所有该模块的下属模块(包括该模块可以直接调用的下级模块和可以间接调用的更下层的模块)。 不合适!在不合适!在图中图中c c的控制域的控制域包含了包含了c c、d d、e e、f f,c c的作的作用域超过了控制域用域超过了控制域MABCDEF例如,右图所表示的结构是否合适? 54 解决办法: 软件设计应使各个模块的作用域处于其控制域范围之内 将判定位置上移。如将模块C中的判定条件上移到上级模块B中或将模块C整个合并到模块B中。 将超出作用域的模块下移。如将模块D移至模块C的

37、下一层上,使模块D处于模块C的控制域中。 55 (6) 尽量降低模块的接口复杂度。 降低模块的接口复杂度,可以提高软件的可读性,减少出现错误的可能性,并有利于软件的测试和维护。 56 Contents Page目录页第4章 总体设计4.4 4.4 总体设计描述工具4.1 总体设计步骤及主要过程4.2 总体设计中的一些概念4.3 总体设计的原则4.5 面向数据流的设计方法 57 4.4 总体设计描述工具系统结构图4.4.1系统结构图中的模块是采用了黑盒(Black Box)的理念提出来的实例特点汽车对用户来说就是黑盒,用户不必了解汽车的内部结构就可以使用它。电子工业的IC芯片是最有代表性的黑盒,

38、人们只需了解它的内部电气特征即可使用。黑盒具有以下3个特点:通过已知的输入可以预测输出;只知道它能做什么;不关心它的内部,即不关心它的内部组织、构造及相关机制。 58 4.4 总体设计描述工具 结构化设计人员在进行总体设计时只需考虑模块的外部功能,而不考虑其内部组成系统结构图是软件系统的模块层次结构,它反映了整个系统的功能实现,即将来程序的控制层次体系。系统结构往往用树状或网状结构的图形来表示。结构图的主要内容有:模块、模块的控制关系、模块间的信息传递。 59 4.4 总体设计描述工具软件结构经常采用20世纪70年代中期由Yourdon等人提出的结构图(SC,Structure Chart)这

39、种图形工具来表示。结构图能够描述出软件系统的模块层次结构,清楚地反映出程序中各模块之间的调用关系和联系。结构图中的基本符号及其含义见表 60 4.4 总体设计描述工具ABCABC符 号含 义用于表示模块,方框中标明模块的名称用于描述模块之间的调用关系用于表示模块调用过程中传递的信息,箭头上标明信息的名称;箭头尾部为空心圆表示传递的信息是数据,若为实心圆则表示传递的是控制信息 表示模块A选择调用模块B或模块C表示模块A循环调用模块B和模块C 61 4.4 总体设计描述工具AB调用模块调用模块被调用模块被调用模块A查询学生成绩B查找学生记录学学号号查查找找成成功功信信号号记记录录地地址址 62 图

40、图 结构图的例子结构图的例子产生最佳解的一般结构产生最佳解的一般结构 63 4.4 总体设计描述工具图书管理借阅者管理借阅超时管理身份认证图书查看图书删除图书修改借阅者修改借阅者删除借阅超时查看借阅超时修改系统管理员管理系统借阅者查看图书管理系统结构图书管理系统结构 一个方框代表了一个模块,方框内注明了模块的名字或主要功能。 图中位于上方的方框代表的模块总是调用下方的模块。 方框之间的箭头(或直线)表示模块间的调用关系。 还用带注释的箭头表示模块调用过程中来回传递的信息。注释箭头尾部的形状如果是空心圆,则表示传递的是数据信息,如果是实心圆,则表示传递的是控制信息。 64 4.4 总体设计描述工

41、具深度:结构图控制的层次,也是模块的层数。宽度:一层中最大的模块个数。扇出:一个模块直接下属模块的个数。扇入:一个模块直接上属模块的个数。从上图可以看出,结构图有以下一些形态特征。 65 4.4 总体设计描述工具层次图和HIPO图4.4.2 HIPO(Hierarchy Plus Input/Processing/Output)图是IBM公司在20世纪70年代发展起来的用于描述软件结构的图形工具。用树状层次结构描述系统各个组成部分之间的关系,层次图中的一个矩形框代表一个模块,方框间的连线表示调用关系。它也可描述功能的组成关系和描述用户的组织结构。 66 4.4 总体设计描述工具实质:在描述软件

42、总体模块结构的层次图(H图)的基础上,加入了用于描述每个模块输入/输出数据和处理功能的IPO图, 中文全名为层次图加输入/处理/输出图,分成两个部分: H图:描述软件总体模块结构的层次图 IPO图:描述每个模块输入/输出数据和处理功能输入/处理/输出图层次图信誉HIPO图 67 1) H图 H图用于在体系结构设计过程中描绘软件的层次结构。 H图要点: 矩形框代表一个模块, 矩形框之间的连线用于表示模块之间的调用关系。 最顶层的矩形框表示系统中的主控模块 为了使H图更具有可追踪性,可以为除顶层矩形框以外的其他矩形框加上能反映层次关系的编号。 工资计算系统的H图如图示。 68 图 工资计算系统的H

43、图计算出勤奖1.1.2.1计算业绩奖1.1.2.2计算工资档案各基本数据项之和1.1.1计算奖金1.1.2计算应发工资1.1计算水电扣款1.2.1计算缺勤扣款1.2.2计算所得税扣款1.2.3计算扣款1.2计算实发工资1.3计算工资1查询职工账号2.1生成工资存款清单2.2工资转存2打印工资清单3工资计算系统 69 2) IPO2) IPO图图 IPO图是对H图中每个矩形框所代表的模块具体处理过程的描述,包括输入数据、加工和输出数据之间的关系。是对H图的补充说明。 IPO图分为左,中,右三部分。基本形式为: 左边的框中列出模块涉及的所有输入数据, 中间的框中列出主要的加工, 右边的框中列出处理

44、后产生的输出数据; 箭头用于指明三者之间的关系。工资计算系统中的计算工资模块的IPO图如图示。 70 图计算工资模块的IPO图业绩表出勤表工资档案文件奖惩条例水电扣款表计算奖金计算应发工资计算扣款计算实发工资奖金发放表应发工资表扣款表工资清单实发工资表 71 4.4 总体设计描述工具实例分析图书管理系统身份认证图书管理借阅管理查看修改删除检索如左图所示,最顶层的方框代表图书管理系统的主控模块,它调用下层模块完成图书管理系统的相应功能;在第三层中,列出了图书管理相应的子模型功能。层次图层次图 72 4.4 总体设计描述工具实例分析如左图所示,H图中的每个模块都有张IPO图来描述这个模块的处理过程

45、或算法,IPO图的编号为图中相应的模块编号。图书管理系统身份认证1.0图书管理2.0借阅管理3.0查看2.1修改2.2删除2.3检索2.4HIPO的层次图的层次图 73 体系结构体系结构设计说明书设计说明书 体系结构设计说明书是体系结构设计阶段中最重要的技术文档,其主要内容应包括: (1) 引言:用于说明编写本说明书的目的、背景,定义所用到的术语和缩略语,以及列出文档中所引用的参考资料等。 (2) 总体设计:用于说明软件的需求规定、运行环境要求、处理流程及软件体系结构等。 (3) 运行设计:用于说明软件的运行模块组合、运行控制方式及运行时间等。 74 (4) 模块设计:用于说明软件中各模块的功

46、能、性能及接口等。 (5) 数据设计:用于说明软件系统所涉及的数据对象的逻辑数据结构的设计。 (6) 出错处理设计:用于说明软件系统可能出现的各种错误及可采取的处理措施。 75 Contents Page目录页第4章 总体设计4.4 总体设计描述工具4.1 总体设计步骤及主要过程4.2 总体设计中的一些概念4.3 总体设计的原则4.5 4.5 面向数据流的设计方法 76 4.5 面向数据流的设计方法面向数据流的体系设计方法能够方便地将需求分析阶段生成的数据流图转换成设计阶段所需的软件结构根据数据流图的结构特点通常可将数据流图划分为如下两个基本类型。 77 4.5 面向数据流的设计方法 信息沿输

47、入通路进入系统,同时由外部信息沿输入通路进入系统,同时由外部形式变换成内部形式,进入系统的信息通形式变换成内部形式,进入系统的信息通过变换中心,经加工处理以后再沿输出通过变换中心,经加工处理以后再沿输出通路变换成外部形式离开软件系统,当数据路变换成外部形式离开软件系统,当数据流图具有这些特征时,这种信息流又称作流图具有这些特征时,这种信息流又称作变换流,如右图所示。变换流,如右图所示。变换流01变换型数据流图呈现出的结构特点为:由(逻辑)输入、变换中心和(逻辑)输出三部分组成,变换型数据流图反映的是一个顺序结构的加工过程。 78 4.5 面向数据流的设计方法 数据沿输入通路到达一个处理数据沿输

48、入通路到达一个处理T,这个处理根据输入数据的类型在若干这个处理根据输入数据的类型在若干个动作序列中选出一个来执行,这类个动作序列中选出一个来执行,这类数据流应该划为一类特殊的数据流,数据流应该划为一类特殊的数据流,称为事务流。称为事务流。 事物流02处理处理T称为事务中心,它完成下述任务:称为事务中心,它完成下述任务: (1) 接收输入数据接收输入数据(输入数据又称为事务输入数据又称为事务); (2) 分析每个事务以确定它的类型;分析每个事务以确定它的类型; (3) 根据事务类型选取一条活动通路。根据事务类型选取一条活动通路。 79 3.3.面向面向数据流的体系结构设计过程数据流的体系结构设计

49、过程 1、对需求分析阶段得到的数据流图进行复查,必要时进行修改和精化; 2、在仔细分析系统数据流图的基础上,确定数据流图的类型,并按照相应的设计步骤将数据流图转化为软件结构; 3、还要根据体系结构设计的原则对得到的软件结构进行优化和改进。 80 图 面向数据流的体系结构设计过程事务流变换流精化数据流图区分事务中心、接收路径及加工路径区分变换中心、输入及输出部分映射成事务结构映射成变换结构详细设计根据体系结构设计基本原则优化软件结构导出接口描述和全程数据结构复查事务分析变换分析流类型 81 注意:对于一个复杂的系统,数据流图中可能既存在变换流又存在事务流,这时应当根据数据流图的主要处理功能,选择

50、一个面向全局的、涉及整个软件系统的总体类型,映射得到系统的整体软件结构。此外,再对局部范围内的数据流图进行具体研究,确定它们各自的类型并分别处理,得到系统的局部软件结构。 82 变换分析是一系列设计步骤的总称,经过这些步骤把具有变换流特点的数据流图变换分析是一系列设计步骤的总称,经过这些步骤把具有变换流特点的数据流图按预先确定的模式映射成软件结构。下面通过一个例子说明变换分析的方法。按预先确定的模式映射成软件结构。下面通过一个例子说明变换分析的方法。 1. 例子例子 我们已经开始进入我们已经开始进入“智能智能”产品时代。在这类产品中把软件做在只读存储器中,产品时代。在这类产品中把软件做在只读存

51、储器中,成为设备的一部分,从而使设备具有某些成为设备的一部分,从而使设备具有某些“智能智能”。因此,这类产品的设计都包含。因此,这类产品的设计都包含软件开发的任务。作为面向数据流的设计方法中变换分析的例子,考虑汽车数字仪软件开发的任务。作为面向数据流的设计方法中变换分析的例子,考虑汽车数字仪表板的设计。表板的设计。3.1 变换分析 83 假设的仪表板将完成下述功能:假设的仪表板将完成下述功能: (1) 通过模数转换实现传感器和微处理机接口;通过模数转换实现传感器和微处理机接口; (2) 在发光二极管面板上显示数据;在发光二极管面板上显示数据; (3) 指示每小时英里数指示每小时英里数(mph)

52、,行驶的里程,每加仑油行驶的英里数,行驶的里程,每加仑油行驶的英里数(mpg)等等;等等; (4) 指示加速或减速;指示加速或减速; (5) 超速警告:如果车速超过超速警告:如果车速超过55英里英里/小时,则发出超速警告铃声。小时,则发出超速警告铃声。 在软件需求分析阶段应该对上述每条要求以及系统的其他特点进行全面的分析在软件需求分析阶段应该对上述每条要求以及系统的其他特点进行全面的分析评价,建立起必要的文档资料,特别是数据流图。评价,建立起必要的文档资料,特别是数据流图。 84 2. 设计步骤设计步骤 第第1步步 复查基本系统模型。复查基本系统模型。 第第2步步 复查并精化数据流图复查并精化

53、数据流图。 假设在需求分析阶段产生的数字仪表板系统的数据流图如图假设在需求分析阶段产生的数字仪表板系统的数据流图如图1所示。所示。 这个数据流图对于软件结构设计的这个数据流图对于软件结构设计的“第一次分割第一次分割”而言已经足够详细了,因此不需而言已经足够详细了,因此不需要精化就可以进行下一个设计步骤。要精化就可以进行下一个设计步骤。 85 图1 数字仪表板系统的数据流图读旋转信号收集和求平均确定加速/减速产生加速/减速显示转换成转/分(rpm)计算里程计算mph和超速值产生里程显示发出铃声产生mph显示计算燃料消耗产生mpg显示计算gph读和校核旋转信号信号/秒(sps)sps箭头指示上箭头

54、下箭头水平线spsrpmrpm英里显示超速值铃声mphmph显示mpg显示mpgmphgph燃烧流燃烧流传感器信号 86 第第3步步 确定数据流图具有变换特性还是事务特性。确定数据流图具有变换特性还是事务特性。 从图从图1看出,数据沿着两条输入通路进入系统,然后沿着看出,数据沿着两条输入通路进入系统,然后沿着5条通路离开,没有明条通路离开,没有明显的事务中心。因此可以认为这个信息流具有变换流的总特征。显的事务中心。因此可以认为这个信息流具有变换流的总特征。 第第4步步 确定输入流和输出流的边界,从而孤立出变换中心。确定输入流和输出流的边界,从而孤立出变换中心。 对于汽车数字仪表板的例子,设计人

55、员确定的流的边界如图对于汽车数字仪表板的例子,设计人员确定的流的边界如图2所示。所示。 87 图3 具有边界的数据流图读旋转信号收集和求平均确定加速/减速产生加速/减速显示转换成转/分(rpm)计算里程计算mph和超速值产生里程显示发出铃声产生mph显示计算燃料消耗产生mpg显示计算gph读和校核旋转信号信号/秒(sps)sps箭头指示上箭头下箭头水平线spsrpmrpm英里显示超速值铃声mphmph显示mpg显示mpgmphgph燃烧流燃烧流传感器信号 88 第第5步步 完成完成“第一级分解第一级分解”。 图图3说明了第一级分解的方法。说明了第一级分解的方法。ABCDEFGHIJK图图3 第

56、一级分解的方法第一级分解的方法 89 位于软件结构最顶层的控制模块位于软件结构最顶层的控制模块Cm协调下述从属的控制功能:协调下述从属的控制功能: A、输入信息处理控制模块输入信息处理控制模块Ca,协调对所有输入数据的接收;协调对所有输入数据的接收; B、变换中心控制模块、变换中心控制模块Ct,管理对内部形式的数据的所有操作;管理对内部形式的数据的所有操作; C、 输出信息处理控制模块输出信息处理控制模块Ce,协调输出信息的产生过程。,协调输出信息的产生过程。 对于数字仪表板的例子,第一级分解得出的结构如图对于数字仪表板的例子,第一级分解得出的结构如图4所示。所示。 90 图4 具有边界的数据

57、流图读旋转信号收集和求平均确定加速/减速产生加速/减速显示转换成转/分(rpm)计算里程计算mph和超速值产生里程显示发出铃声产生mph显示计算燃料消耗产生mpg显示计算gph读和校核旋转信号信号/秒(sps)sps箭头指示上箭头下箭头水平线spsrpmrpm英里显示超速值铃声mphmph显示mpg显示mpgmphgph燃烧流燃烧流传感器信号接收传感接收传感器信号器信号数据转换控制数据转换控制驱动仪表板驱动仪表板 91 图图5数字仪表板系统的第一级分解数字仪表板系统的第一级分解 92 第第6步步 完成完成“第二级分解第二级分解”。 图图5表示进行第二级分解的普遍途径。表示进行第二级分解的普遍途

58、径。图图5 5 第二级分解的方法第二级分解的方法 93 图6 具有边界的数据流图读旋转信号收集和求平均确定加速/减速产生加速/减速显示转换成转/分(rpm)计算里程计算mph和超速值产生里程显示发出铃声产生mph显示计算燃料消耗产生mpg显示计算gph读和校核旋转信号信号/秒(sps)sps箭头指示上箭头下箭头水平线spsrpmrpm英里显示超速值铃声mphmph显示mpg显示mpgmphgph燃烧流燃烧流传感器信号 94 虽然图中每个模块的名字表明了它的基本功能,但是仍然应该为每个虽然图中每个模块的名字表明了它的基本功能,但是仍然应该为每个模块写一个简要说明,描述:模块写一个简要说明,描述:

59、 A、进出该模块的信息、进出该模块的信息(接口描述接口描述); B、模块内部的信息;、模块内部的信息; C、过程陈述,包括主要判定点及任务等;、过程陈述,包括主要判定点及任务等; D、对约束和特殊特点的简短讨论。、对约束和特殊特点的简短讨论。 这些描述是第一代的设计规格说明,在这个设计时期进一步的精化和这些描述是第一代的设计规格说明,在这个设计时期进一步的精化和补充是经常发生的。补充是经常发生的。 95 第第7步步 使用设计度量和启发式规则对第一次分割得到的软件结构进一步精使用设计度量和启发式规则对第一次分割得到的软件结构进一步精化。化。 具体到数字仪表板的例子,对于从前面的设计步骤得到的软件结构,还可具体到数字仪表板的例子,对于从前面的设计步骤得到的软件结构,还可以做许多修改。下面是某些可能的修改:以做许多修改。下面是某些可能的修改: (1)输入结构中的模块输入结构中的模块“转换成转换成rpm”和和“收集收集sps”可以合并;可以合并; (2)模块模块“确定加速确定加速/减速减速”可以放在模块可以放在模块“计算计算mph”下面,以减少耦合;下面,以减少耦合; (3)模块模块“加速加速/减速显示减速显示”可以相应地放在模块可以相应地放在模块“显示显示mph”的下面。的下面。 经过上述修改后

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论