第5章详细设计软件工程信息技术学部陈曦第5章详细设计5.1详细设计概述5.2结构化程序设计5.3详细设计工具5.4Jackson程序设计方法第5章详细设计第5章详细设计5.1详细设计概述详细设计的基本任务1.算法设计用某种图形、表格、语言等工具将每个模块处理过程的详细算法描述出来。2.数据结构设计对于需求分析、概要设计确定的概念性的数据类型进行确切的定义。3.物理设计对数据库进行物理设计,即确定数据库的物理结构。物理结构主要指数据库的存储记录格式、存储记录安排和存储方法,这些都依赖于具体所使用的数据库系统。第5章详细设计4.其他设计根据软件系统的类型,还可能要进行以下设计:(1)代码设计:为了提高数据的输入、分类、存储及检索等操作的效率,以及节约内存空间,对数据库中的某些数据项的值要进行代码设计。(2)输入/输出格式设计。(3)人机对话设计:对于一个实时系统,用户与计算机频繁对话,因此要进行对话方式、内容及格式的具体设计。第5章详细设计5.编写详细设计说明书详细设计说明书有下列的主要内容:(1)引言:包括编写目的、背景、定义、参考资料。(2)程序系统的组织结构。(3)程序1(标识符)设计说明:包括功能、性能、输入、输出、算法、流程逻辑、接口。(4)程序2(标识符)设计说明。(5)程序N(标识符)设计说明。6.评审对处理过程的算法和数据库的物理结构都要评审。第5章详细设计5.1结构化程序设计处理过程设计中采用的典型方法是结构化程序设计(SP)方法,最早是由E.W.Dijkstra在20世纪60年代中期提出的。详细设计并不是具体地编程序,而是已经细化成很容易从中产生程序的图纸。因此详细设计的结果基本决定了最终程序的质量。详细设计的目标不仅是逻辑上正确地实现每个模块的功能,还应使设计出的处理过程清晰易读。结构化程序设计是实现该目标的关键技术之一,它指导人们用良好的思想方法开发易于理解、易于验证的程序。结构化程序设计方法有以下几个基本要点。第5章详细设计1.采用自顶向下、逐步求精的程序设计方法在需求分析、概要设计中,都采用了自顶向下、逐层细化的方法。使用“抽象”这个手段,上层对问题抽象、对模块抽象和对数据抽象,下层则进一步分解,进入另一个抽象层次。在详细设计中,虽然处于“具体”设计阶段,但在设计某个模块内部处理过程中,仍可以逐步求精,降低处理细节的复杂度。2.使用三种基本控制结构构造程序任何程序都可由顺序、选择及重复三种基本控制结构构造。这三种基本结构的共同点是单入口、单出口。它不但能有效地限制使用GOTO语句,还创立了一种新的程序设计思想、方法和风格,同时为自顶向下、逐步求精的设计方法提供了具体的实施手段。第5章详细设计如对一个模块处理过程细化时,开始是模糊的,可以用下面三种方式以模糊过程进行分解:(1)用顺序方式对过程分解,确定各部分的执行顺序。(2)用选择方式对过程分解,确定某个部分的执行条件。(3)用循环方式对过程分解,确定某个部分进行重复的开始和结束的条件。对处理过程仍然模糊的部分反复使用以上分解方法,最终可将所有细节确定下来。第5章详细设计3.主程序员的组织形式主程序员的组织形式指开发程序的人员应采用以一个主程序员(负责全部技术活动)、一个后备程序员(协调、支持主程序员)和一个程序管理员(负责事务性工作,如收集、记录数据,文档资料管理等)三人为核心,再加上一些专家(如通信专家、数据库专家)、其他技术人员组成小组。这种组织形式突出了主程序员的领导,设计责任集中在少数人身上,有利于提高软件质量,并且能有效地提高软件生产率。这种组织形式最先由IBM公司实施,随后其他软件公司也纷纷采用主程序员制的工作方式。因此,结构化程序设计方法是综合应用这些手段来构造高质量程序的思想方法。第5章详细设计5.1详细设计工具5.3.1程序流程图程序流程图又称为程序框图,它是历史最悠久、使用最广泛的一种描述程序逻辑结构的工具,图5.1为流程图的三种基本控制结构。流程图的优点是直观清晰、易于使用,是开发者普遍采用的工具,但是它有如下严重缺点:(1)可以随心所欲地画控制流程线的流向,容易造成非结构化的程序结构,编码时势必不加限制地使用GOTO语句,导致基本控制块多入口多出口,这样会使软件质量受到影响与软件设计的原则相违背。第5章详细设计图5.1三种基本控制结构的流程图…AB顺序A选择BCABCC多分支选择ACT“当型”循环ACFTF“直到型”循环其中A或B为:①非转移语句(可以是空)②三种基本结构之一C为判定条件第5章详细设计(2)流程图不能反映逐步求精的过程,往往反映的是最后的结果。(3)不易表示数据结构。为了克服流程图的缺陷,要求流程图都应由三种基本控制结构顺序组合和完整嵌套而成,不能有相互交叉的情况,这样的流程图是结构化的流程图。第5章详细设计5.3.2N-S图(盒状图)盒图的符号第5章详细设计abx1x2x5x3cex4fx6gihx7x8jd将此程序图改为N_S图。第5章详细设计abx1Casei=2,3,4xifx6gicdex7hx8jx2x3x4x5第5章详细设计请把流程图改为盒图第5章详细设计5.3.3PAD图图PAD图指问题分析图(ProblemAnalysisDiagram),是日本日立公司于1979年提出的一种算法描述工具,它是一种由左往右展开的二维树型结构。PAD图的基本控制结构如图5.2所示。PAD图的控制流程为自上而下、从左到右地执行。图5.3给出了将数组A(1)到A(10)进行选择法排序的算法描述的PAD图。第5章详细设计图5.2PAD的基本控制结构AB条件TFABABM顺序选择多分支选择WHILE条件AUNTIL条件AAS1S2S3def“当型”循环“直到型”循环定义A(对A细化)CASE值1值2值n…第5章详细设计图5.3PAD图的示例j=i+1max=A(i)开始输入A(1)到A(10)的值置初值:n=10sort输入A(1)到A(10)的值结束sortdefi=1WHILEi≤n-1WHILEj≤nA(i)=maxi=i+1j=j+1TFmax<A(j)B=maxmax=A(j)A(j)=B第5章详细设计从图5.3给出的例子可以看出PAD图的优点如下:(1)清晰地反映了程序的层次结构。图中的竖线为程序的层次线,最左边竖线是程序的主线,其后一层一层展开,层次关系一目了然。(3)易读易写,使用方便。(4)支持结构化的程序设计原理。(5)可自动生成程序。PAD图有对照FORTRAN,Pascal,C等高级语言的标准图式。因此在有PAD系统的计算机上(如日立公司的M系列机),可以直接输入PAD图,由机器自动通过遍历树的办法生成相应的源代码,大大提高了软件的生产率。PAD图为软件的自动化生成提供了有力的工具。(2)支持逐步求精的设计方法,左边层次中的内容可以抽象,然后由左到右逐步细化。第5章详细设计例:下面是用PDL写的程序段,请分别画出对应的N-S图和PAD图。WhileCdoIfA0ThenA1ElseA2EndifIfB0ThenB1IfC0ThenC1ElseC2EndifElseB2EndifB3Endwhiles第5章详细设计5.3.4过程设计语言过程设计语言(ProcessDesignLanguage,简称PDL)是在伪码的基础上,扩充了模块的定义与调用、数据定义和输入输出而形成的。它的控制结构与伪码相同。PDL是一种用于描述模块算法设计和处理细节的语言。PDL与结构化语言的结构相似,一般分为内外两层语法,外层语法应符合一般程序设计语言常用的语法规则,而内层语法则用一些简单的句子、短语和通用的数学符号,来描述程序应执行的功能。PDL具有严格的关键字外层语法,用于定义控制结构、数据结构和模块接口,而它表示实际操作和条件的内层语法又是灵活自由的,使用自然语言的词汇。第5章详细设计PDL与结构化分析中描述加工逻辑的“结构化语言”有什么不同呢?所不同的仅是它们的作用不同,故抽象层次不同,模糊程度不同。“结构化语言”是描述加工“做什么”的,并且使开发人员和用户都能看懂,因此无严格的外语法,内层自然语言描述较抽象、较概括。而PDL是描述处理过程“怎么做”的细节。开发人员将按其处理细节编程序,故外层语法更严格一些,更趋于形式化,内层自然语言描述实际操作更具体更详细一些。第5章详细设计1.PDL特点PDL的特点如下:(1)所有关键字都有固定语法,以便提供结构化控制结构、数据说明和模块的特征。(2)描述处理过程的说明性语言没有严格的语法。(3)具有数据说明机制,包括简单的与复杂的数据说明。(4)具有模块定义和调用机制,开发人员应根据系统编程所用的语种,说明PDL表示有关程序结构。第5章详细设计2.程序结构用PDL表示的程序结构一般有下列几种结构。1)顺序结构采用自然语言描述顺序结构:处理S1处理S2…处理Sn第5章详细设计2)选择结构(2)IF-ORIF-ELSE结构:IF条件1处理S1ORIF条件2…ELSE处理SnENDIF(1)IF-结构:IF条件IF条件处理S1或处理SELSEENDIF处理S2ENDIF第5章详细设计(3)CASE结构:CASEOFCASE(1)处理S1CASE(2)处理S2…ELSE处理SnENDCASE第5章详细设计3)重复结构(2)WHILE结构:WHILE条件循环体ENDWHILE(1)FOR结构:FORi=1TOn循环体ENDFOR(3)UNTIL结构:REPEAT循环体UNTIL条件第5章详细设计4)出口结构(1)ESCAPE结构(退出本层结构):WHILE条件处理S1ESCAPELIF条件处理S2ENDWHILEL:…(2)CYCLE结构(循环内部进入循环的下一次):L:WHILE条件处理S1CYCLELIF条件处理S2ENDWHILE第5章详细设计5)扩充结构(1)模块定义:PROCEDURE模块名(参数)…RETURNEND(2)模块调用:CALL模块名(参数)第5章详细设计(3)数据定义:DECLARE属性变量名,…属性有:字符、整型、实型、双精度、指针、数组及结构等类型。(4)输入/输出:GET(输入变量表)PUT(输出变量表)第5章详细设计3.PDL应用示例现以××系统主控模块详细设计为例,说明如何用PDL来描述。PROCEDURE模块名()清屏;显示××系统用户界面;PUT(“请输入用户口令:”);GET(password);IFpassword<>系统口令提示警告信息;退出运行ENDIF第5章详细设计显示本系统主菜单;WHILE(true)接收用户选择ABC;IFABC=“退出”Break;ENDIF调用相应下层模块完成用户选择功能;ENDWHILE;清屏;RETURNEND第5章详细设计从示例可以看到PDL的总体结构与一般程序完全相同。外语法同相应程序语言一致,内语法使用自然语言,易编写,易理解,也很容易转换成源程序。除此以外,还有以下优点:(1)提供的机制较图形全面,为保证详细设计与编码的质量创造了有利条件。(2)可作为注释嵌入在源程序中一起作为程序的文档,并可同高级程序设计语言一样进行编辑、修改,有利于软件的维护。(3)可自动生成程序代码,提高软件生产率。目前已有PDL多种版本(如PDL/pascal,PDL/C,PDL/Ada等),为自动生成相应代码提供了便利条件。第5章详细设计5.4Jackson程序设计方法面向数据流的设计(SD方法)和面向数据结构的设计(Jackson方法)的共同点都是数据信息驱动的,都试图将数据表示转换成软件表示,不同之处在于面向数据结构的设计不利用数据流图,而根据数据结构的表示来设计。第5章详细设计Jackson方法的优缺点Jackson方法的优点:简单,适合于规模不大的系统,建立了问题的数据结构之后,可直接推导出相应的程序结构。Jackson方法的局限性:不适合于大系统,当输入数据结构与输出数据结构不相同且无对应关系时,难于应用。当数据结构发生变化时,程序结构也发生变化,一般是总体上用SD方法,局部范围用Jackso