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