软件工程ch4软件设计_第1页
软件工程ch4软件设计_第2页
软件工程ch4软件设计_第3页
软件工程ch4软件设计_第4页
软件工程ch4软件设计_第5页
已阅读5页,还剩157页未读 继续免费阅读

下载本文档

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

文档简介

第四章

结构化软件设计SDLC设计阶段的活动网络的设计与集成应用程序体系结构的设计用户界面的设计系统接口的设计数据库系统的设计与集成细节设计原型系统的建立系统控制的设计与集成9.1理解设计要素4.1软件设计的基本概念与原理模块相对独立组成:数据说明、执行语句表现:函数、子程序、过程类对象特征输入/输出接口功能内部数据程序代码逻辑状态运行环境总体设计的概念和原理──模块化模块化的目的模块化:把程序划分成为若干个模块,独立完成若干个功能,在把他们组成一个集体,可以完成指定的功能,满足问题的要求。“各个击破”原则使软件结构清晰;使软件容易测试和调试,从而提高软件的可靠性;提高软件的可修改性但不能无限分割总体设计的概念和原理──模块化C(P1)>C(P2)E(P1)>E(P2)C(A+B)>C(A)+C(B)E(A+B)>E(A)+E(B)总体设计的概念和原理──模块化成本或工作量模块数量软件总成本集成(接口)成本成本/模块M最小成本区域模块化的程度与软件成本的关系抽象与逐步求精抽象与逐步求精:忽略细节,分层理解问题,自顶向下层层加细。抽象层次Ⅰ:可使用自然语言,配合使用面向问题的专业术语,概括地描述问题的解法抽象层次Ⅱ:任务需求的描述。列出“What”而不是“How”抽象层次Ⅲ:程序过程表示。在这个抽象层次上,给出了初步的过程表示,所用的术语都已面向软件,而且模块化的工作已经开始显露

软件工程的先辈们已将抽象化思想用于软件设计的不同方面例:开发一个CAD软件时的三种抽象层次抽象层次Ⅰ.

用问题所处环境的术语来描述这个软件:

该软件包括一个计算机绘图界面,向绘图员显示图形,以及一个数字化仪界面,用以代替绘图板和丁字尺。所有直线、折线、矩形、圆及曲线的描画、所有的几何计算、所有的剖面图和辅助视图都可以用这个CAD软件实现……。抽象层次Ⅱ.

任务需求的描述。

CADSOFTWARETASKS

userinteractiontask;

2-Ddrawingcreationtask;graphicsdisplaytask;

drawingfilemanagementtask;

end.

在这个抽象层次上,未给出“怎样做”的信息,不能直接实现。抽象层次Ⅲ.

程序过程表示。以2-D(二维)绘图生成任务为例:

PROCEDURE:2-Ddrawingcreation

REPEATUNTIL(drawingcreationtaskterminates)

DOWHILE(digitizerinteractionoccurs)digitizerinterfacetask;

DETERMINEdrawingrequestCASE;

line:linedrawingtask;

rectangle:rectangledrawingtask;

circle:circledrawingtask;

……抽象与逐步求精(续)启示:模块化和抽象层次思想相结合,可以使从不同的角度来看系统最高层次的模块:反映了整体的解决方案,隐藏了那些可能扰乱视线的细节,能够看到一个系统所要完成的主要功能。更低的抽象层次:反映了某部分更多的细节信息隐蔽(Informationhiding)

信息隐蔽:应用模块化原理时,一个重要原则就是将信息尽量隐藏在相应的处理模块中。该项技术最早是由Parnas提出的核心内容:一个模块中所包含的信息,不允许其他不需要这些信息的模块使用。有效的模块化可以通过定义一组相互独立的模块来实现,这些独立的模块彼此间仅仅交换那些为了完成相应功能必须的信息抽象帮助定义构成软件的结构,而信息隐蔽则可定义和实施对模块的过程细节和局部数据结构的存取限制信息隐藏的图示说明模块控制接口"secret"•算法•数据结构•外部接口的细节•资源分配策略用户模块的详细设计信息隐蔽Stringpassword;voidsetPassword(Stringpswd)

{password=pswd;}booleanverifyPassword(Stringuserinputpswd)

{...}

