第4章结构化设计方法_第1页
第4章结构化设计方法_第2页
第4章结构化设计方法_第3页
第4章结构化设计方法_第4页
第4章结构化设计方法_第5页
已阅读5页,还剩125页未读 继续免费阅读

下载本文档

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

文档简介

1第4章

结构化设计方法2主要内容:软件设计的概念及原则结构化设计体系结构设计接口设计数据设计过程设计软件设计规格说明3软件设计是一个把软件需求变换成软件表示的过程。根据用信息域表示的软件需求,以及功能和性能需求,进行

数据设计系统结构设计过程设计。数据设计侧重于数据结构的定义。系统结构设计定义软件系统各主要成份之间的关系。过程设计则是把结构成份转换成软件的过程性描述。在编码步骤,根据这种过程性描述,生成源程序代码,然后通过测试最终得到完整有效的软件。4软件设计是后续开发步骤及软件维护工作的基础。如果没有设计,只能建立一个不稳定的系统结构。5从工程管理的角度来看,软件设计分两步完成。

总体设计(概要设计):将软件需求转化为数据结构和软件的系统结构,确定软件的结构以及各组成成分(子系统或模块)之间的相互关系。

详细设计(过程设计):通过对系统结构进行细化,得到软件的详细的数据结构和算法,产生描述各模块程序过程的详细文档。64.1软件设计的概念及原则

软件设计的概念设计是一项核心的工程活动。在20世纪90年代早期,Lotus1-2-3的发明人MitchKapor在Dr.Dobbs杂志上发表了“软件设计宣言”,其中指出:

“什么是设计?设计是你站在两个世界——技术世界和人类的目标世界——而你尝试将这两个世界结合在一起……”。罗马建筑批评家Vitruvius提出了这样一个观念:

“设计良好的建筑应该展示出坚固、适用和令人赏心悦目”。7软件设计的原则软件设计中最重要的一个问题就是软件质量问题,用什么标准对软件设计的技术质量进行衡量呢?本节介绍几十年来发展并经过时间考验的软件设计的一些基本原理。分而治之模块独立性提高抽象层次复用性设计灵活性设计81、分而治之分而治之是人们解决大型复杂问题时通常采用的策略。将大型复杂的问题分解为许多容易解决的小问题,原来的问题也就容易解决了。软件的体系结构设计、模块化设计都是分而治之策略的具体表现。9

模块化模块是由边界元素限定的相邻程序元素的序列,而且有一个总体标识符代表它。过程、函数、子程序和宏都是模块。面向对象方法学中的对象、对象中的方法也是模块。模块是构成程序的基本构件。模块化是指把整个软件划分成若干单独命名且可独立访问的部分,称之为模块。这些模块可以被组装起来以满足整个问题的需求。把问题/子问题的分解与软件开发中的系统/子系统或系统/模块对应起来,就能够把一个大而复杂的软件系统划分成易于理解的比较单纯的模块结构。10软件结构包括两部分:程序的模块结构(层次结构):是软件模块间关系的表示。数据结构:信息的组织、存取方法、结合的程度、处理方法。如:线性表、链表、队列、堆栈、树、图等。11控制结构(层次结构)12软件的体系结构通过一个功能划分过程来完成。该划分过程从需求分析确立的目标系统的模型出发,对整个问题进行分割,使其每个部分用一个或几个软件模块加以解决,整个问题就解决了。13模块相互独立,模块越小,模块内部结构就越简单,花费的工作量也越低,但增加了模块数目;当模块数增加时,模块间的联系也随之增加,把这些模块联接起来的工作量也随之增加。因此存在一个模块个数M,使得总的开发成本达到最小。

