第章软件设计ppt课件_第1页
第章软件设计ppt课件_第2页
第章软件设计ppt课件_第3页
第章软件设计ppt课件_第4页
第章软件设计ppt课件_第5页
已阅读5页,还剩123页未读 继续免费阅读

下载本文档

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

文档简介

1、第5章 软件设计 第5章 软件设计 5.1 软件设计中的根本概念和原理软件设计中的根本概念和原理 5.2 体系构造设计概述体系构造设计概述 5.3 面向数据流的体系构造设计方法面向数据流的体系构造设计方法 5.4 详细设计概述详细设计概述 5.5 面向数据流的详细设计方法面向数据流的详细设计方法5.6 面向数据构造的设计方法面向数据构造的设计方法5.7 小结小结 第5章 软件设计 5.1 5.1 软件设计中的根本概念和原理软件设计中的根本概念和原理 1. 模块化 所谓模块,是指具有相对独立性的,由数听阐明、执行语句等程序对象构成的集合。程序中的每个模块都需求单独命名,经过名字可实现对指定模块的

2、访问。在高级言语中,模块详细表现为函数、子程序、过程等。一个模块具有输入/输出(接口)、功能、内部数据和程序代码四个特征。输入/输出用于实现模块与其他模块间的数据传送,即向模块传入所需的原始数据及从模块传出得到的结果数据。功能指模块所完成的任务。模块的输入/输出和功能构成了模块的外部特征。内部数据是指仅能在模块内部运用的部分量。程序代码用于描画实现模块功能的详细方法和步骤。模块的内部数据和程序代码反映的是模块的内部特征。第5章 软件设计 模块化是指将整个程序划分为假设干个模块,每个模块用于实现一个特定的功能。划分模块对于处理大型复杂的问题是非常必要的,可以大大降低处理问题的难度。为了阐明这一点

3、,我们可对问题复杂性、开发任务量和模块数之间的关系进展以下推理。 首先,我们设C(x)为问题x所对应的复杂度函数,E(x)为处理问题x所需求的任务量函数。对于两个问题P1和P2,假设: C(P1) C(P2) 即问题P1的复杂度比P2高,那么显然有: E(P1) E(P2) 即处理问题P1比P2所需的任务量大。第5章 软件设计 在人们处理问题的过程中,发现存在有另一个有趣的规律:C(P1+P2) C(P1)+C(P2)即处理由多个问题复合而成的大问题的复杂度大于单独处理各个问题的复杂度之和。也就是说,对于一个复杂问题,将其分解成多个小问题分别处理比较容易。由此我们可以推出:E(P1+P2) E

4、(P1)+E(P2)即将复杂问题分解成假设干个小问题,各个击破,所需求的任务量小于直接处理复杂问题所需的任务量。第5章 软件设计 根据上面的推理,我们可以得到这样一个结论,模块化可以降低处理问题的复杂度,从而降低软件开发的任务量。但是不是模块划分得越多越好呢?虽然添加程序中的模块数可以降低开发每个模块的任务量,但同时却添加了设计模块接口的任务量。经过图5.1所示的模块数与软件开发本钱的关系图中可以看出,当划分的模块数处于最小本钱区时,开发软件的总本钱最低。虽然目前还不能得到模块数M的准确取值,但总本钱曲线对我们进展模块划分具有重要的指点意义。 模块化不但可以降低软件开发的难度,而且可以使程序构

5、造明晰,添加易读性和易修正性。此外,模块化还有利于提高代码的可重用性及团队协作开发大型软件的可行性。第5章 软件设计 图5.1 模块数与软件开发本钱成本(工作量)模块数接口成本软件总成本最小成本区M成本 / 模块第5章 软件设计 2. 模块独立性 1) 耦合性 耦合性是对一个软件构造内部不同模块间联络严密程度的度量目的。模块间的联络越严密,耦合性就越高,模块的独立性也就越低。由于模块间的联络是经过模块接口实现的,因此,模块耦合性的高低主要取决于模块接口的复杂程度、调用模块的方式以及经过模块接口的数据。模块间的耦合性主要可划分为如下几种类型。第5章 软件设计 (1) 数据耦合。假设两个模块之间仅

6、经过模块参数交换信息,且交换的信息全部为简单数据,那么称这种耦合为数据耦合。数据耦合的耦合性最低,通常软件中都包含有数据耦合。数据耦合的例子如下所示:第5章 软件设计 sum(int a,int b)int c; c=a+b; return(c); main()int x,y; printf(x+y= %d,sum(x,y);/*主函数与sum函数之间即为数据耦合关系*/第5章 软件设计 (2) 公共耦合。假设两个或多个模块经过援用公共数据相互联络,那么称这种耦合为公共耦合。例如,在程序中定义了全局变量,并在多个模块中对全局变量进展了援用,那么援用全局变量的多个模块间就具有了公共耦合关系。 F

7、ORTRAN言语中运用的common语句也会在多个模块间建立公共耦合关系。公共耦合的复杂度随着耦合的模块个数的添加而显著添加。在程序设计中,假设两个模块间需求交换的数据较多,仅经过参数传送难以实现时,可以思索采用公共耦合完成,但一定留意尽量降低公共耦合的程度。第5章 软件设计 (3) 控制耦合。假设模块之间交换的信息中包含有控制信息(虽然有时控制信息是以数据的方式出现的),那么称这种耦合为控制耦合。控制耦合是中等程度的耦合,它会添加程序的复杂性。控制耦合的例子如下所示:void output(flag)if (flag) printf(OK! ); else printf(NO! );main

8、() int flag;output(flag); /*主函数与output函数之间即为控制耦合关系*/第5章 软件设计 (4) 内容耦合。假设一个模块对另一模块中的内容(包括数据和程序段)进展了直接的援用甚至修正,或经过非正常入口进入到另一模块内部,或一个模块具有多个入口,或两个模块共享一部分代码,那么称模块间的这种耦合为内容耦合。内容耦合是一切耦合关系中程度最高的,会使因模块间的联络过于严密而对后期的开发和维护任务带来很大的费事,因此,应坚决防止任何方式的内容耦合。实践上,许多高级程序设计言语在设计时就充分思索到了内容耦合的危害,因此在规定语法时就曾经杜绝了任何方式的内容耦合。 耦合是影响

9、软件复杂度的一个重要要素,设计过程中应力求降低程序的耦合性。在以上所引见的耦合中,数据耦合的程度最低,其次是公共耦合,再其次是控制耦合,程度最高的是内容耦合。第5章 软件设计 2) 内聚性 内聚性是对一个模块内部各个组成元素之间相互结合的严密程度的度量目的。模块中组成元素结合的越严密,模块的内聚性就越高,模块的独立性也就越高。理想的内聚性要求模块的功能应明确、单一,即一个模块只做一件事情。模块的内聚性和耦合性是两个相互对立且又亲密相关的概念。现实上,它们是同一事物的两个方面,模块的高内聚性往往就意味着模块间的低耦合性。由于程序中的各个部分必定是有联络的,假设将其中亲密相关的部分放在同一个模块中