模块的独立性模块之间的耦合性不同模块间的联系紧密程度的度量越小越好模块的内聚性模块内部各元素间相互结合的紧密程度的度量越大越好影响耦合的因素联系的作用模块相互之间的影响程度,取决于传送的信息流的类型,通常包括三种:数据型、控制型和混合型传送的信息流是数据型时耦合度最低如果一个模块直接转移到另一模块的某点上,就影响了两个模块的控制。通常通过传递参数来传递控制,如传递一个开关量来告诉另一模块做何工作,即控制型的信息流。──耦合度很高当一个模块修改另一个模块的代码时,对修改者,修改的代码是当作数据来处理的,而对被修改的模块,则可能是对控制的改变,这种情况最难处理,耦合度最高影响耦合的因素耦合的时间有以下几种情况:编写程序时(程序员编写一行语句时)模块编译或汇编时程序模块连接时系统运行时耦合出现的时间越晚,程序就越容易修改,越灵活耦合性:由小到大非直接耦合(NondirectCoupling)两个模块没有直接关系(模块1和模块2),模块独立性最强。模块1模块2模块3模块4数据耦合(DataCoupling)一模块调用另一模块时,被调用模块的输入、输出都是简单的数据(若干参数)。

通过模块参数交换信息属松散耦合。开发票计算水费单价数量金额20标记耦合(复合型耦合) 如两个或一组模块通过传递数据结构(不是简单数据,而是记录、数组等)加以联系,或都与一个数据结构有关系,则称这两个模块间存在标记偶合。21标记耦合举例计算水电费计算水费计算电费住户情况水费电费住户情况“住户情况”是一个数据结构,图中模块都与此数据结构有关。“计算水费”和“计算电费”本无关,由于引用了此数据结构产生依赖关系,它们之间是标记偶合。用户姓名家庭住址用水量用电量住户情况22将标记耦合修改为数据耦合举例计算水电费计算水费计算电费本月用水量本月用电量水费电费23控制耦合一模块向下属模块传递的信息

(开关量、标志等控制被调用模块决策的变量)控制了被调用模块的内部逻辑。24控制耦合举例A计算平均分或最高分B平均/最高(控制信号)成绩读入分数输出结果计算平均分计算最高分平均/最高?B25 控制耦合增加了理解和编程的复杂性,调用模块必须知道被调模块的内部逻辑,增加了相互依赖将被调用模块内的判定上移到调用模块中进行被调用模块分解成若干单一功能模块去除模块间控制耦合的方法26改控制耦合为数据耦合举例A计算平均分B1平均成绩最高成绩计算最高分B227外部耦合如果两个模块都访问同一个全局简单变量而不是同一全局数据结构,而且,不是通过参数表传递该全局变量的信息,则这两个变量具有外部耦合。例如,模块A和模块B之间的通信不是通过参数,而是通过全局变量,并且两个模块内部都可以修改全局变量。设计时,尽量不要使用外部耦合28公共耦合(公共数据区耦合) 一组模块引用同一个公用数据区(也称全局数据区、公共数据环境)。公共数据区指:

全局数据结构共享通讯区内存公共覆盖区等29公共耦合举例30软件可理解性降低诊断错误困难软件可维护性差软件可靠性差(公共数据区及全程变量无保护措施)慎用公共数据区和全程变量!!!