模块化和软件成本模块大小、模块数目与费用的关系142、模块独立性模块(Module)又称“构件”,它一般具有如下三个基本属性:功能:描述该模块实现什么功能逻辑:描述模块内部怎么做状态:该模块使用时的环境和条件在描述一个模块时,还必须按模块的外部特性与内部特性分别描述。模块的外部特性---概要设计的任务模块的模块名、参数表、其中的输入参数和输出参数,以及给程序以至整个系统造成的影响。模块的内部特性---详细设计的任务完成其功能的程序代码和仅供该模块内部使用的数据。15模块独立性:是指软件系统中每个模块只涉及软件要求的具体的子功能,而和软件系统中其它的模块的接口是简单的。例如,若一个模块只具有单一的功能且与其它模块没有太多的联系,则称此模块具有模块独立性模块独立性高的软件,其功能易于划分,接口简单,因此开发比较容易;容易测试和维护。模块独立性的度量准则:模块间的耦合和模块的内聚

耦合:衡量不同模块彼此之间互相连接(依赖)的紧密程度。内聚:衡量一个模块内部各个元素彼此结合的紧密程度(模块功能强度)。模块独立性比较强的模块应是高内聚低耦合的模块。模块独立性16(1)耦合耦合是对一个软件结构内不同模块之间互连程度的度量.耦合强弱取决于模块间接口的复杂程度,进入或访问一个模块的点,以及通过接口的数据.尽可能松散耦合.无耦合-没有依赖关系松散耦合-有少量依赖关系紧密耦合-有很多依赖关系17耦合强度依赖的因素:一模块对另一模块的引用一模块向另一模块传递的数据量一模块施加到另一模块的控制的数量模块间接口的复杂程度模块间的耦合18

非直接耦合如果两个模块中的每一个都能独立工作而不需要另一个模块的存在,那么它们彼此完全独立,这意味着模块间无任何连接,耦合度最低。模块独立性最强。模块A和模块B,它们之间的联系完全是通过上层模块的控制和调用来实现的。19数据耦合如果两个模块彼此间通过参数交换信息,而且交换的信息仅仅是数据,那么这种耦合称为数据耦合.如果传递的信息中有控制信息,则这种耦合称为控制耦合。开发票计算水费单价数量金额20

标记耦合如果一组模块通过参数表传递数据结构(数组名、记录名、文件名等,这些名字即为标记),就是标记耦合。计算水电费计算水费计算电费住户情况水费电费住户情况“住户情况”是一个数据结构,图中模块都与此数据结构有关。“计算水费”和“计算电费”本无关,由于引用了此数据结构产生依赖关系,它们之间也是标记偶合.将标记耦合修改为数据耦合计算水电费计算水费计算电费用水量用电量水费电费22

控制耦合模块向下属模块传递的信息(开关量、标志等控制被调用模块决策的变量)控制了被调用模块的内部逻辑。控制耦合举例A计算平均分或最高分B平均/最高(控制信号)成绩读入分数输出结果计算平均分计算最高分平均/最高?B控制耦合增加了理解和编程的复杂性,调用模块必须知道被调模块的内部逻辑,增加了模块之间的相互依赖。去除模块间控制耦合的方法:(1)将被调用模块内的判定上移到调用模块中进行。(2)被调用模块分解成若干单一功能模块。改控制耦合为数据耦合A计算平均分B1平均成绩最高成绩计算最高分B225

外部耦合一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息,则称之为外部耦合。26若一组模块都访问同一个公共数据环境,则它们之间的耦合就称为公共耦合。公共的数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等。公共数据区及全程变量无保护措施,慎用公共数据区和全程变量!!!公共耦合的复杂程度随耦合模块的个数增加而显著增加。若只是两模块间有公共数据环境,则公共耦合有两种情况:松散公共耦合和紧密公共耦合。

公共耦合27如果发生下列情形,两个模块之间就发生了内容耦合:A、一个模块直接访问另一个模块的内部信息(程序代码或数据);B、两个模块有一部分程序代码重迭(只可能出现在汇编语言中);C、一个模块有多个入口。

内容耦合28

建立模块间耦合度尽可能松散的系统降低模块间耦合度的设计原则:尽量使用数据耦合,少用控制耦合和标记耦合,限制公共耦合的范围,完全不用内容耦合。降低接口的复杂性29(2)内聚内聚标志着一个模块内各个元素彼此结合的紧密程度,它是信息隐藏和局部化概念的自然扩展。简单说,理想内聚的模块只做一件事。力求做到高内聚。