10、,模块间的联络就会降低;反之,假设将亲密相关的部分分散放在不同的模块之中,模块间的联络必然会加强。在进展模块化设计时,耦合性和内聚性都是必需思索的重要目的。但经实际证明,保证模块的高内聚性比低耦合性更为重要,在软件设计时应将更多的留意力集中在提高模块的内聚性上。模块的内聚性主要可划分为如下几种不同的类型。第5章 软件设计 (1) 偶尔内聚。假设一个模块由多个完成不同义务的语句段组成,各语句段之间的联络非常松散或根本没有任何联络,那么称此模块的内聚为偶尔内聚。例如,程序中多处出现一些无联络的语句段序列,为了节省内存空间将其组合成为一个模块,这个模块就属于偶尔内聚。偶尔内聚的模块由于组成部分之间没

11、有本质的联络,因此难于了解和修正,会给软件开发带来很大的困扰。现实上,偶尔内聚的模块出错的机率要比其他类型的模块大得多。偶尔内聚是内聚程度最低的一种,在软件设计时应尽量防止。第5章 软件设计 (2) 逻辑内聚。假设一个模块可实现多个逻辑上一样或类似的一类功能,那么称该模块的内聚为逻辑内聚。例如,将程序中多种不同类型数据的输出放在同一个模块中实现,这个模块就属于逻辑聚合。逻辑内聚比偶尔内聚的内聚程度高一些。虽然逻辑聚合模块的组成部分之间有一定的关系,但不同功能混在一同并公用模块中的部分代码,给修正带来了一定的费事。另外,为了在调用模块时能选择执行其中的某个功能,需求传送相应的控制参数,因此会呵斥

12、模块间的控制耦合,降低模块的独立性。第5章 软件设计 (3) 时间内聚。假设一个模块包含了需求在同一时间段中执行的多个义务,那么称该模块的内聚为时间内聚。例如,将多个变量的初始化放在同一个模块中实现,或将需求同时运用的多个库文件的翻开操作放在同一个模块中,都会产生时间内聚的模块。由于时间内聚模块中的各个部分在时间上的联络,其内聚程度比逻辑内聚高一些。但这样的模块往往会和其他相关模块有着严密的联络,因此会呵斥耦合性的添加。第5章 软件设计 (4) 过程内聚。假设一个模块中的各个部分相关,并且必需按特定的次序执行,那么称该模块的内聚为过程内聚。在构造化程序中,通常采用程序流程图作为设计软件和确定模

13、块划分的工具,因此,这样得到的模块往往具有过程内聚的特性。 (5) 通讯内聚。假设一个模块中的各个部分运用同一个输入数据或产生同一个输出数据,那么称该模块的内聚为通讯内聚。由于通讯内聚模块中的各个部分都与某个共同的数据亲密相关,因此内聚性高于前几种内聚。第5章 软件设计 (6) 顺序内聚。假设一个模块中的各个部分都与同一个功能亲密相关,并且必需按照先后顺序执行(通常前一个部分的输出数据就是后一个部分的输入数据),那么称该模块的内聚为顺序内聚。例如,在一个处置学生成果的模块中,前一个部分根据成果统计出及格的学生人数,后一个部分根据及格人数计算出学生的及格率。根据数据流图划分出的模块通常都是顺序内

14、聚的模块。由于顺序内聚模块中的各个部分在功能和执行顺序上都亲密相关,因此内聚程度很高且易于了解。第5章 软件设计 (7) 功能内聚。假设一个模块中各个组成部分构成一个整体并共同完成一个单一的功能,那么称该模块的内聚为功能内聚。由于功能内聚模块中的各个部分关系非常亲密,构成一个不可分割的整体,因此功能内聚是一切内聚中内聚程度最高的一种。 在以上所引见的七种内聚中,按照内聚性从低到高进展陈列的结果如图5.2所示。 第5章 软件设计 偶然内聚逻辑内聚时间内聚低内聚过程内聚通信内聚中内聚顺序内聚功能内聚高内聚低高图图5.2 内聚性的陈列内聚性的陈列 第5章 软件设计 3. 3. 笼统笼统 笼统是人类在

15、处理复杂问题时经常采用的一种思想方式,笼统是人类在处理复杂问题时经常采用的一种思想方式,它是指将现实世界中具有共性的一类事物的类似的、本质的方它是指将现实世界中具有共性的一类事物的类似的、本质的方面集中概括起来,而暂时忽略它们之间的细节差别。在软件开面集中概括起来,而暂时忽略它们之间的细节差别。在软件开发中运用笼统的概念,可以将复杂问题的求解过程分层,在不发中运用笼统的概念,可以将复杂问题的求解过程分层,在不同的笼统层上实现难度的分解。在笼统级别较高的层次上,可同的笼统层上实现难度的分解。在笼统级别较高的层次上,可以将琐碎的细节的信息暂时隐藏起来,以利于处理系统中的全以将琐碎的细节的信息暂时隐