只有在模块之间共享的数据很多,并且通过参数表传递不方便时,才使用公共耦合公共耦合存在的问题31内容耦合如果发生下列情形,两个模块之间就发生了内容耦合一个模块直接访问另一个模块的内部数据一个模块不通过正常入口转到另一模块内部两个模块有一部分程序代码重迭(只可能出现在汇编语言中)一个模块有多个入口(表明该模块有几种功能内容耦合举例一模块直接访问另一模块的内部信息(程序代码或数据)最不好的耦合形式!!!ABAB模块代码重叠Entry1……Entry1……多入口模块33模块内聚内聚性:由小到大偶然内聚(低)为节省空间将不同功能相互无联系的语句组合在一起偶然内聚(巧合内聚)模块M中的三个语句没有任何联系,只因为A、B、C三个模块都要用到这些语句缺点:可理解性差,可修改性差ABCMMOVEOTORREADFILEFMOVESTOT逻辑内聚把几种相关功能(逻辑上相似的功能)组合在一模块内,每次调用由传给模块的参数确定执行哪种功能。实现多个逻辑上相同或相似的功能逻辑内聚举例ABCEFGABCEFGA1B1C1EFG模块内部逻辑

E、F、G逻辑功能相似,组成新模块EFG缺点:增强了耦合程度(控制耦合)

不易修改,效率低公用代码段公用代码段逻辑内聚举例时间内聚(经典内聚)模块完成的功能必须在同一时间内执行,这些功能只因时间因素关联在一起。例如:初始化系统模块系统结束模块紧急故障处理模块等均是时间性聚合模块这种模块在20世纪80年代的应用程序中使用较多,没有任何复用价值,并且一旦其他模块需要修改时,对该模块的影响较大,所以现在主张将变量的初始化操作都归入到相关的模块中过程内聚(顺序性组合)模块内各处理成分相关,且必须以特定次序执行,如把流程图中的某一部分划出组成模块,得到的就是过程内聚模块过程内聚模块可能包含一个完整功能的一部分或者包含一个或几个功能再加上其它功能的一部分,会导致模块的高度可变性如果选择不当,就不能使这种模块完成独立的任务,也无法在新的系统中独立使用。所以它的内聚程度仍然比较低,模块间的耦合度还比较高。过程内聚(顺序性组合)举例计算模块循环处理模块判断处理模块通信内聚模块内各部分使用相同的输入数据,或产生相同的输出结果产生职工工资报表并计算平均工资模块产生工资报表计算平均工资工资记录工资报表平均工资信息内聚模块完成多个功能,各功能都在同一数据结构上操作,每一功能有唯一入口,实现时,一般采用选择结构来实现功能。学生记录数据查找登录删除修改几个加工同时引用一个共同的数据功能内聚模块仅包括为完成某个功能所必须的所有成分。模块所有成分共同完成一个功能,缺一不可

内聚性最强函数A-处理1函数B-处理2函数C-处理34.2体系结构设计概述4.2.1软件设计的任务从工程管理的角度来看,软件设计分两步完成。总体(概要)设计,将软件需求转化为数据结构和软件的系统结构。详细设计,包括过程(处理流程)设计、人机对话设计、界面设计、输入输出设计等。总体设计的任务及目标开发阶段的信息流总体设计任务1、制定规范在进入软件开发阶段之初,首先应为软件开发组制定在设计时应该共同遵守的标准,以便协调组内各成员的工作。阅读和理解软件需求说明书,确认用户要求能否实现,明确实现的条件,从而确定设计的目标,以及它们的优先顺序根据目标确定最合适的设计方法规定设计文档的编制标准规定编码的信息形式,与硬件,操作系统的接口规约,命名规则总体设计任务2、软件系统结构的总体设计软件系统结构的设计是总体设计关键的一步,直接影响到下一阶段详细设计与编码的工作。软件系统结构的设计是以模块为基础的──以需求分析的层次结构为依据采用某种设计方法,将系统按功能划分成模块的层次结构确定每个模块的功能建立与已确定的软件需求的对应关系确定模块间的调用关系确定模块间的接口评估模块划分的质量总体设计任务3.数据结构及数据库设计数据结构设计:需求分析阶段,数据字典对数据的组成、操作约束、数据之间的关系等方面进行了描述,确定了数据的结构特性。总体设计阶段主要是对数据字典的一些相关内容加以细化,到详细设计阶段则规定其具体的实现细节,如确定输入,输出文件的详细的数据结构结合算法设计,确定算法所必需的逻辑数据结构及其操作数据库设计概念结构设计、逻辑结构设计、物理结构设计设计数据库的模式、子模式,进行数据完整性和安全性的设计确定对逻辑数据结构所必需的那些操作的程序模块(软件包)总体设计任务4.可靠性设计可靠性设计也叫做质量设计在运行过程中,为了适应环境的变化和用户新的要求,需经常对软件进行改造和修正。在软件开发的一开始就要确定软件可靠性和其它质量指标,考虑相应措施,以使得软件易于修改和易于维护

5、编写总体设计文档国标GB8576-88的“计算机软件产品开发文件编制指南”规定,软件设计文档可分为:概要设计说明书:集中于软件结构描述,如系统目标和软件的总体设计、在系统中的作用、与硬件、软件和人员的接口、软件的主要功能、模块的划分、模块功能及数据设计数据库设计说明书:主要给出DBMS系统的选择、所使用的DBMS简介、数据库的概念模型、逻辑设计结果以及模式、子模式、完整性、安全性和优化方法等用户手册:对需求分析阶段编写的用户手册进行补充测试计划:修订需求分析阶段编写测试计划,对测试策略、方法、步骤提出明确要求总体设计任务6、设计审查和复审最后应该对总体设计的结果进行严格的技术审查在技术审查通过之后再由使用部门的负责人从管理角度进行复审通过审查,对设计部分是否完整地实现了需求中规定的功能、性能等要求、设计方案的可行性、关键的处理及内外部接口定义的正确性、有效性以及各部分之间的一致性等进行验证总体设计任务4.2.2体系结构设计中可采用的工具

1.HIPO图HIPO图(层次图+输入/处理/输出图)H图:描述总体模块结构的层次IPO图:描述每个模块输入/输出和处理功能工资计算系统的H图计算工资模块的IPO图4.2.2体系结构设计中可采用的工具

2.结构图结构图主要成分模块:用方框表示,方框中写有模块的名字,一个模块的名字应适当地反映这个模块的功能,这就在某种程度上反映了块内联系调用:从一个模块指向另一个模块的箭头(或直线)表示模块间的调用模块间的信息传递:模块问还经常用带注释的短箭头表示模块调用过程中来回传递的信息。有时箭头尾部带空心圆的表示传递的是数据,带实心圆的表示传递的是控制信息

SD方法在总体设计中的主要表达工具结构图中的基本符号ABCABC符号含义用于表示模块,方框中标明模块的名称用于描述模块之间的调用关系用于表示模块调用过程中传递的信息,箭头上标明信息的名称;箭头尾部为空心圆表示传递的信息是数据,若为实心圆则表示传递的是控制信息

表示模块A选择调用模块B或模块C表示模块A循环调用模块B和模块C结构图(StructureChart)结构图──SC中的四种模块传入模块(a)(b)AA传出模块BB变换模块(c)CD协调模块E(d)EFF结构图(StructureChart)同名字的模块在结构图中仅出现一次。调用关系只能从上到下。不严格表示模块的调用次序,习惯上从左到右。有时为了减少连线的交叉,适当地调整同一层模块左右位置,以保持结构图的清晰性。4.2.3体系结构设计的原则1.降低模块的耦合性、提高模块的内聚性耦合性:模块与模块之间的关系

尽量使用数据耦合内聚性:模块内各部分之间的关系

最好实现功能内聚2.保持适中的模块规模模块规模过大:模块实现功能过多降低程序可读性规模过小模块数过多不利于上层模块控制10~100句/模块合并小模块、拆分大模块3.模块的扇入与扇出扇入:上级模块调用下级模块该模块的上级模块数称为该模块的扇入右图中模块S的扇入数为n模块的扇入数越大则调用该模块的上级模块越多该模块复用性越高将多个模块的重复功能编写独立的模块,以提高程序的重用性,SM1M2M3Mn…3.模块的扇入与扇出扇出:上级模块调用下级模块该模块可调用的下级模块数右图中模块S的扇出数为m模块的扇出数越大使模块的调用控制过于复杂原因:模块分解过快所致解决方法:填加中间层,降低分解速度模块扇出数过小扇出为1将下级模块合并到上级模块SG1G2G3Gm…会员信息管理管理员增加新会员管理员修改会员信息管理员删除会员销售部修改会员信息销售部删除会员销售部增加新会员领导查询会员信息销售部查询会员信息会员信息管理管理员增加新会员管理员修改会员信息管理员删除会员销售部修改会员信息销售部删除会员销售部增加新会员销售部查询会员信息领导查询会员信息管理员管理会员销售管理会员领导查询会员4.模块的深度和宽度-两者相互对立深度模块层次数反应系统规模程序中的表现:嵌套调用深度过大解决方案:将简单模块与上级模块合并宽度同一层次上模块数最大值反应系统复杂性程序中表现:子模块与扇出有关宽度过大如何解决?增加中间层模块设计准则深度

=分层的层数。过大表示分工过细。宽度

=结构图中模块数最多的那层的模块个数。过大表示系统复杂度大。扇出

=一个模块直接调用\控制的模块数。

3fan-out9扇入

=直接调用该模块的模块数。多扇入的模块通常是用公用模块

在不破坏独立性的前提下,fan-in大的比较好。3.模块高扇入与适当扇出5.模块作用域控制域作用域受该模块内一个判定条件影响的所有模块控制域该模块本身及其下属模块实例:模块C的控制域包括:CEFGH由于模块C中存在一个判定条件影响模块CDEFGHD,所以模块C的作用域包括CDEFGHD作用域不属于控制域导致:模块C对模块D的控制必须通过B来执行模块间耦合性增大解决方案一:判定位置上移解决方案二:将超出模块控制域部分的模块下移MABCDEFHG模块设计准则TopAYBB1XTopABB1B2XTopYABXAYBB1B2X图1.作用域在控制域之外图2.作用域在控制域之内,但判定位置太高图3.作用域在控制域之内,正确实现图4.理想的作用域和控制域作用域判定6.降低模块接口的复杂程度即:降低模块间耦合性接口应简单清晰减少接口间传递信息的个数,降低信息的复杂性尽量保证是简单数据减少:数据结构、对象等数据类型作为接口传递数据4.2.4体系结构设计说明书引言:编写说明书的目的、背景、定义术语和缩略语、参考资料说明现行系统问题系统前景总体设计软件需求规定、运行环境、处理流程和总体结构不涉及具体模块的实现细节运行设计模块组合、运行控制方式模块设计各模块性能模块间接口数据设计逻辑数据结构(建立在E-R图至上)出错处理设计各种错误及所采取处理错误的措施Java中Exception4.3面向数据流的体系结构设计方法设计——将信息需求转换成数据结构、程序结构和过程性表示的多步骤过程。系统设计的角度不同,分三类:面向数据流的设计,过程驱动设计面向数据结构的设计,数据驱动设计面向对象的设计一.面向数据流的设计基于模块化、自顶向下、结构化程序设计的基础实现,实施要点:研究分析数据流图根据数据流图决定问题类型由数据流图推导出系统初始结构图利用启发式原则改进系统初始结构图修改补充数据字典制定测试计划1.典型的系统结构形式结构化设计:

数据流图表示的信息程序结构设计描述1)系统结构中的模块原子模块——系统结构图中底层不能再被分解的模块。完全因子分解系统——一个软件系统的全部实际加工(数据处理或计算)都有底层原子模块完成,非原子模块仅仅执行控制或协调功能。完全因子分解系统是最理想的,也是我们在软件设计中希望达到的目标。转换为系统结构图中的四种类型的模块:①传入模块-逻辑输入数据流从下属模块取得数据处理数据结果上传给上级模块②传出模块-逻辑输出数据流从上级模块获得数据处理数据结果传送给下属模块③变换模块(加工模块)—计算模块从上级模块取得数据特定处理,转换数据形式传送回上级模块④协调模块-对下属模块进行协调和管理在较高层出现,协调和管理下属模块出现在输入/输出部分或数据加工部分传入模块传出模块变换模块协调模块SD方法──数据流图的类型变换型:变换型DFD是一个线性结构,由输入、变换和输出三部分组成SD方法──数据流图的类型事务型:事务型DFD中,数据沿输入通路到达一个处理,这个处理将输入分为许多相互平行的加工路径,并根据输入数据的类型,选择某一加工路径SD方法──数据流图的类型变换/事务混合型:SD方法──设计过程精化数据流图区分事务中心和数据接收路径映射成变换结构类型区分输入和输出分支映射成事务结构用设计准则精化软件结构导出接口描述和全程数据结构复查详细设计“事务”“变换”事务分析变换分析SD方法的两种映射方法变换型DFD初始SC变换分析事务型DFD初始SC事务分析初始的SC主模块输入模块主加工模块输入模块由变换分析产生接收模块调度模块动作1模块动作2模块动作3模块由事务分析产生事务控制模块SD方法──变换分析第一步:确定DFD中的变换中心、逻辑输入、逻辑输出