c

偶然内聚

0分

逻辑内聚

1分时间内聚

3分过程内聚

5分

通信内聚

7分

信息内聚9分功能内聚10分30一个模块中各个部分都是完成某一具体功能必不可少的组成部分,或者说该模块中所有部分都是为了完成一项具体功能而协同工作,紧密联系,不可分割的。则称该模块为功能内聚模块。

功能内聚31这种模块完成多个功能,各个功能都在同一数据结构上操作,每一项功能有一个唯一的入口点。这个模块将根据不同的要求,确定该执行哪一个功能。

信息内聚几个加工同时引用一个共同的数据信息内聚模块可以看成是多个功能内聚模块的组合,并且达到信息的隐蔽。即把某个数据结构、资源或设备隐蔽在一个模块内,不为别的模块所知晓。32如果一个模块内各功能部分都使用了相同的输入数据,或产生了相同的输出数据,则称之为通信内聚模块。通常,通信内聚模块是通过数据流图来定义的。

通信内聚产生工资报表计算平均工资职工工资记录职工工资报表平均工资产生职工工资报表并计算平均工资模块33模块内各处理成分相关,且必须以特定次序执行。使用流程图做为工具设计程序时,把流程图中的某一部分划出组成模块,就得到过程内聚模块。

过程内聚读入成绩单审查成绩单统计成绩打印成绩读入并审查成绩单统计并打印成绩单34时间内聚又称为经典内聚。这种模块大多为多功能模块,但模块的各个功能的执行与时间有关,通常要求所有功能必须在同一时间段内执行。例如:初始化系统模块、系统结束模块、紧急故障处理模块等

时间内聚35把几种相关的功能(逻辑上相似的功能)组合在一起,每次被调用时,由传送给模块的判定参数来确定该模块应执行哪一种功能。

逻辑内聚36逻辑内聚模块ABCEFGABCEFGEFG模块内部逻辑E、F、G逻辑功能相似,组成新模块EFG缺点:增强了耦合程度(控制耦合),不易修改,效率低A1B1C1公用代码段公用代码段37巧合内聚又称为偶然内聚。当模块内各部分之间没有联系,或者即使有联系,这种联系也很松散,则称这种模块为巧合内聚模块,它是内聚程度最低的模块。模块M中的三个语句没有任何联系缺点:可理解性差,可修改性差

巧合内聚383、提高抽象层次抽象就是抽取出事物的本质特性而暂时不考虑它们的细节。即忽视一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。软件系统进行模块设计时,可有不同的抽象层次。在最高的抽象层次上,可以使用问题所处环境的语言概括地描述问题的解法。在较低的抽象层次上,则采用过程化的方法。39(1)过程抽象

在软件工程中,从系统定义到实现,每进展一步都可以看做是对软件解决方法的抽象化过程的一次细化。在软件需求分析阶段,用“问题所处环境的为大家所熟悉的术语”来描述软件的解决方法。在从概要设计到详细设计的过程中,抽象化的层次逐次降低。当产生源程序时到达最低抽象层次。(2)数据抽象