16、藏起来,以利于处理系统中的全局性的问题。软件开发过程中从问题定义到最终的软件生成,局性的问题。软件开发过程中从问题定义到最终的软件生成,每一阶段都是在前一阶段根底上对软件解法的笼统层上的一次每一阶段都是在前一阶段根底上对软件解法的笼统层上的一次求精和细化。求精和细化。第5章 软件设计 构造化程序中自顶向下、逐渐求精的模块划分思想正是人类思想中运用笼统方法处理复杂问题的表达。软件构造中顶层的模块笼统级别最高,控制并协调软件的主要功能且影响全局;软件构造中位于底层的模块笼统级别最低,详细实现数据的处置过程。采用自顶向下、由笼统到详细的思想方式,不但降低了软件开发中每个阶段的任务难度,简化了软件的设

17、计和实现过程,还有助于提高软件的可读性、可测试性和可维护性。此外,在程序设计中运用笼统的方法还可以提高代码的可重用性。第5章 软件设计 4. 信息隐蔽 信息隐蔽是指一个模块将本身的内部信息向其他模块隐藏起来,以防止其他模块不恰当的访问和修正,只需对那些为了完成系统功能所必需的数据交换才被允许在模块间进展。信息隐蔽的目的主要是为了提高模块的独立性,减少将一个模块中的错误分散到其他模块的时机。但是需求强调一点,信息隐蔽并不意味着某个模块中的内部信息对其他模块来说是完全不可见或不能运用的,而是说模块之间的信息传送只能经过合法的调用接口来实现。显然,信息隐蔽对提高软件的可读性和可维护性都是非常重要的。

18、第5章 软件设计 5.2 5.2 体系构造设计概述体系构造设计概述5.2.1 5.2.1 体系构造设计的义务体系构造设计的义务 在体系构造设计过程中,首先要根据需求分析阶段产生的在体系构造设计过程中,首先要根据需求分析阶段产生的成果寻务虚现目的系统的各种能够的方案,然后由系统分析员成果寻务虚现目的系统的各种能够的方案,然后由系统分析员对一切能够的方案进展综合分析比较,从中选择出一个最正确对一切能够的方案进展综合分析比较,从中选择出一个最正确方案向用户引荐。在与用户达成共识之后,系统分析员就可以方案向用户引荐。在与用户达成共识之后,系统分析员就可以着手对选择出的最正确方案进展体系构造的设计,并为

19、软件确着手对选择出的最正确方案进展体系构造的设计,并为软件确定数据构造及设计数据库。体系构造设计阶段终了时,系统分定数据构造及设计数据库。体系构造设计阶段终了时,系统分析员需求提交软件的体系构造阐明书并参与该阶段的评审。体析员需求提交软件的体系构造阐明书并参与该阶段的评审。体系构造设计的主要义务有如下四点。系构造设计的主要义务有如下四点。第5章 软件设计 1. 软件体系构造设计 设计软件的体系构造需求在对需求分析阶段生成的数据流图进一步分析和精化的根底上,首先将系统按照功能划分为模块,接着需求确定模块之间的调用关系及其接口,最后还应该对划分的结果进展优化和调整。良好的软件构造设计对详细设计及编

20、码阶段的任务都是至关重要的。第5章 软件设计 2. 数据构造和数据库设计 体系构造设计中应对需求分析阶段所生成的数据字典加以细化,从计算机技术实现的角度出发,确定软件涉及的文件系统及各种数据的构造。主要包括确定输入、输出文件的数据构造及确定算法所需的逻辑数据构造等。在需求分析阶段仅为系统所需的数据库建立了概念数据模型(最常采用的是E-R模型)。体系构造设计阶段需求将本来独立于数据库实现的概念模型与详细的数据库管理系统的特征结合起来,建立数据库的逻辑构造,主要包括确定数据库的方式、子方式及对数据库进展规范和优化等。第5章 软件设计 3. 系统可靠性、平安性设计 可靠性设计也称为质量设计,目的是为

21、了保证程序及其文档具有较高的正确性和容错性,并对能够出现的错误易于修正和维护。平安性设计的主要目的是为了加强系统的自我防护才干和运转的稳定性,防止系统遭遭到有意或无意地入侵和破坏,保证系统在平安的环境下正常地任务。第5章 软件设计 4. 编写文档,参与复审 体系构造设计阶段应交付的文档通常包括:体系构造设计阐明书、用户手册、数据库设计阐明书及系统初步测试方案。 (1) 体系构造设计阐明书: 给出系统总体构造设计的结果,为系统的详细设计提供根底。 (2) 用户手册:根据体系构造设计成果,对需求分析阶段编写的用户手册进展补充和修正。 (3) 测试方案:明确测试中应采用的战略、方案、预期的测试结果及

22、测试的进度安排。第5章 软件设计 (4) 数据库设计阐明书:主要用于给出目的系统中数据库管理系统的选择及逻辑构造等的设计结果。 体系构造设计阶段复审的重点主要是系统的总体构造、模块划分和内/外接口等方面,复审的对象就是该阶段的设计文档。由于体系构造设计中的微小失误能够会导致软件开发中的艰苦问题,因此复审一定要按严厉的步骤,经过正式会议的方式进展,争取尽能够地及早发现设计中的缺陷和错误。除软件开发人员以外,体系构造设计复审必需有用户参与,必要时还可以约请相关领域的专家参与会议。第5章 软件设计 5.2.2 5.2.2 体系构造设计中可采用的工具体系构造设计中可采用的工具 1. HIPO1. HI