通常几股数据流的汇合处就是系统的变换中心或从物理输入(出)端开始,沿(逆)数据流方向向系统中心寻找,直到有这样的DF,它不能再看做是系统的输入(出)时,则它的前一数据流就是系统的逻辑输入(出),介于逻辑输入和逻辑输出间的加工就是变换中心从输入设备获得的物理输入一般要经过编辑、数制转换、格式变换、合法性检查等一系列预处理变成逻辑输入;同样,逻辑输出一般也要经过格式转换等处理后再进行物理输出SD方法──变换分析BCADEQPRWUVabcedrpuwv变换中心输入部分输出部分SD方法──变换分析第二步:一级分解,设计软件结构的顶层和一层模块──建立初始结构图变换中心MCMTMAMESD方法──变换分析初始结构图MCMTMAME第一层顶层c,ec,eu,wu,w输入模块输出模块主加工模块SD方法──变换分析第三步:第二级分解(分解SC各分支)

自顶向下分解,设计输入分支、输出分支、中心变换分支的中、下层模块SD方法──变换分析:输入分支输入模块的功能是向调用它的上级模块提供数据,所以它必须要有一个数据来源,因此它需要两个下属模块:一个接收数据另一个把这些数据变换成它的上级模块所需要的数据格式SD方法──变换分析BCADEQPRWUVabcedrpuwv变换中心输入部分输出部分SD方法──变换分析输入分支的分解⊙MACBAbacEDdec,eMAGetCbacReadDdec,eBtoCbcdeabGetEGetBDtoEAtoBReadASD方法──变换分析BCADEQPRWUVabcedrpuwv变换中心输入部分输出部分SD方法──变换分析输出分支的分解MEWWriteVuuw,uvvvPutUUtoVMEUWriteWwwuw,uV(1)(2)SD方法──变换分析BCADEQPRWUVabcedrpuwv变换中心输入部分输出部分SD方法──变换分析中心加工模块的分解MTPQRec,pru,wprSD方法──成绩管理系统模块图SD方法──成绩管理系统模块图成绩管理系统成绩统计成绩登记成绩打印成绩档案综合评分补考通知成绩通知单成绩通知单补考通知综合评分成绩档案成绩录入成绩验证成绩档案单科成绩单科成绩SD方法──事务分析