在不同层次上描述数据对象的细节,定义与该数据对象相关的操作。40逐步求精逐步求精是人类解决复杂问题时采用的基本方法,也是许多软件工程技术的基础。逐步求精是“为了能集中精力解决主要问题而尽量推迟对问题细节的考虑”。Miller法则:一个人在任何时候都只能把注意力集中在(7±2)个知识块上。逐步求精方法确保每个问题都将被解决,而且每个问题都将在适当的时候被解决。414、复用性设计复用是指同一事物不做修改或稍加修改就可以多次重复使用。将复用的思想用于软件开发,称为软件复用。我们将软件的重用部分称为软构件。也就是说,在构造新的软件系统时不必从零做起,可以直接使用已有的软构件即可组装(或加以合理修改)成新的系统。目前软件复用是提高软件质量和生产率的重要方法复用的范围:代码、需求模型和规格说明、设计模型、文档、测试用例等复用性设计有两方面的含义:尽量使用已有的构件(开发环境提供的、以往开发类似系统时创建的)如果确实需要创建新的构件,则在设计时应该考虑将来的可重复使用性。425、灵活性设计保证软件灵活性设计的关键是抽象。面向对象系统中的类结构类似一座金字塔,越接近金字塔的顶端,抽象程度就越高。“抽象”的反义词是“具体”。理想情况下,一个系统的任何代码、逻缉、概念在这个系统中都应该是唯一的,也就是说不存在重复的代码。43在设计中引入灵活性的方法降低耦合并提高内聚(易于提高替换能力);建立抽象(创建有多态操作的接口和父类);不要将代码写死(消除代码中的常数);抛出异常(由操作的调用者处理异常);使用并创建可复用的代码。444.2结构化设计结构化设计的任务结构化设计与结构化分析的关系模块结构及表示数据结构及表示454.2.1软件设计的任务软件设计的主要任务是要解决如何做的问题,要在需求分析的基础上,建立各种设计模型,并通过对设计模型的分析和评估,来确定这些模型是否能够满足需求。软件设计是将用户需求准确地转化成为最终的软件产品的唯一途径,在需求到构造之间起到了桥梁作用。在软件设计阶段,往往存在多种设计方案,通常需要在多种设计方案之中进行决策和折中,并使用选定的方案进行后续的开发活动。46

软件设计的阶段与任务从工程管理的角度,可以将软件设计分为概要设计阶段和详细设计阶段。从技术的角度传统的结构化方法将软件设计划分为体系结构设计、数据设计、接口设计和过程设计4部分;面向对象方法则将软件设计划分为体系结构设计、类设计/数据设计、接口设计和构件级设计4部分。47

软件设计的阶段与任务从管理和技术两个不同的角度对设计的认识。48

软件设计的任务体系结构设计:体系结构设计定义软件的主要结构元素及其之间的关系。接口设计:接口设计描述用户界面,软件和其他硬件设备、其他软件系统及使用人员的外部接口,以及各种构件之间的内部接口。数据设计:传统方法主要根据需求阶段所建立的实体—关系图(ER图)来确定软件涉及的文件系统的结构及数据库的表结构。过程设计:过程设计的主要工作是确定软件各个组成部分内的算法及内部数据结构,并选定某种过程的表达形式来描述各种算法。494.2.2结构化设计与结构化分析的关系结构化分析的结果为结构化设计提供了最基本的输入信息。两者的关系如图所示。50结构化设计方法的实施要点(1)研究、分析和审查数据流图。(2)根据数据流图决定问题的类型:变换型和事务型。针对两种不同的类型分别进行分析处理。(3)由数据流图推导出系统的初始结构图。(4)利用一些启发式原则来改进系统的初始结构图,直到得到符合要求的结构图为止。(5)根据分析模型中的实体关系图和数据字典进行数据设计,包括数据库设计或数据文件的设计。(6)在上面设计的基础上,并依据分析模型中的加工规格说明、状态转换图进行过程设计。(7)制定测试计划。514.2.3模块结构及表示模块一个软件系统通常由很多模块组成,结构化程序设计中的函数和子程序都可称为模块,它是程序语句按逻辑关系建立起来的组合体。模块用矩形框表示,并用模块的名字标记它。52模块的分类53模块的分类传入模块─从下属模块取得数据,经过某些处理,再将其传送给上级模块。它传送的数据流叫做逻辑输入数据流。传出模块─从上级模块获得数据,进行某些处理,再将其传送给下属模块。它传送的数据流叫做逻辑输出数据流。变换模块(加工模块)─它从上级模块取得数据,进行特定的处理,转换成其它形式,再传送回上级模块。它加工的数据流叫做变换数据流。协调模块─对所有下属模块进行协调和管理的模块,协调模块应在较高层出现。54模块的调用关系:模块之间用单向箭头(或直线)联结,箭头从调用模块指向被调用模块,表示调用模块调用了被调用模块。55模块间的信息传递(接口):当一个模块调用另一个模块时,调用模块把数据或控制信息传送给被调用模块,以使被调用模块能够运行。而被调用模块在执行过程中又把它产生的数据或控制信息回送给调用模块。56两个辅助符号:条件调用:菱形符号,表示当模块M中某个判定为真时调用模块A,为假时调用模块B。循环调用:弧形箭头符号,表示模块M循环调用模块A,B,C。