23、PO图图 HIPO(Hierarchy Plus Input/Processing/Output)HIPO(Hierarchy Plus Input/Processing/Output)图是图是IBMIBM公司在公司在2020世纪世纪7070年代开展起来的用于描画软件构造的图形工具。年代开展起来的用于描画软件构造的图形工具。它本质上是在描画软件总体模块构造的层次图它本质上是在描画软件总体模块构造的层次图(H(H图图) )的根底上,的根底上,参与了用于描画每个模块输入参与了用于描画每个模块输入/ /输出数据和处置功能的输出数据和处置功能的IPOIPO图,因图,因此它的中文全名为层次图加输入此它的

24、中文全名为层次图加输入/ /处置处置/ /输出图。输出图。第5章 软件设计 1) HIPO图中的H图 H图用于在体系构造设计过程中描画软件的层次构造。在H图中,每一个矩形框代表一个模块,图中最顶层的矩形框表示系统中的主控模块,矩形框之间的连线用于表示模块之间的调用关系。为了使H图更具有可追踪性,可以为除顶层矩形框以外的其他矩形框加上能反映层次关系的编号。H图比较适用于自顶向下进展分解的软件构造设计方法。工资计算系统的H图如图5.3所示。第5章 软件设计 图5.3 工资计算系统的H图计算出勤奖1.1.2.1计算业绩奖1.1.2.2计算工资档案各基本数据项之和1.1.1计算奖金1.1.2计算应发工

25、资1.1计算水电扣款1.2.1计算缺勤扣款1.2.2计算所得税扣款1.2.3计算扣款1.2计算实发工资1.3计算工资1查询职工账号2.1生成工资存款清单2.2工资转存2打印工资清单3工资计算系统第5章 软件设计 2) IPO图 IPO图可以方便、明晰地描画出模块的输入数据、加工和输出数据之间的关系。与层次图中每个矩形框相对应,应该有一张IPO图描画该矩形框所代表的模块的详细处置过程,作为对层次图中内容的补充阐明。IPO图的根本方式为:在图中左边的框中列出模块涉及的一切输入数据,在中间的框中列出主要的加工,在右边的框中列出处置后产生的输出数据;图中的箭头用于指明输入数据、加工和输出结果之间的关系

26、。工资计算系统中的计算工资模块的IPO图如图5.4所示。第5章 软件设计 图5.4 计算工资模块的IPO图业绩表出勤表工资档案文件奖惩条例水电扣款表计算奖金计算应发工资计算扣款计算实发工资奖金发放表应发工资表扣款表工资清单实发工资表第5章 软件设计 2. 构造图 在软件工程中,软件构造经常采用20世纪70年代中期由Yourdon等人提出的构造图(SC,Structure Chart)这种图形工具来表示。构造图可以描画出软件系统的模块层次构造,清楚地反映出程序中各模块之间的调用关系和联络。构造图中的根本符号及其含义见表5.1。第5章 软件设计 表表5.1 5.1 构造图中的根本符号构造图中的根本

27、符号ABCABC符 号含 义用于表示模块,方框中标明模块的称号用于描画模块之间的调用关系用于表示模块调用过程中传送的信息,箭头上标明信息的称号;箭头尾部为空心圆表示传送的信息是数据,假设为实心圆那么表示传送的是控制信息 表示模块A选择调用模块B或模块C表示模块A循环调用模块B和模块C第5章 软件设计 5.2.3 5.2.3 体系构造设计的原那么体系构造设计的原那么 体系构造设计的原那么有如下体系构造设计的原那么有如下6 6点。点。 (1) (1) 降低模块的耦合性,提高模块的内聚性。降低模块的耦合性,提高模块的内聚性。 为了提高软件中各个模块的独立性,提高程序的可读性、为了提高软件中各个模块的

28、独立性,提高程序的可读性、可测试性和可维护性,在软件体系构造设计时应尽能够采用内可测试性和可维护性,在软件体系构造设计时应尽能够采用内聚性高的模块,如最好实现功能内聚;尽量只运用数据耦合,聚性高的模块,如最好实现功能内聚;尽量只运用数据耦合,限制公共耦合的运用,防止控制耦合的运用,杜绝内容耦合的限制公共耦合的运用,防止控制耦合的运用,杜绝内容耦合的出现。出现。第5章 软件设计 (2) 坚持适中的模块规模。 程序中模块的规模过大,会降低程序的可读性;而模块规模过小,势必会导致程序中的模块数目过多,添加接口的复杂性。对于模块的适当规模并没有严厉的规定,但普遍的观念是模块中的语句数最好坚持在1010

29、0之间。为了使模块的规模适中,在保证模块独立性的前提下,可对程序中规模过小的模块进展合并或对规模过大的模块进展分解。第5章 软件设计 (3) 模块应具有高扇入和适当的扇出。 在模块调用中,某个模块的上级模块数被称为该模块的扇入(如图5.5(a)所示,模块M的扇入数为n);而某个模块可以调用的下级模块数被称为该模块的扇出(如图5.5(b)所示,模块M的扇出数为k)。显然,一个模块的扇入阐明了共有多少个模块需求调用该模块,而其扇出阐明了该模块可以控制的下级模块的数目。第5章 软件设计 图5.5 模块的扇入和扇出(a) 扇入;(b) 扇出M1M2MnM(a)(b)M1M2MkM第5章 软件设计 模块