任何情况下都可使用变换分析方法设计软件结构,但如数据流具有明显的事务特点时(有一个明显的事务中心),以采用事务分析方法为宜。步骤:第一步:在DFD上确定事务中心、接收和发送部分第二步:画出SC框架,把DFD上的三部分分别映射为事务控制模块、接收模块和调度模块。第三步:分解细化接收分支和发送分支,完成初始SCSD方法──事务分析事务分析的映射方法总控调度C路径B路径A路径A路径B路径C路径接收路径SD方法──事务分析举例IMLNOabcdfeghSD方法──事务分析举例初始结构图输入

aXX系统变换控制aLMagdbcfe

输出he、f、ge、f、gN结构图细化SD方法──事务分析举例PT2T1TiA2D2A1D1A3AjDk事务层操作层细节层处理层主模块事务加工模块操作模块细节模块SD方法──事务分析举例输入

aXX系统变换控制aLMagdbcfe

输出e、f、ge、f、ge、f、g输出hOe、f、ghhN判定上移的结构图SD方法──事务分析举例输入

aXX系统a

输出e、f、ge、f、g输出hOe、f、ghhLMgdbcfeNSD方法──事务分析举例事务型DFDIMLNABCDFEG事务中心初始结构图SD方法──事务分析举例取

a