判定为真时调用A,为假时调用B

模块M循环调用模块A、B、C57

模块的结构模块结构最普通的形式就是树状结构和网状结构,如图所示。58结构图结构图是精确表达程序结构的图形表示方法。结构图反映程序中模块之间的层次调用关系和联系:它以特定的符号表示模块、模块间的调用关系和模块间信息的传递。结构图的例子——产生最佳解的一般结构

59结构图的形态特征604.2.4数据结构及表示数据结构是数据的各个元素之间逻辑关系的一种表示。

数据结构设计应确定数据的组织、存取方式、相关程度,以及信息的不同处理方法。数据结构的组织方法和复杂程度可以灵活多样,但典型的数据结构种类是有限的,它们是构成一些更复杂结构的基本构件块。61典型的数据结构624.3体系结构设计基于数据流方法的设计过程典型的数据流类型和系统结构变换型映射方法事务型映射方法软件模块结构的改进方法634.3.1基于数据流的设计方法SD由美国IBM公司的L.Constantine和E.Yourdon等人于1974年提出,与结构化分析(SA)、结构化编程(SP)相衔接,构成完整的结构化分析、设计与编程技术,是目前使用最广泛的软件设计方法之一。结构化设计SD是面向数据流的设计方法。以需求分析阶段产生的数据流图为基础,按一定步骤映射成软件结构。64基于数据流方法的设计过程65首先研究、分析和审查数据流图。从软件的需求规格说明中弄清数据流加工的过程,对于发现的问题及时解决。确定DFD类型:根据数据流图决定问题的类型:变换型和事务型。针对两种不同的类型分别进行分析处理。由数据流图推导出系统的初始结构图。利用启发原则来改进系统的初始结构图,直到得到符合要求的结构图为止。修改和补充数据词典。制定测试计划。SD的设计过程66数据流的类型决定了映射的方法。数据流有两种类型:变换流具有顺序处理的特点事务流具有平行分别处理的特点4.3.2典型的数据流类型67数据流的类型不同,得到的系统结构也不同。通常,一个系统中的所有数据流都可以认为是变换流,但是,当遇到有明显事务特性的数据流时,建议采用事务型映射方法进行设计68变换型数据流图变换型数据处理问题的工作过程大致分为三步:即取得数据,变换数据和给出数据。相应于取得数据、变换数据、给出数据,变换型系统结构图由输入、变换(处理)和输出等三部分组成。69

变换型系统结构图变换型系统的结构图由输入、中心变换和输出3部分组成。

70

事务型数据流图数据沿输入通路到达一个处理T,这个处理根据输入数据的类型在若干个动作序列中选择一个来执行。这类数据流称为事务流。处理T称为事务中心,它完成下述任务:(1)接收输入数据(事务)(2)分析每个事务以确定它的类型(3)根据事务类型选取一条活动通路。事务中心输入流加工路径T71

事务型系统结构图72简化的事务型系统结构图事务型系统的结构图可以有多种不同的形式,如有多层操作层或没有操作层。如果调度模块并不复杂,可将其归入事务中心模块。734.3.3变换型映射方法变换分析方法的步骤