30、的扇入越大,那么阐明共享该模块的上级模块数越多,或者说该模块在程序中的重用性越高,这正是程序设计所追求的目的之一。当多个模块具有一部分一样功能时,应将这部分一样的功能分别出来,编写成独立的模块供需求的模块调用。经过消除不同模块中的反复内容,提高代码的可重用性,可以减少程序的总代码量,便于程序的测试和维护。第5章 软件设计 模块的扇出假设过大,如在一个模块中要调用八个下级模块,那么会使该模块的调用控制过于复杂。这种景象发生的缘由通常都是由于设计阶段,模块细化的过程中,分解速度过快呵斥的。最常见的处理方法是经过在此模块和下级模块间添加一个中间层来控制模块分解的速度。模块的扇出过小,如扇出为1(下级

31、模块层中只需一个模块),在系统设计中通常是不可取的。常见的处理方法是思索将其合并到上级模块中。但假设合并会影响模块的独立性,那么将其保管下来也未尝不可。根据实际阅历,设计良好的典型系统中,模块的平均扇出通常为3或4。第5章 软件设计 可以看出:在一个好的软件构造中,模块应具有较高的扇入和适当的扇出。但绝不能为了单纯追求高扇入或适宜的扇出而破坏了模块的独立性。此外,经过对大量软件系统的研讨后发现,在设计良好的软件构造中,通常顶层的扇出数较大,中间层的扇出数较小,底层的扇入数较大,如图5.6所示。第5章 软件设计 图5.6 软件构造图例如 第5章 软件设计 (4) 软件构造中的深度和宽度不宜过大。

32、 所谓深度,是指软件体系构造中控制的层数,它可以粗略地反映出软件系统的规模和复杂程度;所谓宽度,是指软件体系构造内同一层次上模块个数的最大值,通常宽度越大的系统越复杂。如图5.6所示的软件构造图中,深度为5,宽度为8。深度在程序中表现为模块的嵌套调用,嵌套的层数越多,程序就越复杂,程序的可了解性也就随之下降。对宽度影响最大的要素是模块的扇出,即模块可以调用的下级模块数越多,软件构造的宽度就越大。深度过大可经过将构造中过于简单的模块分层与上一级模块合并来处理;而宽度过大那么可经过添加中间层来处理。显然,软件构造中的深度和宽度是相互对立的两个方面,降低深度会引起宽度的添加,而降低宽度又会带来深度的

33、添加。第5章 软件设计 (5) 模块的作用域应处于其控制域范围之内。 模块的作用域是指受该模块内一个断定条件影响的一切模块范围。模块的控制域是指该模块本身以及一切该模块的下属模块(包括该模块可以直接调用的下级模块和可以间接调用的更下层的模块)。例如,在图5.7中,模块C的控制域为模块C、E和F;假设在模块C中存在一个对模块D、E和F均有影响的断定条件,即模块C的作用域为模块C、D、E和F(图中带阴影的模块),那么显然模块C的作用域超出了其作用域。由于模块D在模块C的作用域中,因此模块C对模块D的控制信息必然要经过上级模块B进展传送,这样不但会添加模块间的耦合性,而且会给模块的维护和修正带来费事

34、(假设要修正模块C,能够会对不在它控制域中的模块D呵斥影响)。因此,软件设计时应使各个模块的作用域处于其控制域范围之内。假设发现不符合此设计原那么的模块,可经过下面的方法进展改良:第5章 软件设计 将断定位置上移。如将图5.7中的模块C中的断定条件上移到上级模块B中或将模块C整个合并到模块B中。 将超出作用域的模块下移。如将图5.7中的模块D移至模块C的下一层上,使模块D处于模块C的控制域中。第5章 软件设计 MABCDEF图图5.7 模块的作用域和控制域模块的作用域和控制域 第5章 软件设计 (6) 尽量降低模块的接口复杂度。 由于复杂的模块接口是导致软件出现错误的主要缘由之一,因此在软件设

35、计中应尽量使模块接口简单明晰,如减少接口传送的信息个数以及确保实参和形参的一致性和对应性等。降低模块的接口复杂度,可以提高软件的可读性,减少出现错误的能够性,并有利于软件的测试和维护。第5章 软件设计 5.2.4 5.2.4 体系构造设计阐明书体系构造设计阐明书 体系构造设计阐明书是体系构造设计阶段中最重要的技术体系构造设计阐明书是体系构造设计阶段中最重要的技术文档,其主要内容应包括:文档,其主要内容应包括: (1) (1) 引言:用于阐明编写本阐明书的目的、背景,定义所引言:用于阐明编写本阐明书的目的、背景,定义所用到的术语和缩略语,以及列出文档中所援用的参考资料等。用到的术语和缩略语,以及

36、列出文档中所援用的参考资料等。 (2) (2) 总体设计:用于阐明软件的需求规定、运转环境要求、总体设计:用于阐明软件的需求规定、运转环境要求、处置流程及软件体系构造等。处置流程及软件体系构造等。 (3) (3) 运转设计:用于阐明软件的运转模块组合、运转控制运转设计:用于阐明软件的运转模块组合、运转控制方式及运转时间等。方式及运转时间等。第5章 软件设计 (4) 模块设计:用于阐明软件中各模块的功能、性能及接口等。 (5) 数据设计:用于阐明软件系统所涉及的数据对象的逻辑数据构造的设计。 (6) 出错处置设计:用于阐明软件系统能够出现的各种错误及可采取的处置措施。第5章 软件设计 5.3 5

37、.3 面向数据流的体系构造设计方法面向数据流的体系构造设计方法5.3.1 5.3.1 数据流图的类型数据流图的类型 面向数据流的体系设计方法可以方便地将需求分析阶段生面向数据流的体系设计方法可以方便地将需求分析阶段生成的数据流图转换成设计阶段所需的软件构造。但对于不同类成的数据流图转换成设计阶段所需的软件构造。但对于不同类型的数据流图,转换得到的软件构造也不同,因此有必要首先型的数据流图,转换得到的软件构造也不同,因此有必要首先研讨一下数据流图的典型方式。根据数据流图的构造特点通常研讨一下数据流图的典型方式。根据数据流图的构造特点通常可将数据流图划分为如下两个根本类型。可将数据流图划分为如下两