总控aLMNgdbcfe(主模块)输出e、f、ge、f、gSD方法──混合型DFDSD方法──混合型DFD3.软件模块结构的改进1)模块功能的完善化一个完整的功能模块,不仅能完成指定的功能还应该能够告诉使用者完成任务的状态,任务不能完成的原因执行规定的功能出错处理部分2)消除重复功能,改善软件结构审查系统的初始结构图模块改进模块完全相似结构上完全一致,只是数据类型上下不一致采用完全合并的方法局部相似完全合并:需要设置多个开关处理步骤:将模块R1和R2的相同部分找出从R1和R2中分离出来重新定义成独立的下一层模块,供R1和R2调用R1和R2的剩余部分可根据情况与上级合并,减少控制的传递、全局数据的引用和接口的复杂性模块作用域在控制域范围之内减少高扇出,随深度增大扇入模块大小适中XYR1R2XYR1+R2COMMONCOMMONCOMMON3)设计功能可预测的模块,避免过分限制模块一个功能可预测的模块可看作一个黑盒:无论内部处理细节如何,对相同的输入数据,产生同样的结构模块内存在特殊的鲜为人知的功能,则该模块为不可预测的。(逻辑炸弹)4)对模块的数据结构大小控制流的选择与外界(人或硬件)的接口模式 被限制过死,很难适应客户的新要求和环境的变更,维护困难。为适应变更,1)模块中数据结构的大小应当是可控制的,可通过模块接口的参数表来改变数据结构2)与外界的接口应该是灵活的,可通过参数来调整。系统设计的第一阶段——体系结构设计系统设计的第二阶段——详细设计目的:在体系结构设计的基础上,为软件的每个模块确定相应的:算法内部数据结构获得目标系统具体实现的精确描述为编码工作做好准备决定了程序代码的质量4.4详细设计概述4.4.1详细设计的任务确定每个模块的具体算法数据结构及数据库的物理结构模块接口细节测试用例(模拟)编写文档——详细设计说明书详细设计的原则将保证程序的清晰度放在首位采用逐步细化的实现方法