(1)重画数据流图。在需求分析阶段得到的数据流图侧重于描述系统如何加工数据,而重画数据流图的出发点是描述系统中的数据是如何流动的。(2)在数据流图上区分系统的逻辑输入、逻辑输出和中心变换部分。几股数据流的汇合处往往是系统的变换中心。74变换分析方法的步骤(3)进行一级分解,设计系统模块结构的顶层和第一层。自顶向下设计的关键是找出系统树形结构图的根或顶层模块。首先设计一个主模块,并用程序的名字为它命名,然后将它画在与中心变换相对应的位置上。第1层设计:为每个逻辑输入设计一个输入模块,它的功能是为主模块提供数据;为每个逻辑输出设计一个输出模块,它的功能是将主模块提供的数据输出;为中心变换设计一个变换模块,它的功能是将逻辑输入转换成逻辑输出。75变换分析方法的步骤第一层模块与主模块之间传送的数据应与数据流图相对应,如图所示。76(4)进行二级分解,设计中、下层模块:对第一层的输入、变换、输出模块自顶向下逐层分解---第二级分解输入:从变换中心的边界开始沿着输入通路向外移动,把输入通路中的每个处理映射成输入模块控制下的一个低层模块输出:沿输出通路向外移动,把输出通路中的每个处理映射成直接或间接受输出模块控制的一个低层模块变换:把变换中心内的每个处理映射成受变换模块控制的一个模块变换分析方法的步骤77ADBEGF主控模块输入模块变换模块输出模块BDAEFG78①

在选择模块设计的次序时,必须对一个模块的全部直接下属模块都设计完成之后,才能转向另一个模块的下层模块的设计。79②

在设计下层模块时,应考虑模块的耦合和内聚问题,以提高初始结构图的质量。③使用“黑箱”技术:在设计当前模块时,先把这个模块的所有下层模块定义成“黑箱”,在设计中利用它们时,暂时不考虑其内部结构和实现。在这一步定义好的“黑箱”,在下一步就可以对它们进行设计和加工。这样,又会导致更多的“黑箱”。最后,全部“黑箱”的内容和结构应完全被确定。80④

在模块划分时,一个模块的直接下属模块一般在5个左右。如果直接下属模块超过10个,可设立中间层次。⑤如果出现了以下情况,就停止模块的功能分解当模块不能再细分为明显的子任务时;当分解成用户提供的模块或程序库的子程序时;当模块的界面是输入/输出设备传送的信息时;当模块不宜再分解得过小时。814.3.4事务型映射方法当数据流具有明显的事务特点时(发射中心),采用事务分析方法。事务分析也是从分析数据流图开始,自顶向下,逐步分解,建立系统的结构图。主要差别仅在于由数据流图到软件结构的映射方法不同。82事务分析的映射方法83事务分析过程(步骤)确定DFD中的事务中心和加工路径当DFD中的某个加工具有明显的将一个输入数据流分解成多个发散的输出数据流时,该加工就是事务中心,从事务中心辐射出去的数据流为各个加工路径。设计软件结构的顶层和第一层----事务结构

首先设计一个顶层模块(主控模块),有两个功能:接收数据、根据事务类型调度相应的处理模块。所以事务型软件结构应包括两个部分:接收分支:负责接收数据,设计方法与变换型DFD的输入部分相同。发送分支:通常包含一个调度模块,它控制管理所有的下层事务处理模块。当事务类型不多时,调度模块可与主模块合并。84事务结构的中、下层模块的设计、优化等工作同变换结构。注意利用公用模块

在事务分析的过程中,如果不同事务的一些中间模块可由具有类似的语法和语义的若干个低层模块组成,则可以把这些低层模块构造成公用模块。对每一事务,或对联系密切的一组事务,建立一个事务处理模块;

如果发现在系统中有类似的事务,可以把它们组成一个事务处理模块。对事务处理模块规定它们全部的下层操作模块对操作模块规定它们的全部细节模块。85综合DFD的映射一般,一个大型的软件系统是变换型结构和事务型结构的混合结构。确定DFD整体上的类型标出局部的DFD范围,确定其类型按整体和局部的DFD特征,设计出软件结构综合型DFD与分层DFD设计86