38、个根本类型。第5章 软件设计 1. 变换型数据流图 变换型数据流图呈现出的构造特点为:由(逻辑)输入、变换中心和(逻辑)输出三部分组成,如图5.8所示。该类型数据流图所描画的加工过程为:首先,外部数据沿逻辑输入途径进入系统,同时数据的方式由外部方式转化为内部方式;接着,数据被送往变换中心进展加工处置;最后,经过加工得到的结果数据的内部方式被转换为外部方式并沿逻辑输出途径分开系统。可以看出,变换型数据流图反映的是一个顺序构造的加工过程。第5章 软件设计 变换中心变换输入输出图图5.8 变换型数据流图的根本模型变换型数据流图的根本模型 第5章 软件设计 2. 事务型数据流图 原那么上,一切根本系统

39、模型都属于变换型,但其中有一类具有特殊形状的数据流图又被单独划分为事务型。事务型数据流图呈现出的构造特点为:输入流在经过某个被称为“事务中心的加工时被分别为多个发散的输出流,构成多个平行的加工处置途径,如图5.9所示。该类型数据流图所描画的加工过程为:外部数据沿输入通路进入系统后,被送往事务中心;事务中心接纳输入数据并分析确定其类型;最后根据所确定的类型为数据选择其中的一条加工途径。第5章 软件设计 图5.9 事务型数据流图的根本模型事务中心输入流接收路径加工路径第5章 软件设计 5.3.2 5.3.2 面向数据流的体系构造设计过程面向数据流的体系构造设计过程 运用面向数据流的方法进展软件体系

40、构造的设计时,应该运用面向数据流的方法进展软件体系构造的设计时,应该首先对需求分析阶段得到的数据流图进展复查,必要时进展修首先对需求分析阶段得到的数据流图进展复查,必要时进展修正和精化;接着在仔细分析系统数据流图的根底上,确定数据正和精化;接着在仔细分析系统数据流图的根底上,确定数据流图的类型,并按照相应的设计步骤将数据流图转化为软件构流图的类型,并按照相应的设计步骤将数据流图转化为软件构造;最后还要根据体系构造设计的原那么对得到的软件构造进造;最后还要根据体系构造设计的原那么对得到的软件构造进展优化和改良。面向数据流的体系构造设计过程如图展优化和改良。面向数据流的体系构造设计过程如图5.10

41、5.10所示。所示。第5章 软件设计 图5.10 面向数据流的体系构造设计过程事务流变换流精化数据流图区分事务中心、接收路径及加工路径区分变换中心、输入及输出部分映射成事务结构映射成变换结构详细设计根据体系结构设计基本原则优化软件结构导出接口描述和全程数据结构复查事务分析变换分析流类型第5章 软件设计 普通来说,大多数系统的加工问题被表示为变换型,可采用变换分析设计方法建立系统的软件构造,但当数据流图具有明显的事务特点时,那么应采用事务分析技术进展处置。变换分析设计方法与事务分析设计方法类似,都遵照图5.10所示的设计过程,主要差别仅在于由数据流图向软件构造的映射方法不同。对于一个复杂的系统,

42、数据流图中能够既存在变换流又存在事务流,这时该当根据数据流图的主要处置功能,选择一个面向全局的、涉及整个软件系统的总体类型,映射得到系统的整体软件构造。此外,再对部分范围内的数据流图进展详细研讨,确定它们各自的类型并分别处置,得到系统的部分软件构造。第5章 软件设计 1. 1. 变换分析设计变换分析设计 对于变换型的数据流图,应按照变换分析设计的方法建立对于变换型的数据流图,应按照变换分析设计的方法建立系统的构造图。下面以图系统的构造图。下面以图5.115.11所示的工资计算系统数据流图为所示的工资计算系统数据流图为例来引见变换分析建立软件构造的详细步骤。例来引见变换分析建立软件构造的详细步骤

43、。第5章 软件设计 (1) 划分边境,区分系统的输入、变换中心和输出部分。 变换中心在图中往往是多股数据流聚集的地方,阅历丰富的设计人员通常可根据其特征直接确定系统的变换中心。另外,下述方法可协助设计人员确定系统的输入和输出:从数据流图的物理输入端出发,沿着数据流方向逐渐向系统内部挪动,直至遇到不能被看作是系统输入的数据流为止,那么此数据流之前的部分即为系统的输入;同理,从数据流图的物理输出端出发,逆着数据流方向逐渐向系统内部挪动,直至遇到不能被看作是系统输出的数据流为止,那么该数据流之后的部分即为系统的输出;夹在输入和输出之间的部分就是系统的变换中心。工资计算系统的数据流图的划分如图5.11

44、所示。第5章 软件设计 图5.11 进展了边境划分的工资计算系统数据流图奖金发放表缺勤扣款表工资档案F2应发工资表所得税扣款后勤部门水电扣款表工资清单F3实发工资表工资条职工打印工资清单职工个人工资账号清单F4查找职工银行工资账号实发工资银行工资存款清单账号计算出勤奖奖惩条例F1统计出勤、请假及旷工时数人事部门出勤表业绩表计算缺勤扣款计算业绩奖业绩奖出勤奖出勤时数请假及旷工时数基本工资计算各项基本数据之和计算应发工资生成工资存款清单计算所得税计算各项奖金之和计算实发工资第5章 软件设计 (2) 完成第一级分解,设计系统的上层模块。 这一步主要是确定软件构造的顶层和第一层。任何系统的顶层都只含一

45、个用于控制的主模块。变换型数据流图对应的软件构造的第一层普通由输入、变换和输出三种模块组成。系统中的每个逻辑输入对应一个输入模块,完成为主模块提供数据的功能;每一个逻辑输出对应一个输出模块,完成为主模块输出数据的功能;变换中心对应一个变换模块,完成将系统的逻辑输入转换为逻辑输出的功能。工资计算系统的一级分解结果如图5.12所示。第5章 软件设计 工资计算系统取得基本数据计算工资输出计算结果图图5.12 工资计算系统的一级分解工资计算系统的一级分解 第5章 软件设计 (3) 完成第二级分解,设计输入、变换中心和输出部分的中、下层模块。 这一步主要是对上一步确定的软件构造进展逐层细化,为每一个输入