选择适当的表达工具4.4.2详细设计采用的工具程序流程图N-S图PAD图PDL语言一、程序流程图(a)一般处理框(b)输入/输出框(c)判断框(d)流程线(e)起止框流程图基本符号一、程序流程图五种基本的控制结构组成复杂多变的程序流程图AB顺序型PAB选择型PSFT先判定型循环WHILEPSFT后判定型循环DO-UTILLP=1P=2P=n…A1TA2TA3T多情况选择型CASE模块详细设计──描述工具接受单科成绩从课程管理系统中查出课程的学分IF

普通考试成绩

DOWHILE

对于成绩单中每个学生

IF学生的成绩大于合格成绩 记录学生的成绩,学分

ELSE

记录学生的成绩,学分为0

ENDIF

ENDDOELSE

DOWHILE

对于成绩单中每个学生

IF

学生的补考成绩大于合格成绩 记录学生的补考成绩,学分

ELSE

记录学生的补考成绩,学分为0

ENDIF

ENDDOENDIF

模块详细设计──描述工具流程图优点对程序的控制流程描述直观、清晰使用灵活便于阅读和掌握缺点箭头使用灵活性大,容易造成程序控制结构的混乱难以描述逐步求精的过程,导致程序员过早注重细节而忽略了程序全局结构的设计难以表示系统中的数据结构二、N-S图可清晰的表达结构中的嵌套及模块的层次关系没有流程线,避免随意转移模块详细设计──描述工具ajbX1fX2X4ighde=1=2=3cDo-whileX6TFTFDo-whileX5while-doX3ghm1X7TFm3m4m2Do-whileX8g:X9TFn1Do-whileX10h:=2n2=3n3=1N-S图特点每个矩形框都明确定义了功能域,清晰可见控制转移不能随意容易确定局部或全部数据的作用域很容易表现嵌套关系,也可以表示模块的层次结构三、PAD(problemanalysisdiagram)

问题分析图模块详细设计──描述工具三、PAD(problemanalysisdiagram)

问题分析图PAD特点层次清晰为多种语言提供相应图形符号,易于转换支持自顶向下逐步求精既能描述程序逻辑结构,又能描述数据结构四、PDL语言(过程设计语言)是一种伪代码外语法:符合一般程序设计语言常用语句的语法规则内语法:自然语言有数据说明机制有子程序定义与调用机制过程设计语言(ProcessDesignLanguage)PDLPDL语言的主要特点:(1)各种定义语句及控制结构的表达都具有严格的语法形式,使程序结构、数据说明等更加清晰。(2)提供了数据说明机制,可用于定义简单及复杂的数据结构。(3)提供了模块的定义和调用机制,方便了程序模块化的表达。语法规则注释行语句:--*数据说明DECLARE数据类型变量名模块定义PROCEDURE模块名(参数)

……

RETURN

END控制结构1)顺序结构——语句按先后顺序执行语句序列1

语句序列2

…..

语句序列n

2)选择型结构

IF<>

ELSEIF<>

ELSE<>

ENDIFCASE表达式OF

CASE取值1:语句序列S1

CASE取值2:语句序列S2

……

DEFAULT:语句序列Sn

ENDCASE控制结构3)循环结构FOR结构例“Forx=1ton sum=sum*xEndforWHILE结构例:whilex<=n sum=sum*xEndwhileUNTIL结构例:REPEAT sum=sum*xUTILLx<=n4)输入输出输入:GET(输入变量表)输出:PUT(输出变量表)5)模块调用语句CALL模块名(参数)4.5面向数据流的详细设计方法面向数据流的详细设计方法