87分层DFD的映射分层的数据流图映射成软件结构图也应该是分层的,这样便于设计和修改。由于DFD的顶层图反映的是系统与外部环境的界面,所以系统的物理输入与物理输出都在顶层图或1层图,那么相应的软件结构图的物理输入与输出部分放在主图中较为合适。根据经验,事务型通常用于高层数据流图的转换,优点是把一个大的复杂系统分解成较小的、简单的、相对独立的子系统。而变换型通常用于较低层数据流图的转换,这样输入输出模块放在各自的子图中更为合理分层DFD设计884.3.5软件模块结构的改进方法1、模块功能的完善化。一个完整的功能模块,不仅能够完成指定的功能,而且还应当能够告诉使用者完成任务的状态,以及不能完成的原因。也就是说,一个完整的模块应当有以下几部分。①执行规定的功能的部分。②出错处理的部分。当模块不能完成规定的功能时,必须回送出错标志,向它的调用者报告出现这种例外情况的原因。③如果需要返回一系列数据给它的调用者,在完成数据加工或结束时,应当给它的调用者返回一个“结束标志”。89①

完全相似:在结构上完全相似,可能只是在数据类型上不一致。此时可以采取完全合并的方法。

②局部相似:找出其相同部分,分离出去,重新定义成一个独立的下一层模块。剩余部分还可以与它的上级模块合并。2、消除重复功能,改善软件结构9091模块的控制范围包括它本身及其所有的从属模块。模块的作用范围是指模块内一个判定的作用范围,凡是受这个判定影响的所有模块都属于这个判定的作用范围。如果一个判定的作用范围包含在这个判定所在模块的控制范围之内,则这种结构是简单的。

3、模块的作用范围应在控制范围之内9293如果在设计过程中,发现作用范围不在控制范围内,可采用如下办法把作用范围移到控制范围之内。①将判定所在模块合并到父模块中,使判定处于较高层次。②将受判定影响的模块下移到控制范围内。③将判定上移到层次中较高的位置。944、深度、宽度、扇出和扇入都应适当95如果一个模块的扇出数过大,就意味着该模块过分复杂,需要协调和控制过多的下属模块。应当适当增加中间层次的控制模块。图a-b一个模块的扇入数越大,则共享该模块的上级模块数目越多。扇入大,是有好处的。但如果一个模块的扇入数太大,如超过8,而它又不是公用模块,说明该模块可能具有多个功能,在这种情况下应当对它进一步分析并将其功能分解。965、避免或减少使用病态连接应限制使用如下3种病态连接。

97模块的大小,可以用模块中所含语句的数量的多少来衡量。通常规定其语句行数为50~100,保持在一页纸之内,最多不超过500行。6、模块的大小要适中985、力争降低模块接口的复杂程度

应该仔细设计模块接口,使得信息传递简单并且和模块的功能一致。6、设计单入口单出口的模块7、模块功能应该可预测

一个功能可预测的模块,不论内部处理细节如何,但对相同的输入数据,总能产生同样的结果。但是,如果模块内部蕴藏有一些特殊的鲜为人知的功能时,这个模块就可能是不可预测的。对于这种模块,如果调用者不小心使用,其结果将不可预测99100如果一个模块的局部数据结构的大小、控制流的选择或者与外界(人、硬软件)的接口模式被限制死了,则很难适应用户新的要求或环境的变更。为了能够适应将来的变更,软件模块中局部数据结构的大小应当是可控制的,控制流的选择对于调用者来说,应当是可预测的。而与外界的接口应当是灵活的。

101设计的后处理为每一个模块写一份处理说明为每一个模块提供一份接口说明确定全局数据结构和局部数据结构指出所有的设计约束和限制进行概要设计的评审进行设计的优化(如果需要和可能的话)102实例研究:银行储蓄系统的设计第1步:对银行储蓄系统的数据流图进行复查并精化,得到如图所示的数据流图。103第2步:确定数据流图具有变换特性还是事务特性。通过对精化后的数据流图进行分析,可以看到整个系统是对存款及取款两种不同的事务进行处理,因此具有事务特性。第3步:确定输入流和输出流的边界,如图4-27所示.104。105第4步:完成第一级分解。分解后的结构图如图所示。106第5步:完成第二级分解。对上图中的“输入数据”、“输出数据”和“调度”模块进行分解,得到未经精化的输入结构、输出结构和事务结构,分别如图(a)、(b)和(c)所示。(b)未经精化的输出结构

(a)未经精化的输入结构

(c)未经精化的事务结构