46、、输出模块及变换模块设计下属模块。通常,一个输入模块应包括用于接纳数据和转换数据(将接纳的数据转换成下级模块所需的方式)的两个下属模块;一个输出模块应包括用于转换数据(将上级模块的处置结果转换成输出所需的方式)和传出数据的两个下属模块;变换模块的分解没有固定的方法,普通应根据变换中心的组成情况及模块分解的原那么来确定下属模块。完成二级分解后,工资计算系统的软件构造如图5.13所示(图中省略了模块调用传送的信息)。第5章 软件设计 图5.13 完成二级分解后的工资计算系统软件构造取得水电扣款计算出勤奖、缺勤扣款计算业绩奖计算基本工资读水电扣款表读考勤表读业绩表读工资档案取得基本数据计算应发工资计

47、算实发工资计算奖金之和计算所得税计算工资生成工资存款清单查找职工银行工资账号打印工资清单工资计算系统输出计算结果第5章 软件设计 2. 2. 事务分析设计事务分析设计图5.14 进展了边境划分的事务型数据流图 AEGBCIJKH接收路径事务中心F加工路径 2加工路径 1第5章 软件设计 (1) 划分边境,明确数据流图中的接纳途径、事务中心和加工途径。 事务中心在数据流图中位于多条加工途径的起点,经过事务中心的数据流被分解为多个发散的数据流,根据这个特征很容易在图中找到系统的事务中心。向事务中心提供数据的途径是系统的接纳途径,而从事务中心引出的一切途径都是系统的加工途径,如图5.14中对数据流图

48、的划分。每条加工途径都具有本人的构造特征,能够为变换型,也能够为事务型。如图5.14中,途径1为变换型,途径2为事务型。第5章 软件设计 (2) 建立事务型构造的上层模块。 事务型流图对应的软件构造的顶层只需一个由事务中心映射得到的总控模块;总控模块有两个下级模块,分别是由接纳途径映射得到的接纳模块和由全部加工途径映射得到的调度模块。接纳模块担任接纳系统处置所需的数据,调度模块担任控制下层的一切加工模块。两个模块共同构成了事务型软件构造的第一层。图5.14中,事务型数据流图映射得到的上层软件构造如图5.15所示。第5章 软件设计 图5.15总控接收调度第5章 软件设计 (3) 分解、细化接纳途

49、径和加工途径,得到事务型构造的下层模块。 由于接纳途径通常都具有变换型的特性,因此对事务型构造接纳模块的分解方法与对变换型构造输入模块的分解方法一样。对加工途径的分解应按照每一条途径本身的构造特征,分别采用变换分析或事务分析方法进展分解。经过分解后得到的完好的事务型软件构造如图5.16所示。第5章 软件设计 图5.16 完好的事务型软件构造调度IKJ总控BA事务1事务2EFGH第5章 软件设计 3. 软件构造的改良和优化 为了使最终生成的软件系统具有良好的风格及较高的效率,应在软件的早期设计阶段尽量地对软件构造进展优化。因此在建立软件构造后,软件设计人员需求按照体系构造设计的根本原那么对其进展

50、必要的改良和调整。软件构造的优化应该力求在保证模块划分合理的前提下,减少模块的数量、提高模块的内聚性及降低模块的耦合性,设计出具有良好特性的软件构造。第5章 软件设计 5.4 5.4 详细设计概述详细设计概述5.4.1 5.4.1 详细设计的义务详细设计的义务 详细设计的义务主要有如下五点。详细设计的义务主要有如下五点。 (1) (1) 确定每个模块的详细算法。确定每个模块的详细算法。根据体系构造设计所建立的系统软件构造,为划分的每个模块根据体系构造设计所建立的系统软件构造,为划分的每个模块确定详细的算法,并选择某种表达工具将算法的详细处置过程确定详细的算法,并选择某种表达工具将算法的详细处置

51、过程描画出来。描画出来。 第5章 软件设计 (2) 确定每个模块的内部数据构造及数据库的物理构造。 为系统中的一切模块确定并构造算法实现所需的内部数据构造;根据前一阶段确定的数据库的逻辑构造,对数据库的存储构造、存取方法等物理构造进展设计。 (3) 确定模块接口的详细细节。 按照模块的功能要求,确定模块接口的详细信息,包括模块之间的接口信息、模块与系统外部的接口信息及用户界面等。第5章 软件设计 (4) 为每个模块设计一组测试用例。 由于担任详细设计的软件人员对模块的实现细节非常清楚,因此由他们在完成详细设计后提出模块的测试要求是非常恰当和有效的。 (5) 编写文档,参与复审。 详细设计阶段的

52、成果主要以详细设计阐明书的方式保管下来,在经过复审对其进展改良和完善后作为编码阶段进展程序设计的主要根据。第5章 软件设计 5.4.2 5.4.2 详细设计可采用的工具详细设计可采用的工具 1. 1. 程序流程图程序流程图 程序流程图是最早出现且运用较为广泛的算法表达工具之程序流程图是最早出现且运用较为广泛的算法表达工具之一,可以有效地描画问题求解过程中的程序逻辑构造。程序流一,可以有效地描画问题求解过程中的程序逻辑构造。程序流程图中经常运用的根本符号如图程图中经常运用的根本符号如图5.175.17所示。所示。图5.17 程序流程图中的根本符号(a) 普通处置框;(b) 输入/输出框;(c)