面向数据流的详细设计方法,主要指结构化程序设计方法,首要思想是,从改善每个模块的控制结构入手来提高程序的清晰度、易读性、可测试性和可维护性。自顶向下,逐步细分的方法,符合人类思维的一般方式,有效地控制复杂度和难度,大大减少了设计过程中出现错误的可能,能够显著提高软件开发的可靠性及缩短软件开发的周期为了保证程序结构的清晰度,通常限制只能采用顺序结构、选择结构(IF-THEN-ELSE型)和循环结构(DO-WHILE型)三种基本控制结构来构造程序,称为经典的结构程序设计,其共同特点是所有模块均只有一个入口和一个出口。加入了(DO-UNTIL)和多分支选择结构(DO-CASE)两种补充结构的详细设计则被称为扩展的结构程序设计。允许使用BREAK、EXIT这类语句的程序设计被称为修正的结构程序设计。面向数据流的详细设计方法结构化程序设计方法目的:GOTO带来的问题1963,ALGOL,PeterNaur:取消GOTO1965,E.W.Dijkstra:GOTO与程序质量成反比1966,Bohm与Jacopini:经典结构程序设计1968,争论结果:GOTO可适当存在首要思想:改善每个模块的控制结构——提高程序清晰度关键技术:自顶向下,逐步细分只采用单入口单出口的三种基本控制结构——经典的结构程序设计保证每个程序模块的清晰的逻辑结构AB顺序型PAB选择型PSFT先判定型循环WHILE增加DO-UNTILL和DO-CASE的两种补充结构除以上三种结构外增加了DO-UNTILL和DO-CASE的详细设计——扩充的结构程序设计限制GOTO语句的使用面向数据流的详细设计为保证程序的清晰性以存储容量和运行效率的降低为代价PSFT后判定型循环DO-UTILLP=1P=2P=n…A1TA2TA3T多情况选择型CASE结构化程序设计的原则使用语言中的顺序、选择、重复等有限的基本控制结构表示程序逻辑选用的控制结构只许有一个入口和一个出口程序语句组成容易识别的块,每块只有一个入口和一个出口复杂结构用基本控制结构嵌套组合而成严格控制GOTO语句4.6面向数据结构的详细设计方法面向数据结构的设计方法

面向数据结构的设计方法根据软件所要处理的信息的数据结构来设计软件,它同样遵循结构程序设计和自顶向下、逐步细分的设计原则。面向数据结构的设计方法的设计步骤

1:画出系统中输入、输出数据对应的数据结构图;

2:根据数据结构图,映射得到相应的程序结构图

3:按照程序结构图,分析得到程序的详细过程性描述面向数据结构的设计方法的典型代表是Jackson方法和Warnier方法Jackson方法是由英国的M.A.Jackson在1975年首先提出的,同时还提出了与这种方法配套使用的、用于描述系统数据结构和程序结构的图形工具,被称为Jackson图。Jackson方法从目标系统的输入、输出数据结构入手,导出程序框架结构,再补充其它细节,就可得到完整的程序结构图,并采用PDL进行程序的详细过程型描述。对于输入、输出数据结构之间对应关系清晰的小规模数据处理问题,采用Jackson方法可以很方便地得到系统的处理过程描述。(以系统中数据结构作为设计的出发点目标:得到详细设计适合:详细设计阶段算法+数据结构算法依赖于数据结构:重复出现的数据结构采用循环结构选择性的数据结构采用选择结构分层的数据结构常采用对应的分层调用程序结构遵循自顶向下,逐步求精面向数据结构的设计方法数据结构图程序结构图映射程序的详细过程性描述Jackson图由方框、连线、特殊含义的字符构成ABCDAB。C。D。AB*AB*F*DC*E*顺序结构选择结构重复结构数据结构的组合表示Jackson方法面向数据结构的的结构程序设计方法目标:分析系统的数据结构Jackson伪代码实现步骤:STEP1分析问题,确定输入、输出数据的逻辑结构工号姓名职称工龄XXXXX*****************YYYYY*****************ZZZZZ*****************工号工资津贴XXXXX**********YYYYY**********ZZZZZ**********工号姓名职称工龄工资津贴XXXXX***************************YYYYY***************************ZZZZZ***************************档案文件工资文件职工工资档案文件工号姓名职称工龄XXXXX*****************YYYYY*****************ZZZZZ*****************档案文件档案文件职工记录*工号姓名职称工龄工号工资津贴XXXXX**********YYYYY**********ZZZZZ**********工资文件工资文件职工记录*工号工资津贴工号姓名职称工龄工资津贴XXXXX***************************YYYYY***************************ZZZZZ***************************职工工资档案文件档案文件职工记录*工号姓名职称工龄工资津贴STEP2找出输入数据结构和输出数据结构中有对应关系的单元对应单元:在程序中具有因果关系,可同时处理的单元为每对有对应关系的数据单元,在程序结构图的相应层次画一个处理框为输入数据结构中每个数据单元,

若它在输出数据结构中没有对应的数据单元,

则在程序结构图的相应层次画一个处理框为输出数据结构中每个数据单元,

若它在输入数据结构中没有对应的数据单元,

则在程序结构图的相应层次画一个处理框即:对输入数据结构与输出数据结构中的数据单元,每对有对应关系的数据单元合画一个程序框,对没有对应关系的数据单元,各画一个程序框。产生档

温馨提示

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

评论

0/150

提交评论