《软件工程第3章概要设计》由会员分享,可在线阅读,更多相关《软件工程第3章概要设计(99页珍藏版)》请在金锄头文库上搜索。
1、第3章 概要设计3.1 概要设计的任务3.2 设计过程 3.3 设计原理3.4 描绘软件结构的图形工具3.5 启发规则3.6 面向数据流的设计方法实例分析本章小结 任任何何工工程程项项目目,在在生生产产之之前前必必须须要要作作设设计计,正正如如工工程程项项目目一一样样。软软件件编编写写代代码码前前,也也必必须须先先进进行行软软件件设设计计。软件设计是软件开发的关键步骤,直接影响软件的质量。软件设计是软件开发的关键步骤,直接影响软件的质量。在在软软件件需需求求分分析析阶阶段段已已经经完完全全弄弄清清楚楚了了软软件件的的各各种种需需求求,较较好好地地解解决决了了所所开开发发的的软软件件“做做什什么
2、么”的的问问题题,并并已已在在软软件件需需求求说说明明书书和和数数据据要要求求说说明明书书中中详详尽尽和和充充分分地地阐阐明明了了这这些些需需求求以以后后,下下一一步步就就要要着着手手对对软软件件系系统统的的结结构构、数数据据结结构构、用用户户界界面面等等进进行行设设计计,即即软软件件设设计计阶阶段段要要解解决决“怎怎么么做做”的的问问题题,着着手手实实现现软软件件的的需需求求,并并将将设设计计结结果果反反映映在在“设设计计规规格格说说明明书书”文文档档中中。软软件件设设计计是是一一个个把把软软件件需需求求转转换换为为软软件件表表示示的的过过程程,最最初初这这种种表表示示只只是是描描述述了了软
3、软件件的的总总的的体体系系结结构构,子子系系统统和和模模块块的的划划分分,并并确确定定模模块块间间的的接接口口和和评评价价模模块块划划分分质质量量,以以及及进进行行数数据据分分析析,称称软软件件概概要要设设计计或或结结构构设设计计;然然后后对对结结构构进进一一步步细细化化,确确定定每每一一模模块块实实现现的的定定义义,包包括括数数据据结结构、算法和接口,称详细设计或过程设计。构、算法和接口,称详细设计或过程设计。本本章章主主要要介介绍绍软软件件的的概概要要设设计计。第第4章章介介绍绍软软件件的的详细设计。详细设计。 3.1 概要设计的任务3.1.1 3.1.1 概要设计的任务概要设计的任务在概
4、要设计中有以下几个主要任务。在概要设计中有以下几个主要任务。1. 设计软件系统结构设计软件系统结构为为实实现现需需求求规规格格说说明明书书所所确确定定的的目目标标系系统统,首首先先要要进行系统结构设计,具体为:进行系统结构设计,具体为: 采采用用某某种种设设计计方方法法,将将一一个个复复杂杂的的系系统统按按功功能能划分成模块。划分成模块。 确定每个模块的功能。确定每个模块的功能。 确定模块之间的调用关系。确定模块之间的调用关系。 确定模块之间的接口,即模块之间传递的信息。确定模块之间的接口,即模块之间传递的信息。 评价模块结构的质量。评价模块结构的质量。3.1 概要设计的任务软软件件结结构构设
5、设计计以以模模块块为为基基础础,并并组组织织成成模模块块的的层层次次结结构构。软软件件结结构构设设计计是是概概要要设设计计关关键键的的一一步步,直直接接影影响响到到详详细细设设计计与与编编码码的的工工作作。因因此此应应由由经经验验丰丰富富的的软软件件人人员员担担任任,采采用用一一定定的的设设计计方方法法,选选取取合合理理的的设设计计方案。方案。2. 数据结构及数据库设计数据结构及数据库设计在在大大型型数数据据处处理理软软件件开开发发时时,不不仅仅要要进进行行控控制制结结构构的的模模块块设设计计,还还要要进进行行数数据据结结构构与与数数据据库库的的设设计计,具具体包括:体包括:数数据据结结构构设
6、设计计。在在需需求求分分析析阶阶段段,已已经经过过数数据据字字典典对对数数据据组组成成、操操作作约约束束、数数据据之之间间的的关关系系等等进进行行了了描描述述,确确定定了了数数据据的的结结构构特特性性,在在概概要要设设计计阶阶段段还还要要加加以以细细化化,详详细细设设计计阶阶段段则则规规定定具具体体的的实实现现细细节节。在在概概要要设设计计阶阶段段,应应使使用用抽抽象象的的数数据据类类型型,如如“栈栈”是是数数据据结结构构的的概概念念模模型型,在在详详细细设设计计中中可可用用线线性性表表和和链链表来实现。表来实现。3.1 概要设计的任务数数据据库库的的设设计计:指指数数据据存存储储文文件件的的
7、设设计计,主主要要进进行下面几方面设计:行下面几方面设计:概概念念设设计计:采采用用自自底底向向上上的的方方法法从从用用户户角角度度进进行行视视图图设设计计,一一般般用用ER图图模模型型来来表表示示数数据据模模型型。ER模模型型既是设计数据库的基础,也是设计数据结构的基础。既是设计数据库的基础,也是设计数据结构的基础。逻逻辑辑设设计计:ER模模型型是是独独立立于于数数据据库库管管理理系系统统(DBMS)的的,要要结结合合具具体体的的DBMS特特征征来来建建立立数数据据库库的的逻辑结构。逻辑结构。物物理理设设计计:对对不不同同的的DBMS,物物理理环环境境不不同同,提提供供的的存存储储结结构构与
8、与存存取取方方式式各各不不相相同同。物物理理设设计计是是设设计计数数据据模模式式的的一一些些物物理理细细节节,如如数数据据存存储储要要求求、存存取取方方式、索引的建立等。式、索引的建立等。3.1 概要设计的任务3. 编写概要设计文档编写概要设计文档主要内容有:主要内容有: 概要设计说明书。概要设计说明书。 数数据据设设计计说说明明,主主要要介介绍绍所所使使用用的的DBMS简简介介、数据库的概念模型、逻辑设计、结果。数据库的概念模型、逻辑设计、结果。 用用户户手手册册:对对需需求求分分析析阶阶段段编编写写的的用用户户手手册册进进行补充。行补充。 修修订订测测试试计计划划,对对测测试试策策略略、方
9、方法法、步步骤骤提提出出明确要求。明确要求。4. 评审评审对对设设计计部部分分是是否否完完整整地地实实现现需需求求中中规规定定的的功功能能、性性能能等等要要求求,设设计计方方案案的的可可行行性性,关关键键的的处处理理及及内内外外部部接接口口定定义义正正确确性性、有有效效性性,各各部部分分之之间间的的一一致致性性等等都都一一评审。一一评审。3.1 概要设计的任务3.1.2 3.1.2 概要设计说明书的主要内容概要设计说明书的主要内容概概要要设设计计说说明明书书又又称称系系统统设设计计说说明明书书,它它是是概概要要设设计计阶阶段段结结束束时时提提交交的的技技术术文文档档,为为详详细细设设计计提提供
10、供基基础础,其主要内容如下:其主要内容如下:1. 引言:编写目的,项目背景,定义,参考资料。引言:编写目的,项目背景,定义,参考资料。2. 任任务务概概述述:目目标标,运运行行环环境境,需需求求概概述述,条条件件与限制。与限制。3. 概概要要设设计计:处处理理流流程程,总总体体结结构构和和模模块块外外部部设设计,功能分配。计,功能分配。3.1 概要设计的任务4. 接口设计:用户界面,外部接口,内部接口。接口设计:用户界面,外部接口,内部接口。5. 数数据据结结构构设设计计:逻逻辑辑结结构构设设计计,物物理理结结构构设设计计,数据结构与程序的关系。数据结构与程序的关系。6. 运运行行设设计计:运
11、运行行模模块块的的组组合合,运运行行控控制制,运运行行时间。时间。7. 出错处理设计:出错输出信息,出错处理对策。出错处理设计:出错输出信息,出错处理对策。8. 安全保密设计和维护设计。安全保密设计和维护设计。3.2 设计过程在在概概要要设设计计阶阶段段,首首先先要要找找出出实实现现目目标标系系统统的的各各种种可可能能方方案案,然然后后从从这这些些方方案案中中选选取取合合理理的的方方案案并并推推荐荐出出最最佳佳实实施施方方案案。接接下下来来为为最最终终方方案案制制定定详详细细的的计计划划及及设设计计软软件件结结构构、进进行行必必要要的的数数据据库库设设计计和和制制定定测测试计划。具体过程如下。
12、试计划。具体过程如下。1. 设想供选择的方案设想供选择的方案软软件件分分析析员员根根据据系系统统要要求求,提提出出并并分分析析各各种种可可能能的的方方案案,并并且且从从中中选选出出最最佳佳的的方方案案,为为以以后后的的工工作作做做好准备。好准备。3.2 设计过程首首先先需需求求分分析析阶阶段段得得出出的的数数据据流流图图是是概概要要设设计计的的根根本本出出发发点点。数数据据流流图图中中的的处处理理可可以以逻逻辑辑地地进进行行分分组组,每每一一组组都都代代表表不不同同的的实实现现策策略略。然然后后对对这这些些分分组组得得出出的的方方案案进进行行分分析析,产产生生一一系系列列可可供供选选择择的的方
13、方案案。最最后后结结合合实实际际因因素素,如如工工程程的的目目标标、规规模模和和用用户户的的意意见见等等,从从可可能能的的实实现现方方案案中中选选取取若若干干个个合合理理的的方方案案。通通常常,选选取取的的这这些些方方案案中中应应包包括括低低成成本本、中中成成本本和和高高成成本本三三种种方方案案。对对每每个个方方案案需需提提供供系系统统流流程程图图、数数据据字字典典、成本效益分析、实现系统的进度计划。成本效益分析、实现系统的进度计划。3.2 设计过程2. 选取最佳的方案选取最佳的方案分分析析员员对对每每个个合合理理方方案案综综合合权权衡衡,比比较较各各自自优优缺缺点点,选选择择一一个个最最佳佳
14、方方案案向向用用户户推推荐荐,并并做做出出详详细细的的实实现进度计划。现进度计划。对对于于分分析析员员提提交交的的最最佳佳方方案案,用用户户和和有有关关技技术术专专家家认认真真地地进进行行审审查查。如如果果确确认认该该方方案案确确实实符符合合需需要要且且在在现现有有的的条条件件下下能能够够实实现现,进进一一步步提提交交给给使使用用部部门门负负责责人人审审批批,审审批批接接受受分分析析员员推推荐荐的的最最佳佳实实施施方方案案后后,才能进入结构设计阶段。才能进入结构设计阶段。3.2 设计过程3. 功能分解功能分解为为确确定定软软件件的的结结构构,首首先先要要把把复复杂杂的的系系统统功功能能分分解解
15、成成简简单单的的功功能能,确确定定软软件件系系统统都都由由哪哪些些模模块块组组成成,以以及及这这些些模模块块间间的的相相互互关关系系。同同时时进进一一步步细细化化数数据据流流图图。分分解解后后,分分析析员员使使用用层层次次图图或或结结构构图图来来描描述述模模块块组组织织成成的的层层次次结结构构,实实现现由由上上层层向向下下层层的的调调用用,最最下下层的模块完成具体的功能。层的模块完成具体的功能。4. 设计软件结构设计软件结构设设计计软软件件结结构构是是概概要要设设计计阶阶段段的的核核心心工工作作。主主要要应应用用软软件件设设计计的的概概念念和和原原理理,采采用用面面向向数数据据流流的的设设计计
16、方法方法(结构化设计方法结构化设计方法SD)将软件划分层次和结构。将软件划分层次和结构。3.2 设计过程通通常常程程序序中中的的一一个个模模块块完完成成一一个个适适当当的的功功能能,应应该该把把模模块块组组织织成成良良好好的的层层次次系系统统,顶顶层层模模块块调调用用它它的的下下层层模模块块以以实实现现程程序序的的完完整整功功能能,每每个个下下层层模模块块再再调调用用更更下下层层的的模模块块,从从而而完完成成程程序序的的一一个个子子功功能能,最最下下层层的的模模块块完完成成最最具具体体的的功功能能。如如果果数数据据流流图图已已细细化化到到了了适适当当的的层层次次,则则可可以以直直接接从从数数据
17、据流流图图中中映映射射出出软软件件结构。结构。5. 数据库设计数据库设计应应用用所所学学的的数数据据库库知知识识,对对软软件件系系统统进进行行数数据据库库设设计计。根根据据数数据据要要求求,分分析析员员对对需需要要使使用用数数据据库库应应用用的的领领域域,进进一一步步做做数数据据库库的的模模块块设设计计。数数据据库库设设计计主主要要包包括括模模式式设设计计、子子模模式式设设计计、完完整整性性与与安安全全性性设设计计、改进与优化处理等。改进与优化处理等。3.2 设计过程在在设设计计中中,还还要要包包括括代代码码设设计计。代代码码设设计计是是为为了了操操作作方方便便,为为了了区区别别唯唯一一实实体
18、体引引入入的的字字段段。代代码码设设计计首首先先要要考考虑虑是是否否已已有有国国家家标标准准、行行业业标标准准、部部门门标标准准、企业标准,如果没有相关标准,可考虑重新设计代码。企业标准,如果没有相关标准,可考虑重新设计代码。代代码码的的长长度度,既既要要保保证证代代码码具具有有可可扩扩充充性性,又又要要作作到到代代码码尽尽可可能能短短小小精精悍悍。代代码码中中可可包包含含属属性性,属属性性应应当当是是稳稳定定的的。代代码码的的校校验验,主主要要校校验验方方法法有有:带带校校验验位位的的代代码码校校验验方方法法,代代码码库库检检索索校校验验方方法法,常常用用校校验验方方法法的的综综合合运运用用
19、和和类类型型校校验验、长长度度校校验验、取取值值范范围围的校验等。的校验等。3.2 设计过程6. 制定测试计划制定测试计划在在软软件件开开发发的的早早期期阶阶段段考考虑虑测测试试问问题题,能能促促使使软软件件设设计计人人员员在在设设计计时时注注意意提提高高软软件件的的可可测测试试性性。在在后后面的章节中将详细地介绍软件测试的有关内容。面的章节中将详细地介绍软件测试的有关内容。7. 书写文档书写文档应应该该用用正正式式的的文文档档记记录录概概要要设设计计的的结结果果,在在这这个个阶阶段段应应该该完完成成的的文文档档有有:系系统统说说明明、用用户户手手册册、测测试试计划、详细的实现计划、数据库设计
20、结果等。计划、详细的实现计划、数据库设计结果等。8. 审查和复审审查和复审最最后后,对对概概要要设设计计的的结结果果进进行行严严格格的的技技术术审审查查,并并在在技技术术审审查查通通过过之之后后再再由由使使用用部部门门的的负负责责人人从从管管理理的角度进行复审。的角度进行复审。3.3 设计原理3.3.1 模块化软件结构是软件模块之间关系的表示,它决定了整个系统的结构,也确定了系统的质量。那么何为模块?模块在程序中是数据说明、可执行语句等程序对象的集合,或是单独命名和编址的元素,如高级语言中的过程、函数、子程序等。在软件的体系结构中,模块是可组合、分解和更换的单元。模块具有以下几种基本属性:接口
21、:指模块的输入与输出。功能:指模块实现什么功能。逻辑:描述内部如何实现要求的功能及所需的数据。状态:该模块的运行环境,即模块的调用与被调用关系。3.3 设计原理其中功能、状态与接口反映模块外部特性,逻辑反映内部特性。模块化指解决一个复杂问题时自顶向下逐层把软件系统划分成若干模块的过程。每个模块完成一个特定的子功能,所有的模块按某种方法组装起来,成为一个整体,完成整个系统所要求的功能。模块化是解决软件复杂问题的一种手段。下面根据人类解决问题的一般规律,描述上面所提出的结论。定义两个函数C(X)和E(X):C(X)表示问题X 的复杂程度;E(X)表示解决问题X 所需要的工作量(时间)。对于两个问题
22、P1 和P2,如果C(P1) C(P2) 即P1比P2复杂3.3 设计原理则E(P1) E(P2) 即问题越复杂,解决问题所需要的工作量越大又因为根据人类解决一般问题的经验,规律是:C(P1+P2) C(P1) + C(P2)即由P1和P2两个问题组合成的一个问题的复杂程度大于分别考虑每个问题时的复杂程度之和。这样,综合以上结论,可以得到不等式E(P1+P2) E(P1) + E(P2)3.3 设计原理即单独解决问题P1和P2所需的工作量之和比把P1和P2组合成一个问题来解决时所需的工作量要少。这正是模块化提出的根据:把复杂问题分解成许多容易解决的小问题,提高了工作效率。但是,模块化设计并不意
23、味着无限地划分模块。开发软件过程中,为了追求较少的工作量使模块数目增加,确实使每个模块的规模减少,但随着模块数目的增加,设计各模块间接口所需的工作量也将增加。因此,每个程序都相应地有一个最适当的模块数目M,才能使系统的开发成本最小,如图3-1描述了模块化与软件成本的关系。3.3 设计原理图3- 1 模块化与软件成本的关系3.3 设计原理3.3.2 3.3.2 抽象与逐步求精抽象与逐步求精人类认识现实世界中的事物是复杂多样的,但事物之间也有相似的方面,若我们在考虑问题时,把事物之间的共性集中和概括起来,而忽略它们之间的差异,这就是抽象,即抽出事物的本质特性而暂时不考虑它们的细节。抽象的思想在软件
24、开发中起着重要作用。面对复杂的动态系统,处理的有效方法就是用层次的方式构造和分析它。用模块化设计的思想来解决问题时,可以提出不同层次的抽象。在抽象的最高层,使用问题环境的语言,以概括的方式叙述问题的解法;在抽象的较底层,采用更过程化的方法,把面向问题的术语和面向实现的术语结合起来叙述问题的解法;最后,在抽象的最底层,可以用直接实现的方式来叙述问题的解法。3.3 设计原理软件工程过程的每一阶段都是对软件解法的一次求精。如可行性研究阶段是对软件的最高层次抽象,软件作为系统的一个完整部件;在需求分析期间,使用在问题环境内熟悉的方式描述;当由概要设计向详细设计过渡时,抽象的程度随之减少;最后,当源程序
25、写出来以后,也就达到了最底层。逐步求精由Wirth提出的一种设计策略,他对逐步求精策略曾做过如下的说明:3.3 设计原理“我们对付复杂问题的最重要的办法是抽象,因此,对一个复杂的问题不应该立刻用计算机指令、数字和逻辑符号来表示,而应该用较自然的抽象语句来表示,从而得出抽象程序。抽象程序对抽象的数据进行某些特定的运算并用某些合适的记号(可能是自然语言)来表示。对抽象程序做进一步的分解,并进入下一个抽象层次,这样的精细化过程一直进行下去,直到程序能被计算机接受为止。这时的程序可能是用某种高级语言或机器指令书写的。”随着软件开发工程的进展,在软件结构每一层中的模块,表示了对软件抽象层次的一次细化。层
26、次结构的上一层是下一层的抽象,下一层是上一层的求精。通过逐步分解对功能的宏观陈述而开发出层次结构,直至最终得出用程序设计语言表达的程序。所以说,逐步求精与抽象是一致的。3.3 设计原理例如要开发一个CAD软件,能够实现绘图系统的全部功能,供初级CAD使用。下面在不同的抽象层次,应用不同的描述方法对该问题进行抽象和细化。抽象层次l:用问题所处环境的术语描述这个软件。该软件系统具有一个可视化绘图界面以及一个数字化仪界面。能用鼠标代替绘图工具画出各种曲线和直线,能完成几何计算和截面视图及辅助视图的设计,能将图形设计结果存于图形文件中。3.3 设计原理抽象层次2:任务需求描述。CAD 软件任务 用户界
27、面任务; 创建二维图形任务; 显示图形任务; 管理图形任务END CAD在此抽象层次上,所用术语不再是问题所处环境的语言,但并没有给出如何做的信息,不能直接实现。3.3 设计原理抽象层次3:程序过程表示。下面以二维图形任务为例进行说明。PROCEDURE 创建二维图形 REPEAT WHILE 出现与数字仪的交互时 数字仪接口任务; 判断作图请求; 线:画线任务; 圆;画圆任务; END WHILE; 3.3 设计原理 WHILE 出现与键盘的交互时 键盘接口任务; 选择分析或计算; 辅助视图:辅助视图任务; 截面视图:截面视图任务; END WHILE; UNTIL 创建图形任务终止END
28、PROCEDURE在这一抽象层次上,给出了初步过程表示,所有的术语都是面向软件,并且模块结构也开始明朗细化过程可进行下去,直到获得源代码。3.3 设计原理3.3.3 信息隐蔽信息隐蔽指在设计和确定模块时,使得一个模块内包含的信息(过程或数据),对于不需要这些信息的其他模块来说,是不可访问的。通过抽象,可确定组成软件的过程实体;通过隐蔽,可定义和实施对模块的过程细节和局部数据结构的存取限制。有效的模块化通过一组相互独立的模块来实现,这些独立的模块彼此之间仅仅交换那些为了完成系统功能所必须的信息,而将那些自身的实现细节与数据“隐藏”起来。3.3 设计原理信息隐蔽为软件系统的修改、测试及以后的维护带
29、来好处。在划分模块时要采取措施,如采用局部数据结构,使得大多数过程(即实现细节)和数据对软件的其他部分是隐藏的。这样修改软件时偶然引入的错误所造成的影响只局限在一个或少量几个模块内部。局部化的概念和信息隐蔽概念是密切相关的。局部化是指把一些关系密切的软件元素在物理位置上彼此靠近。在模块中使用局部数据元素就是局部化的一个例子。局部化有利于实现信息隐蔽。3.3 设计原理3.3.4 模块独立性模块独立性指每个模块只完成系统要求的独立的子功能,并且与其他模块的联系最少且接口简单。模块独立性概念是模块化、抽象、信息隐蔽这些软件工程基本原理的直接产物。只有符合和遵守这些原则才能得到高度独立的模块。良好的模
30、块独立性能使开发的软件具有较高的质量。模块独立性强,则信息隐蔽性好,并完成独立的功能,且它的可理解、可维护性、可测试性好,导致软件的可靠性高。根据模块的外部特征和内部特征,衡量软件独立的两个定性指标是:耦合性和内聚性。3.3 设计原理1. 耦合性:也称块间联系,指软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,耦合性越强,模块的独立性则越差。模块间耦合高低取决于模块间接口的复杂性、调用的方式及传递的信息。模块的耦合性有以下几种类型: 非直接耦合:指两个模块之间没有直接的关系,它们分别从属于不同模块的控制与调用,它们之间不传递任何信息。因此耦合性最弱,独立性最高。 数据耦合
31、:指两个模块之间有调用关系,传递的是简单的数据值,相当于高级语言的值传递。耦合程度较低,模块的独立性较高。3.3 设计原理 标记耦合:指两个模块间传递的是数据结构,如高级语言的数组名、记录名、文件名等这些名字即为标记。两个模块必须清楚这些数据结构,并按要求对其进行操作,降低了可理解性。可采用“信息隐蔽”方法,把该数据结构及在其上的操作全部集中在一个模块,就可清除这种耦合。 控制耦合:如果模块传递的信息中有控制信息,就称作控制耦合,指一个模块调用另一个模块时,传递的是控制变量(如开关、标志等),被调模块通过该控制变量的值有选择地执行块内某一功能,如图3-2所示。这种耦合的实质是在单一接口上选择多
32、功能模块中的某项功能。因此,对被控制模块的任何修改,都会影响控制模块。控制耦合属于中等程度的耦合,它增加了系统的复杂程度。3.3 设计原理图3- 2 控制耦合3.3 设计原理 外部耦合:如果一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息,则称为外部耦合。公共耦合:指通过一个公共数据环境相互作用的那些模块间的耦合。公共数据环境可以是全程变量或数据结构、共享的通信区、内存的公共覆盖区及存储介质上的文件、物理设备等。公共耦合复杂程度随耦合模块的个数增加而增加。如只有两个模块之间有公共数据环境,这种公共耦合有两种情况:3.3 设计原理一个模块只给公共数据环
33、境送数据,另一模块只从公共环境中取数据,这是数据耦合的一种形式,是比较松散的公共耦合。两个模块都既往公共数据环境送数据,又从里面取数据,这是紧密的数据耦合。公共耦合会引起以下问题:耦合的复杂程度随模块个数增加而增加,无法控制各个模块对公共数据的存取,如某个模块有错,通过公共区将错误延伸到其他模块,影响软件的可靠性。使软件的可维护性变差,若一模块修改了公共区数据,会影响到与此有关的所有模块。降低软件的可理解性,某些数据被哪些模块共享,不易搞清。3.3 设计原理 内容耦合:是最高程度耦合,也是最差的耦合。如图3-3所示,内容耦合的模块常具有以下特征:一个模块直接访问另一模块的内部数据,一个模块不通
34、过正常入口转到另一模块的内部,一个模块有多个入口或者两个模块有部分代码重迭。图3- 3 内容耦合3.3 设计原理以上7 种耦合之间的关系如图3-4 所示。图3- 4 7种耦合类型的关系3.3 设计原理为降低模块间的耦合度,可采取如下措施:在耦合方式上降低模块间接口的复杂性。接口复杂性包括模块的接口方式、接口信息的结构和数量。接口方式不采用直接引用(内容耦合),而采用调用方式。接口信息通过参数传递且传递信息的结构尽量简单,不用复杂参数结构(如过程、指针等类型参数),参数个数不宜过多。在传递信息类型上尽量使用数据耦合,避免控制耦合,慎用公共耦合。3.3 设计原理2. 内聚性:又称块内联系,指模块的
35、功能强度的度量,即一个模块内部各个元素彼此结合的紧密程度的度量。若一个模块内各元素(语句间、程序段间)联系的越紧密,它的内聚性越高,内聚性有下面几种类型: 偶然内聚:指一个模块内各处理元素之间没有任何联系。这样的模块不易理解也不易修改,是最差的内聚情况。 逻辑内聚:指模块内执行几个逻辑上相似的功能,通过参数确定该模块完成哪一个功能。这种模块内聚程度有所提高,各部分间在功能上有相互关系,但不易修改,当某个调用模块要求修改此模块公用代码时,另一些模块又不要求修改。另外,调用时需要进行控制参数的传递,造成控制耦合;调用此模块时,不用的部分也占据内存,降低系统效率。3.3 设计原理 时间内聚:把需要同
36、时执行的动作组合在一起形成的模块为时间内聚模块。如初始化一组变量,同时打开若干文件等。时间内聚比逻辑内聚程度高一些,但这样的模块和其他模块耦合程度较高。 过程内聚:如果一个模块内的处理是相关的,而且必须以特定次序执行,则称为过程内聚。使用程序流程图作为工具设计程序时,常常通过流程图来确定模块的划分,这样得到的就是过程内聚模块。它相对时间内聚的程度更强一些,但由于仅仅为完整功能的一部分,所以内聚程度仍比较低。3.3 设计原理 通信内聚:指模块内所有处理元素都在同一个数据结构上操作(有时称信息内聚),或指各处理使用相同的输入数据或产生相同的输出数据。如一个模块完成:生产日报表、周报表、月报表,都使
37、用同一数据即日产量。通信内聚的内聚性要高于前种类型,同时可把某一数据结构、文件等操作放在一个模块内,达到信息隐藏。 顺序内聚:指一个模块中各个处理元素都密切相关于同一功能且必须顺序执行,前一功能元素的输出是下一功能元素的输入。 功能内聚:是最强的内聚,指模块内所有元素共同完成一个功能,缺一不可。因此模块不能再分割。功能内聚的模块易理解、易修改,它的功能是明确的、单一的,与其他模块的耦合是弱的。功能内聚的模块有利于实现软件的重用,提高软件开发的效率。3.3 设计原理以上以上7 种内聚之间的关系如图种内聚之间的关系如图3-5所示。所示。图3- 5 7种内聚类型的关系耦耦合合性性与与内内聚聚性性是是
38、模模块块独独立立性性的的两两个个定定性性标标准准,将将软软件件系系统统划划分分模模块块时时,尽尽量量做做到到高高内内聚聚低低耦耦合合,提提高模块独立性,为设计高质量的软件结构奠定基础。高模块独立性,为设计高质量的软件结构奠定基础。3.4 描绘软件结构的图形工具3.4.1 软件结构图软件结构图是Yourdon提出的进行软件结构设计的有力工具。图中一个方块代表一个模块,框内注明模块的名字或主要功能;方框之间的箭头(或直线)表示模块的调用关系。一般可表示为层次结构,如图3-6所示。3.4 描绘软件结构的图形工具图3- 6 软件结构示意图3.4 描绘软件结构的图形工具衡量软件结构的有关指标有:深度:表
39、示软件结构中从顶层模块到最底层模块的层数;宽度:表示一层中最大的模块个数;扇出数:指一个模块直接控制下属的模块个数;扇入数:指一个模块的直接上属模块个数。3.4 描绘软件结构的图形工具软件结构图的主要内容有:1. 模块:用矩形框表示,框中写有模块的名字,说明模块的功能。模块是程序对象有名字的集合。例如:过程、函数、子程序、宏等。软件结构图中主要的模块有四类,分别是传入模块、传出模块、变换模块和协调模块。传入模块从下级模块获得数据经过处理传递到上级模块。传出模块从上级模块获得数据经过处理传递到下级模块。变换模块主要实现变换处理。协调模块对所有下级模块进行协调和管理,如图3-7所示。3.4 描绘软
40、件结构的图形工具图3- 7 四种模块画法3.4 描绘软件结构的图形工具2. 调用:从一个模块指向另一个模块的箭头表示前一模块对后一模块的调用,一般是上层调用下层。图3-8表示模块1 调用了模块2 和模块3。3. 数据:调用箭头边上的小箭头表示调用时从一个模块传送给另一模块的数据。通常在短箭头附近应注有信息的名字,如图3-8所示。3.4 描绘软件结构的图形工具图3- 8 模块及模块调用3.4 描绘软件结构的图形工具数据又分为数据信息和控制信息两类,如果要区分这两类信息,通常可用尾端带有空心圆的短箭头表示数据信息,用尾端带有实心圆的短箭头表示控制信息,如图3-9所示。有的结构图对这两种信息不加以区
41、别,一律用注有信息名的短箭头“”来表示(如图3-8)。图3-9是模块间接口的表示。图3- 9 模块间接口的表示3.4 描绘软件结构的图形工具为了进一步描述模块之间的调用关系,还可使用两种辅助符号,分别表示条件选择和循环。如在图3-10 中,模块A 有条件地调用另一个模块B 时(或者模块C、D),在模块A 的箭头尾部标以一个菱形符号,表示条件选择。当一个模块A 反复地调用模块B、模块C 和模块D 时,在调用箭头尾部则标以一个弧形符号表示循环。如图3-10 所示,在结构图中这种条件调用所依赖的条件和循环调用所依赖的循环控制条件通常无需注明。3.4 描绘软件结构的图形工具图3- 10 辅助符号3.4
42、 描绘软件结构的图形工具3.4.2 层次图层次图也称HIPO(Hierarchy Plus Input/Processing/Output)图,是美国IBM公司发展起来的表示软件系统结构的工具,适用于描绘软件的层次结构,特别适合于在自顶向下设计时使用。它既可描述软件总的模块层次结构H图(层次图),又可描述每个模块输入/输出数据、处理功能及模块调用的详细情况IPO图(输入/处理/输出图)。HIPO图以模块分解的层次性及模块内部输入、处理、输出三大基本部分为基础建立的。1. HIPO图的H图用于描述软件的层次结构,矩形框表示一个模块,矩形框间的直线表示模块之间的调用关系,不指明调用顺序。图3-11
43、为销售系统的HIPO图。3.4 描绘软件结构的图形工具图3- 11 销售系统的HIPO图3.4 描绘软件结构的图形工具2. IPO图H图只说明软件系统由哪些模块及其控制层次结构,未说明模块间信息传递及模块内部的处理。对一些重要模块还必须根据数据流图、数据字典及H图绘制具体的IPO图。IPO图左边的框中列出了有关的输入数据,中间的框内列出了主要的处理,右边框内列出产生的输出数据,处理框中列出的处理次序暗示了执行次序,各个框间用箭头指出数据通信的情况。图3-12是一个IPO的示例。3.4 描绘软件结构的图形工具这里建议使用一种改进的IPO图(也称为IPO表),这种图中包含某些附加的信息,在软件设计
44、过程中很有用。使用方法如图3-13所示。图3- 12 IPO图的示例3.4 描绘软件结构的图形工具HIPO图上无过多符号显得较清晰易读,作为概要设计的文档比较合适。在反映软件结构控制关系方面,如重复调用、选择调用、调用公共模块及重要模块间信息传递,使用结构图能较好地表达出来,有利于评价系统结构质量。图3- 13 改进后的IPO图示例3.5 启发规则人人们们在在开开发发软软件件的的实实践践过过程程中中累累积积了了丰丰富富的的经经验验,总总结结成成一一些些启启发发式式准准则则,可可以以帮帮助助设设计计人人员员设设计计出出高高质质量的软件。主要有以下几点规则。量的软件。主要有以下几点规则。1. 提高
45、模块独立性提高模块独立性设设计计出出软软件件的的初初步步结结构构以以后后,通通过过模模块块的的分分解解或或合合并并,力力求求降降低低耦耦合合提提高高内内聚聚,从从而而提提高高模模块块独独立立性性。对对各各个个模模块块公公共共的的部部分分提提取取出出来来生生成成一一个个单单独独的的高高内内聚聚模模块块;也也可可通通过过分分解解或或合合并并模模块块以以减减少少控控制制信信息息的的传传递递及及对全局数据的引用,降低接口的复杂程度。对全局数据的引用,降低接口的复杂程度。2. 选择合适的模块规模选择合适的模块规模限限制制模模块块的的规规模模也也可可以以降降低低复复杂杂性性。通通常常规规定定一一个个模模块
46、块最最好好以以一一页页纸纸为为限限(约约50100行行语语句句),这这便便于于程程序序的的阅阅读读和和理理解解。对对于于过过大大或或过过小小的的模模块块能能否否进进一一步步分分解解或或合合并并,还还应应根根据据具具体体情情况况而而定定,关关键键要要保保证证模模块块的的独立性。独立性。3.5 启发规则3. 适当选择模块的深度、宽度、扇入和扇出适当选择模块的深度、宽度、扇入和扇出深深度度标标志志一一个个系系统统的的大大小小和和复复杂杂程程度度。如如果果层层数数过过多,则对于某些简单模块考虑适当合并。多,则对于某些简单模块考虑适当合并。一般来说,宽度越大系统越复杂。一般来说,宽度越大系统越复杂。如如
47、果果扇扇出出太太大大,意意味味着着模模块块过过于于复复杂杂,缺缺少少中中间间层层次次,可可增增加加中中间间层层次次的的控控制制模模块块;如如果果扇扇出出过过小小,可可以以把把下下级级模模块块进进一一步步分分解解或或把把它它合合并并到到上上一一级级模模块块中中去去。通常,一个设计得好的系统平均扇出是通常,一个设计得好的系统平均扇出是3 或或4。扇扇入入越越大大意意味味着着共共享享该该模模块块的的上上级级模模块块数数目目越越多多,这这是是有有好好处处的的,但但不不能能一一味味强强调调高高扇扇入入而而违违背背模模块块独独立立性原则。性原则。经经验验表表明明,优优秀秀的的软软件件结结构构通通常常顶顶层
48、层扇扇出出高高,中中层层扇出较少,底层扇入到公共的实用模块中去。扇出较少,底层扇入到公共的实用模块中去。3.5 启发规则4. 模块的作用范围应在控制范围之内模块的作用范围应在控制范围之内模模块块的的控控制制范范围围包包括括它它本本身身以以及及所所有有直直接接或或间间接接的的下下属属模模块块。模模块块的的作作用用范范围围是是指指模模块块内内一一个个判判定定影影响响的的所所有有模模块块的的集集合合。例例如如,在在图图3-12 中中模模块块A 的的控控制制域域是是A、B、C、D、E、F 模块。模块。图图3- 14 模块的作用范围和控制范围模块的作用范围和控制范围3.5 启发规则在在一一个个设设计计良
49、良好好的的系系统统模模块块结结构构图图中中,所所有有受受一一个个判判定定影影响响的的模模块块应应该该都都从从属属于于该该判判定定所所在在的的模模块块,最最好好局局限限于于做做出出判判定定的的那那个个模模块块本本身身及及它它的的直直接接下下属属模模块块。例例如如,如如果果图图3-12中中,模模块块A 做做出出的的判判定定只只影影响响模模块块B,那那么么是是符符合合这这条条规规则则的的,但但是是,如如果果模模块块A做做出出的的判判定定同同时时还还影影响响模模块块G 中中的的处处理理过过程程,这这样样的的结结构构就就难难于于理理解解。为为了了使使A 中中的的判判定定能能够够影影响响G 中中的的处处理
50、理过过程程,通通常常需需要要在在A中中给给一一个个标标记记设设置置状状态态以以指指示示判判定定的的结结果果,并并且且应应该该把把这这个个标标记记传传递递给给A和和G的的公公共共上上级级模模块块M,再再由由M 传传给给G。这这个个标标记记是是控控制制信信息息而而不不是是数数据据,因因此此将使模块间出现控制耦合。将使模块间出现控制耦合。3.5 启发规则修修改改软软件件结结构构使使作作用用域域成成为为控控制制域域的的子子集集,一一个个方方法法是是把把做做判判定定的的点点往往上上移移,例例如如,把把判判定定从从模模块块A中中移移到到模模块块M中中;另另一一个个方方法法是是把把那那些些在在作作用用域域内
51、内但但不不在在控控制制域域内内的的模模块块移移到到控控制制域域内内,例例如如,把把模模块块G 移移到到模模块块A的下面,成为它的直属下级模块。的下面,成为它的直属下级模块。采采用用哪哪种种方方法法改改进进软软件件结结构构需需要要根根据据具具体体问问题题统统筹筹考考虑虑。一一方方面面应应该该考考虑虑哪哪种种方方法法更更现现实实,另另一一方方面面应应该该使软件结构能更好地体现问题原来的结构。使软件结构能更好地体现问题原来的结构。3.5 启发规则5. 降低模块接口的复杂程度降低模块接口的复杂程度模模块块接接口口的的设设计计非非常常重重要要,往往往往影影响响程程序序的的可可读读性性。接接口口复复杂杂也
52、也是是软软件件发发生生错错误误的的一一个个主主要要原原因因,而而高高耦耦合合或或低低内内聚聚是是接接口口复复杂杂的的主主要要原原因因,应应仔仔细细设设计计模模块块接接口口,使得接口间的信息传递简单并且和模块的功能一致。使得接口间的信息传递简单并且和模块的功能一致。3.5 启发规则6. 设计单入口单出口且功能可预测的模块设计单入口单出口且功能可预测的模块设设计计人人员员为为了了防防止止出出现现内内容容耦耦合合,设设计计的的模模块块应应都都是是单单入入口口单单出出口口模模块块,即即从从顶顶部部进进入入并并且且从从底底部部退退出出,这样的软件不但容易理解而且便于维护。这样的软件不但容易理解而且便于维
53、护。一一个个功功能能可可预预测测的的模模块块可可以以当当作作一一个个“黑黑盒盒子子”,不不论论内内部部处处理理细细节节如如何何,对对相相同同的的输输入入数数据据就就会会产产生生同同样样的的输输出出。带带内内部部存存储储器器的的模模块块由由于于它它的的输输出出可可能能取取决决于于内内部部存存储储器器的的状状态态,这这样样的的模模块块就就可可能能是是不不可可预预测测的的,调用者无法控制它的执行,最终会造成混乱。调用者无法控制它的执行,最终会造成混乱。以以上上这这些些准准则则对对于于设设计计出出好好的的软软件件有有着着重重要要的的参参考考价值,应在实践中根据具体情况灵活运用。价值,应在实践中根据具体
54、情况灵活运用。 3.6 面向数据流的设计方法面面向向数数据据流流的的设设计计是是以以需需求求分分析析阶阶段段产产生生的的数数据据流流图图为为基基础础,按按一一定定的的步步骤骤映映射射成成软软件件结结构构,因因此此又又称称结结构构化化设设计计(Structured Design,简简称称SD)。该该方方法法由由美美国国IBM公公司司L.Constantine和和E.Yourdon等等人人于于1974年年提提出出,与与结结构构化化分分析析(SA)衔衔接接,构构成成了了完完整整的的结结构构化化分分析与设计技术,是目前使用最广泛的软件设计方法之一。析与设计技术,是目前使用最广泛的软件设计方法之一。面面
55、向向数数据据流流的的设设计计方方法法,是是基基于于描描绘绘信信息息流流动动和和处处理理的的数数据据流流图图(DFD),从从数数据据流流图图出出发发,根根据据数数据据流流特特性,划分软件模块,建立软件结构的。性,划分软件模块,建立软件结构的。3.6 面向数据流的设计方法数数据据流流的的特特性性主主要要有有两两种种,一一种种是是变变换换流流,一一种种是是事务流。事务流。信信息息沿沿输输入入通通路路进进入入系系统统,同同时时由由外外部部形形式式变变换换成成内内部部形形式式,进进入入系系统统的的信信息息通通过过变变换换中中心心,经经加加工工处处理理以以后后再再沿沿输输出出通通路路变变换换成成外外部部形
56、形式式离离开开系系统统,当当数数据据流流图具有这些特征时,这种信息流叫变换流。图具有这些特征时,这种信息流叫变换流。变变换换型型数数据据流流图图是是一一个个线线性性结结构构,由由输输入入、中中心心变变换和输出三部分组成,如图换和输出三部分组成,如图3-15所示。所示。3.6 面向数据流的设计方法数数据据沿沿输输入入通通路路到到达达一一个个处处理理,这这个个处处理理根根据据输输入入数数据据的的类类型型在在若若干干个个动动作作序序列列中中选选出出一一个个来来执执行行。这这类类数数据据流流应应该该划划分分为为一一类类特特殊殊的的数数据据流流,称称为为事事务务流流。它它由由至至少少一一条条接接受受路路
57、径径、一一个个 事事务务中中心心 与与若若干干条条动动作作路路径组成,如图径组成,如图3-16所示。所示。图图3- 15 变换型数据流图变换型数据流图3.6 面向数据流的设计方法图图3- 16 事务型数据流图事务型数据流图3.6 面向数据流的设计方法3.6.1 3.6.1 变换分析变换分析对对变变换换型型的的DFD图图,采采用用变变换换分分析析技技术术转转换换为为模模块块结构图。变换分析技术的步骤是:结构图。变换分析技术的步骤是:1. 确定主加工及逻辑输入确定主加工及逻辑输入/逻辑输出逻辑输出所所谓谓主主加加工工,是是指指描描述述系系统统的的主主要要功功能能、特特征征的的加加工工。其其特特点点
58、是是:输输入入/出出数数据据流流较较多多,往往往往主主加加工工不不止止一一个个。主主加加工工的的确确定定是是变变换换分分析析技技术术的的关关键键,一一定定要要反反复复认认真真的的分分析析,而而且且不不同同的的人人所所确确定定的的主主加加工工可可能能会会有有差异。差异。逻逻辑辑输输入入/出出数数据据流流则则是是指指输输入入、输输出出主主加加工工的的数数据据流流。通通常常又又把把将将物物理理输输入入转转换换为为逻逻辑辑输输入入的的数数据据流流称称为为输输入入流流,而而将将逻逻辑辑输输出出转转换换为为物物理理输输出出的的数数据据流流称称为为输出流。输出流。3.6 面向数据流的设计方法2. 进行一级分
59、解,设计上层模块进行一级分解,设计上层模块顶顶层层的的模模块块又又称称为为主主控控模模块块,如如模模块块M。一一级级分分解解是是对对顶顶层层的的模模块块进进行行分分解解;为为每每个个逻逻辑辑输输入入设设计计一一个个输输入入模模块块(CI),为为每每个个逻逻辑辑输输出出设设计计一一个个输输出出模模块块(CO),同同时时为为每每个个主主加加工工设设计计一一个个处处理理模模块块(CT),并并标标注注模模块块名名,用用小小箭箭头头画画出出相相应应的的数数据据流流。图图3-17(a)为为变变换换型型数数据据流流图图,图图3-27(b)是是对对该该数数据据流流图图中中主主加加工工转转换换后后的软件结构图。
60、的软件结构图。3.6 面向数据流的设计方法图图3- 17 变换分析技术变换分析技术3.6 面向数据流的设计方法3. 进行二级分解,设计中下层模块进行二级分解,设计中下层模块这这一一步步的的工工作作是是自自顶顶向向下下,逐逐步步细细化化,为为第第一一层层的的每每一一个个输输入入模模块块、输输出出模模块块、处处理理模模块块设设计计它它们们的的从从属属模模块块,设设计计下下层层模模块块的的顺顺序序一一般般从从设设计计输输入入模模块块的的下下层层开始。开始。通通常常为为输输入入模模块块设设计计两两类类下下层层模模块块:接接收收数数据据的的模模块块和和对对所所接接收收的的数数据据进进行行某某种种处处理理
61、的的模模块块,为为输输出出模模块块也也设设计计两两类类下下层层模模块块,对对输输出出的的数数据据进进行行处处理理的的模模块块和和输输出出数数据据的的模模块块。处处理理模模块块的的一一种种分分解解方方法法是是则则按按照照分分层层DFD 图中主加工的分解来进行。图中主加工的分解来进行。例例如如图图3-18中中,为为输输入入模模块块CI设设计计下下层层模模块块“取取B”和和“转转换换B”,为为输输出出模模块块设设计计下下层层模模块块“转转换换D”和和“送送E”。为处理模块。为处理模块CT 设计下层模块设计下层模块“处理处理C”等。等。3.6 面向数据流的设计方法图图3- 18 变换分析技术变换分析技
62、术3.6 面向数据流的设计方法4. 进一步细化进一步细化对对中中、下下层层的的模模块块继继续续细细化化,一一直直分分解解到到物物理理的的输输入入和和输输出出为为止止。如如图图3-18中中为为“取取B”模模块块设设计计下下层层模模块块“取取A”和和“转转换换A”,“送送E”模模块块设设计计下下层层模模块块“转转换换E”和和“送送F”等。等。要要特特别别要要注注意意:结结构构图图中中的的模模块块,并并非非是是由由DFD 图图中中的的加加工工直直接接对对应应转转换换而而来来的的,因因此此加加工工和和模模块块之之间间不不存存在在一一一一对对应应的的关关系系。结结构构图图与与DFD 图图之之间间的的数数
63、据据流存在对应关系。流存在对应关系。3.6 面向数据流的设计方法3.6.2 3.6.2 事务分析事务分析对对于于事事务务处处理理型型的的DFD 图图,采采用用“事事务务分分析析”技技术将其转换为模块结构图。事务分析的步骤是:术将其转换为模块结构图。事务分析的步骤是:1. 确定事务处理中心及事务路径确定事务处理中心及事务路径首首先先从从数数据据流流图图中中确确定定事事务务处处理理中中心心,再再找找出出输输入入流流和和加加工工路路径径。事事务务中中心心一一般般是是很很容容易易识识别别的的;事事务务中中心心将将一一个个输输入入数数据据流流分分解解为为多多个个输输出出输输出出数数据据流流,即即加加工工
64、路路径径。如如图图3-19 中中,事事务务中中心心为为加加工工I,加加工工路路径径为加工为加工P1、P2 和和P3。3.6 面向数据流的设计方法图图3- 19 事务分析技术事务分析技术3.6 面向数据流的设计方法2. 设计顶层模块,进行一级分解设计顶层模块,进行一级分解对对事事务务中中心心应应设设计计“事事物物控控制制”模模块块;即即顶顶层层的的“主主控控模模块块”。一一级级分分解解的的任任务务是是从从数数据据流流图图中中导导出出具具有有接接受受分分支支和和发发送送分分支支的的软软件件结结构构,也也称称为为事事务务结结构构。对对输输入入流流应应设设计计“接接受受事事务务”模模块块;对对加加工工
65、路路径径,应应设设计计“发送事务发送事务”模块。模块。3. 进行二级分解,设计中下层模块进行二级分解,设计中下层模块对对于于接接受受分分支支,可可用用类类似似于于变变换换型型数数据据流流图图中中设设计计输输入入部部分分的的方方法法进进行行中中下下层层设设计计。对对于于发发送送分分支支,在在发发送送控控制制模模块块下下为为每每条条加加工工路路径径设设计计一一个个事事务务处处理理模模块块,这一层称为事务层。这一层称为事务层。在在事事务务层层模模块块下下,沿沿各各事事务务路路径径进进行行进进一一步步细细化化。细细化化的的各各层层称称为为细细化化层层,细细化化的的方方法法与与变变换换分分析析的的细细化
66、化方法相同。方法相同。3.6 面向数据流的设计方法3.6.3 3.6.3 设计优化设计优化对对第第一一次次设设计计得得到到的的软软件件结结构构,可可以以根根据据模模块块独独立立原原理理进进行行优优化化。做做到到尽尽可可能能高高的的内内聚聚、尽尽可可能能低低的的耦耦合合,更更重重要要的的是是,为为了了得得到到一一个个易易于于实实现现、易易于于测测试试和和易易于于维维护护的的软软件件结结构构,应应该该对对初初步步分分割割得得到到的的模模块块进进行行再再分分解或合并。解或合并。1. 软软件件设设计计人人员员应应该该致致力力于于开开发发能能够够满满足足所所有有功功能能和和性性能能要要求求的的软软件件,
67、而而且且按按照照设设计计原原理理和和启启发发式式设设计计规则衡量软件设计。规则衡量软件设计。2. 在在设设计计的的早早期期阶阶段段对对软软件件结结构构进进行行精精化化。可可以以导导出出不不同同的的软软件件结结构构,然然后后对对它它们们进进行行评评价价和和比比较较,力力求求得得到到最最好好的的结结果果。这这种种优优化化的的可可能能,是是把把软软件件结结构构设设计和过程设计分开的真正优点之一。计和过程设计分开的真正优点之一。3.6 面向数据流的设计方法3. 设设计计优优化化应应该该力力求求做做到到在在有有效效的的模模块块化化的的前前提提下下使使用用最最少少量量的的模模块块,以以及及在在能能够够满满
68、足足信信息息要要求求的的前前提提下使用最简单的数据结构。下使用最简单的数据结构。4. 对对于于时时间间是是决决定定性性因因素素的的应应用用场场合合,可可能能有有必必要要在在详详细细设设计计阶阶段段,也也可可能能在在编编写写程程序序的的过过程程中中进进行行优优化化,软软件件开开发发人人员员应应该该认认识识到到,程程序序中中相相对对比比较较小小的的部部分分(一一般般为为10%20%),通通常常占占用用全全部部处处理理时时间间的的大大部部分分(50%80%)。用用下下述述方方法法对对软软件件进进行行时时间间优优化化是是合合理的。理的。(1) 在在不不考考虑虑时时间间因因素素的的前前提提下下开开发发并
69、并精精化化软软件件结结构。构。3.6 面向数据流的设计方法(2) 在在详详细细设设计计阶阶段段选选出出最最耗耗费费时时间间的的那那些些模模块块,仔细地设计它们的处理过程,以求提高效率。仔细地设计它们的处理过程,以求提高效率。(3) 使用高级程序设计语言编写程序。使用高级程序设计语言编写程序。(4) 软件中孤立出那些大量占用处理机资源的模块。软件中孤立出那些大量占用处理机资源的模块。(5) 必必要要时时重重新新设设计计或或使使用用机机器器语语言言重重写写上上述述大大量量占用资源的模块代码,以求高效率。占用资源的模块代码,以求高效率。 实例分析【例例3-1】假假设设某某学学校校教教材材采采购购系系
70、统统有有功功能能需需求求如如下:下:(1) 依据学校的授课计划,为上课的学生准备教材;依据学校的授课计划,为上课的学生准备教材;(2) 检检查查学学生生购购书书单单是是否否有有效效,对对有有效效书书单单发发放放所所购教材;购教材;(3) 如如果果教教材材已已经经脱脱销销,对对暂暂时时脱脱销销的的教教材材进进行行登登记;记;(4) 根据缺书登记向出版社补订教材;根据缺书登记向出版社补订教材;(5) 将缺书登记表汇总为待购计划表;将缺书登记表汇总为待购计划表;(6) 补订教材到货后,通知学生购书。补订教材到货后,通知学生购书。请请用用结结构构化化方方法法为为该该系系统统画画出出分分层层的的数数据据
71、流流图图,并并转换成软件结构图。转换成软件结构图。实例分析解析:首先画数据流程图。解析:首先画数据流程图。画画数数据据流流图图的的第第一一步步是是画画出出系系统统顶顶层层图图,将将整整个个教教材材采采购购系系统统当当做做一一个个大大的的加加工工。如如图图3-20所所示示,系系统统从从学学生生接接受受购购书书单单,经经处处理理后后把把领领书书单单返返回回给给学学生生,使使学学生生可可凭凭领领书书单单到到仓仓库库领领书书。对对脱脱销销的的教教材材,系系统统用用缺缺书书单单的的形形式式通通知知书书库库;新新书书进进库库后后,由由书书库库将将进进书书单单通通知返回系统。知返回系统。图图3- 20 教材
72、采购系统顶层数据流图教材采购系统顶层数据流图实例分析接接下下来来把把顶顶层层数数据据流流图图分分解解为为0层层数数据据流流图图,0层层数数据据流流图图由由两两个个加加工工组组成成:销销书书和和购购书书。如如图图3-21所所示示,售售书书加加工工将将脱脱销销的的教教材材存存入入“缺缺书书登登记记表表”,购购书书加加工工从从“缺缺书书登登记记表表”补补订订教教材材;当当新新书书进进货货后后,购购书书加加工工将进书信息传递给售书加工。将进书信息传递给售书加工。图图3- 21 教材采购系统教材采购系统0层数据流图层数据流图实例分析在在0屋屋数数据据流流图图基基础础上上继继续续分分解解,可可得得到到1层
73、层数数据据流流图图。图图3-22由由售售书书加加工工分分解解得得到到,图图2-23由由购购书书加加工工分解得到。分解得到。在在图图3-22中中,售售书书加加工工被被分分解解成成7个个子子加加工工,编编号号为为1.11.7。“审审查查有有效效性性”加加工工是是比比较较购购书书单单的的内内容容与与学学生生用用书书表表是是否否一一致致,同同时时还还要要通通过过售售书书登登记记表表检检查查学学生生是是否否已已经经买买过过这这些些教教材材。如如果果购购书书单单内内容容与与学学生生用用书书表表不不符符或或已已经经买买过过该该教教材材,则则给给学学生生返返回回无无效效购购书书单单。如如果果购购书书单单有有效
74、效,则则由由“开开发发票票”加加工工框框按按购购书书单单的的内内容容与与教教材材库库存存表表比比较较,把把可可供供应应的的教教材材写写入入发发票票,并并填填写写领领书书单单交交给给购购书书的的学学生生,同同时时登登记记售售书书情情况况。对对于于脱脱销销的的教教材材信信息息则则传传递递给给“缺缺书书登登记记”加加工工,由由该该加加工工登登记记到到缺缺书书登登记记表表中中,等等待待接接到到进进书书通通知知后后再再补补售售给给学生。补售的手续及数据流程与第一次购书单相同。学生。补售的手续及数据流程与第一次购书单相同。实例分析图图3- 22 教材采购系统教材采购系统1层层DFD售书加工分解图售书加工分
75、解图实例分析图图3-23中中购购书书加加工工被被分分解解为为3个个子子加加工工。“修修改改库库存存与与待待购购量量”加加工工在在接接到到进进书书通通知知后后,修修改改“教教材材库库存存表表”、“待待购购教教材材表表”和和“进进书书登登记记表表”,并并通通过过“进进书书登登记记表表”把把进进书书信信息息通通知知销销售售部部门门,使使销销售售人人员员能能通通知知缺缺书书的的学学生生来来补补买买。另另外外根根据据销销售售部部门门建建立立的的缺缺书书登登记记表表,首首先先由由“按按书书号号汇汇总总缺缺书书”加加工工汇汇总总后后存存入入“待待购购教教材材表表中中”,然然后后再再由由“按按出出版版社社汇汇
76、总总缺缺书书”加加工工分分别统计缺书单,送给书库保管员作为采购教材的依据。别统计缺书单,送给书库保管员作为采购教材的依据。实例分析图图3- 23 教材采购系统教材采购系统1层层DFD购书加工分解图购书加工分解图实例分析其其次次判判断断数数据据流流图图的的类类型型,即即它它们们是是事事务务型型还还是是变变换型流图。换型流图。对对于于图图3-22,粗粗看看起起来来,它它具具有有变变换换型型结结构构的的特特点点。加加工工1.1与与1.6为为输输入入部部分分,1.3与与1.7为为输输出出部部分分,其其余余3个个(1.2,1.4,1.5)属属于于变变换换中中心心。经经过过以以上上的的分分析析,可可以以在
77、在图图上上画画出出两两条条界界线线,图图3-22中中的的两两条条虚虚线之间的加工即为变换中心。线之间的加工即为变换中心。图图3-22中中的的输输入入部部分分含含有有两两个个加加工工:加加工工1.1用用于于第第一一次次售售书书,产产生生的的输输入入数数据据流流是是“有有效效购购书书单单”;加加工工1.6用用于于补补售售,产产生生的的输输入入数数据据流流“补补售售书书单单”。在在一一次次售售书书过过程程中中只只能能执执行行其其中中一一种种功功能能,要要么么是是初初售售,要要么么是是补补售售。因因此此,图图3-22中中加加工工1.2的的左左方方应应添添加加一一个号,表明这两种输入流不会同时出现。个号
78、,表明这两种输入流不会同时出现。实例分析综综上上所所述述,图图3-22属属于于事事务务型型结结构构数数据据流流图图。它它的的输输入入部部分分包包括括两两个个动动作作分分支支:第第一一次次售售书书与与补补售售,除除了了之之外外,其其余余的的加加工工都都是是公公用用的的。也也就就是是说说,图图3-22的的数数据据流流图图在在整整体体上上属属于于事事务务型型结结构构,但但它它的的两两个个动动作作分支又具有变换型结构。分支又具有变换型结构。对对于于图图3-23,它它也也是是具具有有两两个个动动作作分分支支的的事事务务型型结结构构。第第一一个个动动作作分分支支是是“统统计计缺缺书书”,包包括括编编号号2
79、.1与与2.2两两个个加加工工;第第二二动动作作分分支支是是“登登记记进进书书”,包包括括一一个个加加工工2.3。其其中中统统计计缺缺书书分分支支具具有有变变换换型型结结构构,加加工工2.1是是它它的的输输入入部部分分,加加工工2.2是是它它的的输输入入部部分分。它它没没有有事事务务中中心心部部分分,待待购购教教材材表表即即是是这这个个分分支支的的传传入入数数据,也是它的传出数据。据,也是它的传出数据。实例分析最后画出软件结构图。最后画出软件结构图。其其中中图图3-24为为教教材材采采购购系系统统的的主主图图,图图3-25为为售售书加工的结构图,图书加工的结构图,图3-26为购书加工的结构图。
80、为购书加工的结构图。图图3- 24 教材采购系统主图教材采购系统主图实例分析图图3- 25 售书加工结构图售书加工结构图实例分析图图3- 26 购书加工结构图购书加工结构图实例分析【例例3-2】图图3-27是是某某成成绩绩管管理理的的部部分分结结构构图图,图图中中(a)和和(b)分分别别是是同同一一模模块块A的的两两个个不不同同设设计计方方案案,你你认为哪一个设计方案较好认为哪一个设计方案较好?请说明理由。请说明理由。图图3- 27 成绩模块设计方案成绩模块设计方案实例分析解解析析:两两个个方方案案中中(b)方方案案较较好好。要要评评价价一一个个软软件件结结构构设设计计好好坏坏,主主要要看看模
81、模块块的的独独立立性性,要要从从软软件件结结构构的的耦耦合合性性和和内内聚聚性性两两个个方方面面来来衡衡量量。对对于于(a)方方案案,模模块块A与与模模块块B之之间间形形成成了了控控制制耦耦合合,因因此此独独立立性性不不高高,因因为为在在B模模块块内内部部,有有两两个个不不同同的的功功能能被被放放在在一一起起,形形成成的的是是逻逻辑辑内内聚聚,内内聚聚性性不不高高。对对于于(b)方方案案,模模块块A与与B1和和B2之之间间是是数数据据耦耦合合,独独立立性性较较强强,在在B1和和B2内内部部,只只完完成成单单一一的的功功能能,是是功功能能内内聚聚,因因此此内内聚聚性性高高,可可维维护护性好,所以
82、性好,所以(b)方案比方案比(a)方案更好一些。方案更好一些。实例分析【3-3】图图3-28所所示示的的计计算算多多个个地地点点日日平平均均温温度度的的软件结构图,请分析一下每个模块的内聚类型。软件结构图,请分析一下每个模块的内聚类型。图图3- 28 计算多点日平均温度的软件结构图计算多点日平均温度的软件结构图实例分析解解析析:该该软软件件的的功功能能是是计计算算多多个个指指定定地地点点的的日日平平均均温温度度。其其中中变变量量sum保保存存某某地地一一天天之之内内在在指指定定的的时时间间取取样点的温度之和。该软件的运行过程为:样点的温度之和。该软件的运行过程为:首首先先模模块块B初初始始化化
83、变变量量sum并并打打开开文文件件,然然后后模模块块C读读取取地地点点、时时间间和和温温度度等等数数据据,模模块块D创创建建用用于于保保存存这这些些数数据据的的温温度度记记录录,模模块块E计计算算特特定定地地点点的的日日平平均均温温度度,模模块块F存存储储温温度度记记录录。重重复复调调用用模模块块C、模模块块D、模模块块E和和模模块块F,直直至至计计算算出出并并保保存存好好所所有有指指定定地地点点的的日日平平均均温度。最后模块温度。最后模块F打印平均温度并关闭文件。打印平均温度并关闭文件。实例分析从从上上述述运运行行过过程程可可以以发发现现,模模块块A、模模块块C、模模块块D、模模块块E和和模
84、模块块F等等5个个模模块块,每每个个模模块块都都完完成成一一个个单单一一的的功功能能,模模块块内内所所有有处处理理都都为为完完成成同同一一个个功功能能服服务务,彼彼此此结结合合得得十十分分紧紧密密,因因此此这这5个个模模块块的的内内聚聚类类型型属属于于功功能能内聚。内聚。再再看看模模块块B,模模块块B中中两两个个操操作作初初始始化化变变量量sum和和打打开开文文件件,都都是是程程序序运运行行的的初初始始阶阶段段完完成成的的,“初初始始化化变变量量sum并并打打开开文文件件”初初看看起起来来好好像像是是时时间间内内聚聚。但但仔仔细细分分析析,初初始始化化变变量量sum是是本本程程序序特特有有的的
85、操操作作,而而打打开开文文件件是是任任何何使使用用文文件件的的程程序序都都必必须须包包含含的的操操作作,是是硬硬件件要要求求的的操操作作,并并非非本本程程序序特特有有的的操操作作。由由于于初初始始化化变变量量sum操操作作和和打打开开文文件件操操作作没没有有任任何何联联系系,是是偶偶然然组组合合在在一一起起的的,所所以以模模块块B的的内内聚聚类类型型是是偶偶然然内内聚聚。同同理理,模块模块G的内聚类型也是偶然内聚。的内聚类型也是偶然内聚。本章小结概概要要设设计计的的基基本本目目的的是是确确定定系系统统如如何何完完成成预预定定的的任任务务,即即:确确定定系系统统的的物物理理配配置置方方案案,组组
86、成成系系统统的的程程序序的的结结构构。主主要要由由两两个个小小阶阶段段组组成成;系系统统设设计计,设设想想完完成成系系统统功功能能的的若若干干合合理理的的方方案案,分分析析比比较较,选选定定最最佳佳方方案案。软软件件结结构构设设计计,确确定定软软件件由由哪哪些些模模块块组组成成以以及及模模块块之之间间的的动动态态调调用用关关系系。层层次次图图和和结结构构图图是是描描绘绘软件结构的常用工具。软件结构的常用工具。软软件件结结构构设设计计应应该该遵遵循循的的主主要要原原理理是是模模块块独独立立原原理理,即即:软软件件应应由由一一组组完完成成相相对对独独立立的的子子功功能能的的模模块块组成,模块之间的
87、接口应该尽量简单。组成,模块之间的接口应该尽量简单。在在进进行行软软件件结结构构设设计计时时,由由抽抽象象到到具具体体地地构构造造出出软件的层次结构。软件的层次结构。本章小结启启发发式式规规则则往往往往能能提提示示改改进进软软件件设设计计,既既要要重重视视和和利利用用这这些些启启发发式式规规则则,又又要要从从实实际际情情况况出出发发避避免免生生搬硬套。搬硬套。自自顶顶向向下下、逐逐步步求求精精是是软软件件结结构构设设计计方方法法;如如果果有有详详细细的的数数据据流流图图,也也可可以以使使用用面面向向数数据据流流的的设设计计方方法。法。在在详详细细的的过过程程设设计计和和编编写写程程序序之之前前,首首先先进进行行结结构构设设计计的的好好处处在在于于可可以以在在软软件件开开发发的的早早期期对对软软件件结结构构进行优化,代价不高,却可以使软件质量得到改进。进行优化,代价不高,却可以使软件质量得到改进。