软件设计与编码(精)_第1页
软件设计与编码(精)_第2页
软件设计与编码(精)_第3页
软件设计与编码(精)_第4页
软件设计与编码(精)_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

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

文档简介

软件设计与编码,3,第三章,软件设计阶段的任务与目标,软件设计是对实现软件的结构、系统的数据、系统组件之间的接口以及所用算法的描述。软件设计是软件开发的关键步骤,直接影响软件的质量。在软件需求分析阶段已经完全弄清楚了软件的各种需求,较好地解决了所开发的软件“做什么”的问题,并已在软件需求说明书和数据要求说明书中详尽和充分地阐明了这些需求以后,下一步就要着手实现软件的需求,即软件设计阶段要解决“怎么做”的问题。,3.1软件设计阶段的任务与目标,设计过程的一般模型,设计活动,设计产品,3.1.1软件设计在开发阶段中的重要性,软件设计,编码,软件测试,开发阶段信息流,3.1.1软件设计在开发阶段中的重要性,软件设计阶段要解决“如何做”的问题。这显然是整个软件开发过程的核心问题,所有的开发工作都将根据设计的方案进行。系统的总体结构在该阶段决定,因此软件的总体设计决定了系统的质量。系统结构设计定义软件系统的整体结构,是软件开发的核心步骤。在设计步骤中,建立软件主要成份之间的关系。过程设计则是把结构成份转换成软件的过程性描述。在编码步骤中,根据这种过程性描述,生成源程序代码,然后通过测试,最终得到完整有效的软件。,3.1.2软件设计阶段的任务,总体设计,复审,修改,详细设计,模块描述,复审,修改,软件设计工作流程,3.1.2软件设计阶段的任务,一、软件设计的任务,从工程管理的角度来看,软件设计分两步完成;分为总体设计(概要设计)和详细设计两个阶段。其工作流程如图所示。首先做概要设计,将软件需求转化为数据结构和软件的系统结构。然后是详细设计,即过程设计。通过对结构表示进行细化,得到软件详细的数据结构和算法。,三类设计任务,1、划分模块,确定软件结构开发方法不同,确定软件结构的方法也不同。例如SD法,是从分层的DFD图导出初始的结构图,再对初始的结构图进行改进,获得最终的结构图。一般包括确定系统的软件结构,分解模块,确定系统的模块层次关系。,2、确定系统的数据结构数据结构的建立对于信息系统而言尤为重要。要确定数据的类型,组织、存取方式,相关程度及处理方式等。,3、设计用户界面作为人机接口的用户界面起着越来越重要的作用,它直接影响到软件的寿命。,因此,软件设计阶段的任务可分为三部分:,软件设计的目标,3.1.2软件设计阶段的任务,3.1.2软件设计阶段的任务,二、软件设计的目标在设计阶段应达到的目标是:提高可靠性;提高可维护性;提高可理解性;提高效率。衡量该目标的准则:1、软件实体有明显的层次结构,利于软件元素间控制。2、软件实体应该是模块化的,模块具有独立功能。3、软件实体与环境的界面清晰。4、设计规格说明清晰、简洁、完整和无二义性。,软件设计的目标,常用的设计方法有:SD法、Jackson法、HIPO法、Parnas法、Warnier法等。,3.2软件结构与软件结构图,3.2软件结构与软件结构图,软件结构是软件模块之间关系的表示,它决定了整个系统的结构,也确定了系统的质量。模块之间的关系可有多种,但都可以归结为一种层次关系。软件结构图是总体设计阶段的主要描述工具,它描述了构成系统的基本元素模块及模块之间的调用关系,模块之间的数据传递关系。本节讨论如何进行软件结构的设计,设计的准则以及为了提高软件系统的质量,如何对软件结构进行改进的技术。,3.2.1软件结构的基本概念,二、模块化模块化就是将系统划分为若干个模块,每个模块完成一个子功能。模块化的目的是将系统“分而治之”,模块化能够降低问题的复杂性,使软件结构清晰,易阅读、易理解,易于测试和调试,因而也有助于提高软件的可靠性。,3.2.1软件结构的基本概念,软件结构表示软件系统的构成,是软件模块间关系的表示,下图则为软件结构示意图。下面先介绍几个相关的的概念。,一、模块(Module)模块是程序对象有名字的集合。例如,过程、函数、子程序、宏等,是构成软件系统结构的基本元素。,软件结构图,模块化降低软件复杂度的简单证明,3.2.1软件结构的基本概念,模块化降低软件复杂度的简单证明,令:C(X)表示问题X的复杂度函数;E(X)解决问题X所需工作量的复杂度函数;若:有问题P1,P2;C(P1)C(P2);显然:E(P1)E(P2)由经验:C(P1+P2)C(P1)+C(P2)于是:E(P1+P2)E(P1)+E(P2)将问题(P1+P2)划分为两个问题P1和P2后,其工作量和复杂度都降低。,并非模块分得越小越好,因为模块之间接口的复杂度和工作量增加。显然,每个软件系统都有一个最佳模块数M。注意选择分解的最佳模块数。右上图描述了模块化与软件成本的关系。,软件的层次结构,3.2.1软件结构的基本概念,顶层,1层,2层,扇入为2,扇出为3,扇入为3,3层,4层,软件结构示意图,有关指标:深度:表示软件结构中从顶层模块到最底层模块的层数。宽度:表示控制的总分布。扇出数:指一个模块直接控制下属的模块个数。扇入数:指一个模块的直接上属模块个数。,一个好的软件结构的形态准则是:顶部宽度小,中部宽度大,底部宽度次之;在结构顶部有较高的扇出数,在底部有较高的扇入数。,软件结构图表示软件的系统结构,它是软件模块间关系的表示,软件之间的各种关系,均可表示为层次结构。如图所示。,3.2.2软件的树状结构和网状结构,3.2.2软件的树状结构和网状结构,由模块连接而得到的软件结构最普通的形式就是树状结构和网状结构。在树状结构中,位于最上层的根部是顶层模块,它是程序的主模块。与其联系的有若干下属模块,各下属模块还可以进一步引出更下一层的下属模块,如图所示的树状结构。,树状结构的特点是:整个结构只有一个顶层模块,而对于任何一个下属模块来说,它只有一个上级模块,而且同一层模块之间不发生关系。,网状结构,在网状结构中,任何两个模块间都可以有双向的关系,不分层次。任何两个模块都是平等的,没有从属关系。,网状结构,(a),(b),3.2.2软件的树状结构和网状结构,比较两种结构的特点:对于不加限制的网状结构,由于模块间相互关系的任意性,使得整个结构十分复杂,处理起来势必引起许多麻烦,这与原来划分模块为便于处理的意图相矛盾。所以在软件开发的实践中,人们通常采用树状结构,而不采用网状结构。,模块5,模块5,模块4,模块4,3.2.3软件结构图(SC图),模块1,模块3,模块2,values,values,data,data,模块1,模块2,模块3,values,values,data,data,3.2.3软件结构图(SC图),结构图(StructureChart,简称SC图)是精确表达软件结构的图形表示方法,它以特定的符号表示模块、模块间的调用关系和模块间信息的传递。结构图的主要构成有:模块(Module):,数据:,模块调用图,调用:,data,例:画出打印报告的软件结构图,调用次序为上层调用下层;同层按照数据传递关系确定;一般从左到右执行。执行过程即按照数据流向进行。,报告,计算,获得编辑,确认数据,读入,编辑,打印报告头,打印报告尾,打印,输入EOF,输入,已编辑,已编辑,已编辑,已确认,已确认数据,已确认数据,计算结果,结果,日期,总结果,行,行,行,3.2.3软件结构图(SC图),打印报告,予以确认,3.3模块的独立性,3.3模块的独立性,上一节讨论了关于软件结构与软件结构图的概念,本节进一步讨论影响软件系统质量的另一个关键问题,模块的独立性问题。模块化方法已经为所有工程领域所接受。模块化的主要优点是,模块化设计降低了软件系统的复杂性,使得系统容易修改,同时使得系统各个部分可以并行开发,从而提高了软件的生产率。提高模块质量在于提高模块独立性。模块的独立性用耦合性和内聚性来衡量。,3.3.1模块独立性(moduleindependence),3.3.1模块独立性,“模块”,又称“构件”,一般指用一个名字可调用的一段程序。它一般具有如下三个基本属性:功能即指该模块实现什么功能,做什么事情。必须注意:模块功能,应是该模块本身的功能加上它所调用的所有子模块的功能。逻辑即描述模块内部怎么做。状态即该模块使用时的环境和条件。所谓模块的独立性,是指软件系统中每个模块只涉及软件要求的具体的子功能,而和软件系统中其他模块的接口是简单的。即功能专一,模块之间无过多的相互作用的模块。这种类型的模块可以并行开发,模块独立性越强,开发越容易。独立性强的模块,还能减少错误的影响,使模块容易组合、修改及测试。,3.3.1模块独立性(moduleindependence),3.3.1模块独立性,模块独立性的度量标准是两个定性准则:耦合性用于描述模块之间联系的紧密程度。内聚性用于描述模块内部联系的紧密程度。模块独立性比较强的模块应该是具有高内聚性和的低耦合度。,3.3.2耦合性(Coupling),3.3.2耦合性,耦合性是指软件结构中模块相互连接的紧密程度,是模块间相互连接性的度量。模块分解的一个目标是使块间联系尽可能小,块间联系的大小可从三个方面衡量:,方式块间联系方式有“直接引用”或“用过程语句调用”。作用块间传送的共用信息(参数)类型,可为“数据型”、“控制型”或“混合型”(数据/控制型)。数量块间传送的共用信息的数量。,耦合性的几种类型,内容耦合,公共耦合,高,低,1、内容耦合(contentcoupling)一个模块直接访问另一模块的内部数据。一个模块不通过正常入口转到另一模块的内部。一个模块有多个入口。两个模块有部分代码重迭。,3.3.2耦合性,外部耦合,控制耦合,特征耦合,数据耦合,非直接耦合,3.3.3内聚性,3.3.3内聚性(cohesion),3.3.3内聚性,块内联系的类型分为六类:,偶然性,逻辑性,弱,内聚性,强,内聚性表示一个模块内部各种数据和各种处理之间联系的紧密程度,它是从功能的角度来度量模块间的联系。显然,块内联系愈紧,即内聚性愈强,模块独立性愈好。,时间性,过程性,通信性,顺序性,功能性,3.3.4信息隐蔽,3.3.4信息隐蔽,每个模块的实现细节对于其他模块来说是隐蔽的。也就是说,模块中所包含的信息(数据和过程)不允许其他不需要这些信息的模块使用。该原则有利于提高模块的内聚性。由于一个软件系统在整个软件生存期内要经过多次修改,在划分模块时要采取措施,使得大多数过程和数据对软件的其他部分是隐蔽的。这样,在将来修改软件时,可将偶然引入错误所造成的影响限制在一个局部范围之内,不致波及到软件的其他部分。,由parnas方法提倡的信息隐蔽如下:,3.4结构化设计(SD)方法,3.4结构化设计(SD)法,结构化设计方法(StructuredDesign,SD)是结构化开发方法的核心,与SA法、SD法密切联系,主要完成软件系统的总体结构设计。,SD法的设计步骤,三、SD法的设计步骤,1、总体设计解决系统的模块结构,即分解模块,确定系统模块的层次结构。任务:划分模块确定模块功能确定模块间调用关系确定模块间界面文档:模块结构图及其模块功能说明。2、详细设计对模块图中每个模块的过程进行描述,常用的描述的方式有:伪代码,流程图,N-S图,PAD图等。,SD法也分为总体设计和详细设计两个阶段:,3.4.1结构化设计方法概述,SD法的设计总则,3.4.1结构化设计方法概述,SA法总体设计的步骤是:从DFD图导出初始的模块结构图。按照SD法设计总则,改进模块结构图。,四、SD法的设计总则,根据软件结构的准则,模块化准则,软件独立性准则得到结构化设计的总则是:,“降低块间联系,提高块内联系”,3.4.2数据流图的分类与典型的系统结构,3.4.2数据流图的分类与典型的系统结构,一、DFD图的分类,事务处理型(transaction)事务分析这类数据流图可看成是对一个数据经过某种加工后,按加工的结果选择一个输出数据流继续执行的处理。,中心变换型(transformcenter)变换分析其特点是:DFD图可以明显分为“输入-处理-输出”三部分。,典型的系统结构,二、典型的系统结构变换型系统结构图通过变换分析技术,将中心变换型的DFD图转换而得的SC图,称为变换型系统结构图。事务型系统结构图通过事务分析技术,将事务处理型的DFD图转换为的SC图,称为事务型的系统结构图。,3.4.2数据流图的分类与典型的系统结构,确定主加工及逻辑输入/输出主加工描述了系统的主要功能、特征。其特点是:输入/输出数据流较多,往往主加工不止一个。逻辑输入/输出是指输入/输出主加工的数据流。输入流是把物理输入转换为逻辑输入的数据流。输出流是将逻辑输出转换为物理输出的数据流。,输入流,转换流,输出流,输入流,转换流,输出流,进行一级分解,设计上层模块为每个输入设计一个输入模块,为每个输出设计一个输出模块,同时为每个主加工设计一个处理模块。,M,CI,CT,CO,C,C,D,D,CI,CT,CO,3.4.3变换分析技术,3.4.3变换分析技术,变换分析技术,变换分析步骤,进行二级分解,设计中下层模块这一步的工作是自顶向下,逐步细化,为第一层的每一个输入模块、输出模块、处理模块设计它们的从属模块,设计下层模块的顺序一般从设计输入模块的下层开始。,M,CI,CT,CO,处理C,取B,转换B,转换D,送E,进一步细化,取A,转换A,转换E,送F,3.4.3变换分析技术,变换分析技术,F,3.4.4事务分析技术,3.4.4“事务分析”技术,确定流界;首先从数据流图中找出事务流、事务处理中心和事务路径。,对应模块图,事务控制,接受事务,发送事务,P1,P2,P3,进行一级分析,设计上层模块;对事务中心应设计“事物控制”模块;对事物流应设计“接受事物”模块;对事务路径,应设计“发送控制”模块。,进行二级分解,设计中下层模块;接受分支,用类似于转换处理型数据流图中对输入数据流的方法设计中下层。对于发送分支,在发送控制模块下为每条事务路径设计一个事务处理模块,这一层称为事务层。,事务分析技术,3.4.5实例:银行贷款文件管理(MFUP),3.4.5应用举例,每个贷款用户在贷款文件中占有一个记录,记录结构如表3-1。,表3-1,分析:,要求对贷款文件进行修改,修改信息由卡片输入,卡片上的修改信息格式如下:,1-5位6-9位10位起账号空修改值1*修改值2*.*(序号)其中*为分界符,*为结束符,贷款文件的记录格式(如表3-1)修改记录(卡片)格式,3.需求分析结果贷款文件的DFD图,是一种混合的DFD图。输入为:卡片和旧记录。输出为:新记录和报告。4、将DFD图转换为模块结构图。,3.4.5应用举例,图3.28修改贷款文件DFD,抽出修改,抽出编辑,顺序卡片,修改信息,2,3,4,5,6,7,9,编辑卡片加工分解,主加工是?,报告,报告,修改信息,顺序记录,新记录,3.4.5应用举例,修改贷款文件的DFD图,需求分析结果DFD图,答案,主加工,图3.29模块结构图,贷款文件管理系统,取顺序记录,修改记录,打印报告,打印记录,比较账号,取修改信息,读旧记录,检查顺序,取卡片,读卡片,检查顺序,卡片,卡片,顺序卡片,旧记录,旧记录,顺序记录,顺序记录,顺序卡片,顺序卡片,已修改,“编辑卡片”应继续向下分解,是典型的“事务处理”型的DFD图。,写记录,3.4.5应用举例,转换后的模块图如图所示。,将DFD图转换为模块结构图,按照“降低块间联系,提高块内联系”的设计总则进行修改,完善系统的模块图,写出模块的功能说明。,具体应从以下方面改进:1)尽可能建立功能模块功能模块具有最强的内聚性,应满足信息屏蔽原则:一个模块内所包含的信息(过程和数据)对不需要这些信息的模块是不能访问的(黑盒)。功能模块的组成:执行某项任务的部分出错处理部分返回结束标志,3.4.6模块结构图的改进,3.4.6模块结构图的改进,3.4.6模块结构图的改进,2)消除重复功能若两模块含有重复的部分,应设法将重复的功能消去。重复部分有完全相同和部分相同的情况,在确定重复部分及实施方案时,一定要谨慎小心。,3.4.6模块结构图的改进,图3.31、图3.32,控制范围结构方面的特点,包括模块及其所有下属模块。作用范围判断所涉及到的模块,是从功能特点考虑的。SD方法认为:当作用范围为控制范围的子集时,才能获得较低的块间联系。如下图中的设计,判定的作用范围恰好在判定所在模块的下一层。,3)模块的作用范围与控制范围,模块TOP的控制范围是:TOP、X、T、B、A、B1、B2;模块B的控制范围与作用范围相同,,模块A的控制范围:A、B、C、D、G、E、F则F的的作用范围:B、E、F,3.4.6模块结构图的改进,图3.33控制范围与作用范围,显然,图(a)不满足作用范围应与控制范围的原则,模块F的作用范围不在控制范围之内。图(b)中模块TOP和图(c)中模块B虽然满足上述原则,但其作用范围所涉及到的模块不是直接的。图(d)的模块设计最合理。,3.4.6模块结构图的改进,应用范围与作用范围举例,模块图的改进,4)模块的大小适当模块大小指其篇幅,一般模块大小约50-100行为宜。5)模块的扇入扇出数不宜太多一个模块调用其他模块的个数,称为该模块的扇出。模块的扇出不宜过大,一般认为不要超出个。一个模块被其他模块调用的个数,称为该模块的扇入。扇入越大,除服务性模块外,模块的扇入扇出数不宜太多。否则块间联系增加。,3.4.6模块结构图的改进,举例:,银行贷款文件管理中,编辑卡片加工,编辑卡片,卡片,抽出修改项,编辑修改项,卡片,项,项,已编辑项,编辑项2,编辑项1,编辑项14,项1,项2,已编辑项1,已编辑项2,项14,已编辑项14,图3.30编辑卡片的分解,已编辑卡片,模块图的改进,模块图的改进,操作层设计,模块图的改进,拒绝超长,拒绝非字母数字项,拒绝非字母项,拒绝非数字项,调整长度,拒绝太短,图3.38细节层设计,查字符类型,查字符长度,报告出错,3.详细设计,一、任务详细设计阶段的任务是开发一个可以直接转换为程序的软件表示,即对系统中每个模块的内部过程进行设计和描述。二、常用的描述方法工具1、流程图2、结构化流程图(N-S图)3、PAD图问题分析图,3.1程序流程图,图3.4流程图,N-S图由而且仅由顺序、选择、循环三种基本结构组成。基本图例如下:,3.2NS图,3.6.2NS图,图3.45NS图,a,b,条件1,T,F,CaseXi,i=2,3,4,X2,X3,X4,当条件3成立,条件2,直到条件4成立,直到条件成立,c,d,e,f,g,h,i,j,顺序结构,选择结构,多分支选择结构,先判定型循环结构,后判定型循环结构,F,T,T,F,N-S图举例,3.2NS图,NS图举例,3、PAD图问题分析图(problemAnalysisDiagram)其基本控制结构如下:,3.3PAD图,3.3PAD图,PADL图基本结构,例1:对数组X进行排序。“自顶而下,逐步求精”,1、循环一次,排好一个Xh,2、细化,(a),(b),(b),(a),3、连接各图,构成完整的PAD图,W:=XhXh:=XjXj:=w,例1,3.3PAD图,图3.48PAD图应用举例,BEGINFIRST:=K1;SECOND:=0;,FIRST=KISECOND=0,SECOND=FIRSTFIRST=KI,SECOND=KI,ELSESECOND:=KIENDENDEND.,PASCAL源程序段,对应PAD图,FORI:=2TONDO,BEGINIFKISECONDTHEN,BEGINIFKIFIRST,THENBEGINSECOND:=FIRST;FIRST:=KIEND,PAD图应用例2,例2,3.6.3PAD图,图3.49PAD图应用举例,A、DEF图式:一个加工在一页中画不下时,用DEF图式定义后,可在另一页上画出。,B、N+1/2循环,PAD图的扩充图式,3.6.3PAD图,图3.50PADL图扩充图式,PDL(ProgramDesignLanguage)程序设计语言这是一种结构化的语言。是非形式化比较灵活的语言,用于描述模块内部过程的具体算法,以便在开发人员之间比较精确的进行交流。PDL的语法是开放式的,其外层语法是确定的,而内层语法则不确定。外层语法描述控制结构它用类似于一般程序设计语言控制结构的关键字:如:IF-THEN-ELSEWHILE-DOREPEAT-UNTILDOCASEDOWHILE等表示。有时还用关键字反排,表示控制结构结束:DO-ODIF-FI,3.4PDL语言,例如:ifXisnotnegativethenreturn(squarerootofXasarealnumber);elsereturn(squarerootof-Xasanimaginarynumber);外层语法IF-ELSE-THEN是确定的,内层操作“squarerootofX”是不确定的。,4、PDL语言,1、可使用性使用简单用户界面中所用术语的标准化和一致性具有HELP功能快速的系统响应和低的系统成本具有容错能力2、灵活性考虑用户的特点、能力、知识水平。提供不同的系统响应信息。提供根据用户需求制定和修改界面。3、界面的复杂性与可靠性复杂性界面规模及组织的复杂程度。应该愈简单愈好。可靠性指无故障使用的时间间隔。用户界面应该能够保证用户正确、可靠地使用系统,及程序、数据的安全。,3.6.1用户界面应具有的特性,1、用户特性分析用户模型了解所有用户的技能和经验,针对用户能力设计或更改界面。从以下方面分析:用户类型通常分为:外行型、初学型、熟练型、专家型。用户特性度量与用户使用模式和用户群体能力有关。包括:用户使用频度、用户用机能力、用户的知识、思维能力等。,3.6.2用户界面设计的任务,这部分工作应该与软件需求分析同步进行。包括以下内容:,2、用户界面的任务分析任务模型(DFD图)是对系统内部活动的分解,不仅要进行功能分解(用DFD图描述),还要包括与人相关的活动。每个加工即一个功能或任务。3、

温馨提示

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

评论

0/150

提交评论