53、判别框;(d) 流程线;(e) 起止框(a)(b)(c)(d)(e)第5章 软件设计 程序流程图的主要优点在于对程序的控制流程描画直观、明晰,运用灵敏,便于阅读和掌握,因此在20世纪40年代末到70年代初被普遍采用。但随着程序设计方法的开展,程序流程图的许多缺陷逐渐暴显露来。这些缺陷主要表达在以下方面: (1) 程序流程图中可以随心所欲地运用流程线,容易呵斥程序控制构造的混乱,与构造化程序设计的思想相违背。第5章 软件设计 (2) 程序流程图难以描画逐渐求精的过程,容易导致程序员过早思索程序的控制流程,而忽略程序全局构造的设计。 (3) 程序流程图难以表示系统中的数据构造。 正是由于程序流程图

54、存在的这些缺陷,越来越多的软件设计人员放弃了对它的运用,而去选择其他一些更有利于构造化设计的表达工具,下面所引见的NS图和PAD图就是其中的两种图形工具。第5章 软件设计 2. NS图 NS图又称为盒图,它是为了保证构造化程序设计而由Nassi和Shneiderman共同提出的一种图形工具。在NS图中,一切的程序构造均运用矩形框表示,它可以明晰地表达构造中的嵌套及模块的层次关系。NS图中,根本控制构造的表示符号如图5.18所示。由于NS图中没有流程线,不能够随意转移控制,因此表达出的程序构造必然符合构造化程序设计的思想,有利于培育软件设计人员的良好设计风格。但当所描画的程序嵌套层次较多时,NS

55、图的内层方框会越画越小,不仅影响可读性而且不易修正。第5章 软件设计 图5.18 NS图中根本控制构造的表示符号顺序构造;(b) 分支构造;(c) 多分支CASE构造;(d) while-do构造;(e) do-until构造;(f) 调用模块A值1值2值nCASE 1部分CASE 2部分CASE n部分CASE条件(c)(b)S1S2IF条件TFS2S1(a)while循环条件while-do部分(d)until条件do-until部分(e)(f)A第5章 软件设计 3. PAD图 PAD(Problem Analysis Diagram,问题分析图)是继程序流程图和NS图后,由日立公司在2

56、0世纪70年代提出的又一种用于详细设计的图形表达工具。它只能用于构造化程序的描画。PAD图采用了易于运用的树型构造图形符号,既利于明晰地表达程序构造,又利于修正。PAD图中所经常运用的根本符号如图5.19所示。第5章 软件设计 图5.19 PAD中根本符号顺序构造;(b) 分支构造;(c) 多分支CASE构造;(d) 当型循环;(e);直到型循环;(f) 对s的细化S1S2(a)S1S2(b)条件TFS1S2(c)CASE值1Sn值2值nSWHILE条件(d)SUNTIL条件(e)S1S2Sn(f)S第5章 软件设计 PAD图具有的主要优点如下: (1) 运用PAD图描画的程序构造层次明晰,逻

57、辑构造关系直观、易读、易记、易修正。 (2) PAD图为多种常用高级言语提供了相应的图形符号, 每种控制语句都与一个专门的图形符号相对应,易于PAD图向高级言语源程序转换。 (3) 支持自顶向下、逐渐求精的设计过程。 (4) 既可以描画程序的逻辑构造,又可以描画系统中的数据构造。第5章 软件设计 是 文 件 结 束 位 置 吗 ?开 始在 工 资 档 案 中 读 一 条 记 录是 文 件 结 束 位 置 吗 ?计 算 工 资 档 案 各 项 基 本 数 据 之 和 并 存 入 paynum 当 前 职 工 号在 奖 金 发 放 表 中 查 找 职 工 号 与 num相 同 的 记 录找 到 了

58、 吗 ?计 算 各 项 奖 金 总 和 并 存 入 bonus应 发 工 资 pay bonus读 下 一 条 记 录YN显 示 错 误NY结 束(a)(b)计 算 工 资 各 项 基 本 数 据 之 和 并 存 入 paynum 当 前 职 工 号在 奖 金 表 中 查 职 工 号 与 num相 同 的 记 录 找 到 了 吗 ?计 算 各 项 奖 金 总 和 并 存 入 bonus应 发 工 资 pay bonus显 示错 误读 下 一 条 记 录TF 在 工 资 档 案 中 读 一 条 记 录在 工 资 档 案 中 读 一 条 记 录当 文 件 没 有 读 完 时计 算 应 发 工 资检

59、 索 个 人 奖 金num 当 前 职 工 号在 奖 金 表 中 查 找 职 工 号 与 num相 同 的 记 录计 算 应 发 工 资显 示 错 误 信 息TF找 到 了 吗 ?读 下 一 条 记 录检 索 个 人 奖 金def计 算 各 项 奖 金 之 和 并 存 入 bonus计 算 工 资 基 本 数 据 项 之 和 并 存 入 pay应 发 工 资 pay bonus计 算 应 发 工 资def(c)图5.20 三种详细设计中运用的图形工具例如采用程序流程图描画计算应发工资模块;(b) 采用NS图描画计算应发工资模块;(c) 采用PAD图描画计算应发工资模块第5章 软件设计 4. P

60、DL言语 PDL (Process Design Language)言语即过程设计言语,是一种用于描画程序算法和定义数据构造的伪代码。PDL言语的构成与用于描画加工的构造化言语类似,是一种兼有自然言语和构造化程序设计言语语法的“混合型言语。自然言语的采用使算法的描画灵敏自在、明晰易懂,构造化程序设计言语的采用使控制构造的表达具有固定的方式且符合构造化设计的思想。PDL言语与构造化言语的主要区别在于:由于PDL言语表达的算法是编码的直接根据,因此其语法构造更加严厉并且处置过程描画更加详细详细。第5章 软件设计 PDL言语的主要特点如下: (1) 各种定义语句及控制构造的表达都具有严厉的语法方式,

温馨提示

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

评论

0/150

提交评论