107第5步:完成第二级分解。将上面的3部分合在一起,得到初始的软件结构,如图所示。108第6步:对软件结构进行精化。(1)由于调度模块下只有两种事务,因此,可以将调度模块合并到上级模块中,如图所示。109(2)“检查密码”模块的作用范围不在其控制范围之内(即“输入密码”模块不在“检查密码”模块的控制范围之内),需对其进行调整,如图所示。110(3)提高模块的独立性,并对“输入事务”模块进行细化。

也可以将“检查密码”功能合并到其上级模块中。

1114.4接口设计接口设计的依据是数据流图中的自动化系统边界。系统的接口设计是由穿过系统边界的数据流定义的。在最终的系统中,数据流将成为用户界面中的表单、报表或与其他系统进行交互的文件或通信。接口设计主要包括3个方面:

模块或软件构件间的接口设计;软件与其他软硬件系统之间的接口设计;软件与人(用户)之间的交互设计。人机交互(用户)界面是人机交互的主要方式112人机交互界面为了设计好人机交互界面,设计者需要了解用户界面应具有的特性;还应该认真研究使用软件的用户,包括用户是什么人?用户怎样学习与新的计算机系统进行交互?用户需要完成哪些工作?等等。113

用户界面应具备的特性可使用性:包括使用简单、界面一致、拥有HELP帮助功能、快速的系统响应和低的系统成本、具有容错能力等。灵活性:考虑到用户的特点、能力和知识水平,应当使用户接口满足不同用户的要求。可靠性:用户界面的可靠性是指无故障使用的间隔时间。用户界面应能保证用户正确、可靠地使用系统,保证有关程序和数据的安全性。114

用户类型外行型:以前从未使用过计算机系统的用户。初学型:尽管对新的系统不熟悉,但对计算机还有一些使用经验的用户。熟练型:对一个系统有相当多的经验,能够熟练操作的用户。专家型:这一类用户了解系统内部的构造,有关于系统工作机制的专业知识,具有维护和修改基本系统的能力。专家型需要为他们提供能够修改和扩充系统能力的复杂界面。115

界面设计类型116

界面设计类型在选用界面形式的时候,应当考虑每种类型的优点和限制,可以从以下几个方面来考察:(1)使用的难易程度:对于没有经验的用户,该界面使用的难度有多大。(2)学习的难易程度:学习该界面的命令和功能的难度有多大。(3)操作速度:在完成一个指定操作时,该界面在操作步骤、击键和反应时间等方面效率有多高。(4)复杂程度:该界面提供了什么功能、能否用新的方式组合这些功能以增强界面的功能。(5)控制:人机交互时,是由计算机还是由人发起和控制对话。(6)开发的难易程度:该界面设计是否有难度、开发工作量有多大。117

人机交互设计的准则(1)一致性。采用一致的术语、一致的步骤和一致的活动。(2)操作步骤少。使击键或点击鼠标的次数减到最少,甚至要减少做某些事所需的下拉菜单的距离。(3)不要“哑播放”。(4)提供Undo功能。(5)减少人脑的记忆负担。不应该要求人从一个窗口中记住某些信息,然后在另一个窗口中使用。(6)提高学习效率。为高级特性提供联机帮助,以便用户在需要时容易找到。118

界面设计的黄金原则置用户于控制之下减少用户的记忆负担保持界面一致1191、置用户于控制之下1)所定义的交互模式不强迫用户执行不必要的或不希望的动作。例如在Windows操作系统中,有两种对话窗口:即模式和非模式。2)提供灵活的交互交互方式有多种:鼠标、键盘、光笔、声音等。3)允许用户交互可以被中断和撤消

--输入过程中允许“取消”或“暂存”1201、置用户于控制之下4)为熟练的用户给出选择初级用户可能需要一步一步的引导,但熟练用户往往需要高级操作或自定义操作。5)不要让用户介入系统内部技术细节

例如,不要在运行过程中突然出现“内存地址***H已被占用…”而退出系统,或者出现系统错误码后死机,用户看不明白

温馨提示

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

评论

0/150

提交评论