1、第4章 详细设计第4章 详细设计 4.1 详细设计概述详细设计概述 4.2 面向数据流的详细设计方法面向数据流的详细设计方法4.3 面向数据结构的设计方法面向数据结构的设计方法4.4 小结小结 4.1 4.1 详细设计概述详细设计概述4.1.1 4.1.1 详细设计的任务详细设计的任务 确定每个模块的具体算法。确定每个模块的具体算法。确定每个模块的内部数据结构及数据库的物理结构。确定每个模块的内部数据结构及数据库的物理结构。确定模块接口的具体细节。确定模块接口的具体细节。为每个模块设计一组测试用例。为每个模块设计一组测试用例。编写文档,参加复审。编写文档,参加复审。主要任务:主要任务:编写详细
2、设计说明书编写详细设计说明书为此,设计人员应:为此,设计人员应:(1)(1)确定每个模块的算法,用工具确定每个模块的算法,用工具 表达算法的过程,写出模块的表达算法的过程,写出模块的 详细过程性描述。详细过程性描述。(2)(2)确定每一模块的数据及数据库结构。确定每一模块的数据及数据库结构。(3)(3)确定模块接口细节。确定模块接口细节。(4)(4)准备测试用例。准备测试用例。详细设计是编码的先导。详细设计是编码的先导。4.1.2 4.1.2 详细设计工具:详细设计工具:(1)(1)图形工具图形工具流程图流程图N-SN-S图图(盒图盒图)问题分析图问题分析图(PAD)(PAD)(2)(2)语言
3、工具语言工具(3)(3)表格工具表格工具 1.1.程序流程图程序流程图 程序流程图是最早出现且使用较为广泛的算法表达工具之程序流程图是最早出现且使用较为广泛的算法表达工具之一,能够有效地描述问题求解过程中的程序逻辑结构。一,能够有效地描述问题求解过程中的程序逻辑结构。程序流程图中经常使用的基本符号程序流程图中经常使用的基本符号:(a)(a)一般处理框;一般处理框;(b)(b)输入输入/输出框;输出框;(c)(c)判断框;判断框;(d)(d)流程线;流程线;(e)(e)起止框起止框(a)(b)(c)(d)(e)开始结束 程序流程图的优点程序流程图的优点:对程序的控制流程描述直观、清晰,使对程序的
4、控制流程描述直观、清晰,使用灵活,便于阅读和掌握。用灵活,便于阅读和掌握。程序流程图的缺点程序流程图的缺点:可以随心所欲地使用流程线,容易造成程序控制结构的可以随心所欲地使用流程线,容易造成程序控制结构的混乱,与结构化程序设计的思想相违背。混乱,与结构化程序设计的思想相违背。难以描述逐步求精的过程,容易导致程序员过早考虑程难以描述逐步求精的过程,容易导致程序员过早考虑程序的控制流程,而忽略程序全局结构的设计。序的控制流程,而忽略程序全局结构的设计。难以表示系统中的数据结构。难以表示系统中的数据结构。2.N2.NS S图图 N NS S图又称为图又称为盒图盒图,是为了保证结构化程序设计而由,是为
5、了保证结构化程序设计而由NassiNassi和和ShneidermanShneiderman共同提出的一种图形工具。共同提出的一种图形工具。n使用矩形框表示清晰地表达结构中的嵌套及模块的层使用矩形框表示清晰地表达结构中的嵌套及模块的层次关系。次关系。特点特点:没有流程线,不可能随意转移控制没有流程线,不可能随意转移控制图5.1 NS图中基本控制结构的表示符号(a)顺序结构;(b)分支结构;(c)多分支CASE结构;(b)(d)while-do结构;(e)do-until结构;(f)调用模块A值1值2值nCASE 1部分CASE 2部分CASE n部分CASE条件(c)(b)S1S2IF条件TF
6、S2S1(a)while循环条件while-do部分(d)until条件do-until部分(e)(f)A用方框图代替传统的流程图用方框图代替传统的流程图描述五种基本控制结构的图形构件描述五种基本控制结构的图形构件(1)(1)顺序型顺序型BAC(2)选择型(If then else)If then else If thenABF条件条件TAFT条件条件then 部分部分then 部分部分else部分部分(3)多分支选择型(CASE型)A1值值1 1A2An.CASECASE条件条件值值2 2值值n n(4)(4)WHILEWHILE重复型重复型 (5)DO-UNTIL(5)DO-UNTIL重复
7、型重复型S(循环体)(循环体)WHILE PS(循环体)(循环体)REPEAT UNTIL P(先测试循环先测试循环)(后测试循环后测试循环)循环条件循环条件(6)并行结构A1A2An.NS图的问题 当所描述的程序嵌套层次较多时,当所描述的程序嵌套层次较多时,NS图的内层方框会图的内层方框会越画越小越画越小影响可读性影响可读性不易修改不易修改 3.PAD3.PAD图图 PAD(ProblemPAD(Problem Analysis Diagram Analysis Diagram,问题分析图,问题分析图)是继程序流程图和是继程序流程图和N NS S图后,由日立公司在图后,由日立公司在2020世
8、纪世纪7070年代提出。年代提出。u只能用于结构化程序的描述只能用于结构化程序的描述u采用易于使用的树型结构图形符号采用易于使用的树型结构图形符号u利于清晰地表达程序结构利于清晰地表达程序结构u利于修改利于修改基本控制结构基本控制结构:(1)(1)顺序结构顺序结构 (2)(2)选择结构选择结构 ABCABTF条条件件(3)重复结构 WHILE CSUNTIL CS(先测试循环)(后测试循环)等价的等价的PASCAL语言:语言:REPEAT C UNTIL S等价的等价的PASCAL语言:语言:WHILE C DO S(4)多分支选择型(CASE型)A1A1CASECASE值值1 1值值2 2值
9、值n n A2A2AnAn.条件条件PAD描述的示例描述的示例对应于增量型循环结构对应于增量型循环结构for i:=n1 to n2 step n3 do在在PAD中有相应的循环控制结构中有相应的循环控制结构 PAD PAD图主要优点:图主要优点:(1)(1)程序结构层次清晰,逻辑结构关系直观、易程序结构层次清晰,逻辑结构关系直观、易读、易记、易修改。读、易记、易修改。(2)(2)为多种常用高级语言提供了相应的图形符号,为多种常用高级语言提供了相应的图形符号,每种控制语句都与一个专门的图形符号相对应,易于每种控制语句都与一个专门的图形符号相对应,易于PADPAD图向高级语言源程序转换。图向高级
10、语言源程序转换。(3)(3)支持自顶向下、逐步求精的设计过程。支持自顶向下、逐步求精的设计过程。(4)(4)既能够描述程序的逻辑结构,又能够描述系既能够描述程序的逻辑结构,又能够描述系统中的数据结构。统中的数据结构。是 文 件 结 束 位 置 吗?开 始在 工 资 档 案 中 读 一 条 记 录是 文 件 结 束 位 置 吗?计 算 工 资 档 案 各 项 基 本 数 据 之 和 并 存 入 paynum 当 前 职 工 号在 奖 金 发 放 表 中 查 找 职 工 号 与 num相 同 的 记 录找 到 了 吗?计 算 各 项 奖 金 总 和 并 存 入 bonus应 发 工 资 pay b
11、onus读 下 一 条 记 录YN显 示 错 误NY结 束(a)(b)计 算 工 资 各 项 基 本 数 据 之 和 并 存 入 paynum 当 前 职 工 号在 奖 金 表 中 查 职 工 号 与 num相 同 的 记 录 找 到 了 吗?计 算 各 项 奖 金 总 和 并 存 入 bonus应 发 工 资 pay bonus显 示错 误读 下 一 条 记 录TF 在 工 资 档 案 中 读 一 条 记 录在 工 资 档 案 中 读 一 条 记 录当 文 件 没 有 读 完 时计 算 应 发 工 资检 索 个 人 奖 金num 当 前 职 工 号在 奖 金 表 中 查 找 职 工 号 与
12、num相 同 的 记 录计 算 应 发 工 资显 示 错 误 信 息TF找 到 了 吗?读 下 一 条 记 录检 索 个 人 奖 金def计 算 各 项 奖 金 之 和 并 存 入 bonus计 算 工 资 基 本 数 据 项 之 和 并 存 入 pay应 发 工 资 pay bonus计 算 应 发 工 资def(c)图图5.2 5.2 三种详细设三种详细设计中使用的图形计中使用的图形工具示例工具示例(a)(a)采用程序流程图采用程序流程图描述计算应发工描述计算应发工资模块;资模块;(b)(b)采用采用N NS S图描图描述计算应发工资述计算应发工资模块;模块;(c)(c)采用采用PADPA
13、D图描述图描述计算应发工资模计算应发工资模块块 4.PDL4.PDL语言语言 PDL(Process Design Language)PDL(Process Design Language)语言即过程设计语言,是语言即过程设计语言,是一种用于描述程序算法和定义数据结构的伪代码。一种用于描述程序算法和定义数据结构的伪代码。是一种兼有自然语言和结构化程序设计语言语法的是一种兼有自然语言和结构化程序设计语言语法的“混合混合型型”语言。语言。PDLPDL语言与结构化语言的主要区别在于:语言与结构化语言的主要区别在于:PDLPDL语法结构更加严格并且处理过程描述更加具体详细语法结构更加严格并且处理过程描
14、述更加具体详细 PDL PDL语言主要特点:语言主要特点:(1)(1)各种定义语句及控制结构的表达都具有严格各种定义语句及控制结构的表达都具有严格的语法形式,使程序结构、数据说明等更加清晰。的语法形式,使程序结构、数据说明等更加清晰。(2)(2)提供了数据说明机制,可用于定义简单及复提供了数据说明机制,可用于定义简单及复杂的数据结构。杂的数据结构。(3)(3)提供了模块的定义和调用机制,方便了程序提供了模块的定义和调用机制,方便了程序模块化的表达。模块化的表达。PDLPDL语言的主要定义语句及基本控制结构:语言的主要定义语句及基本控制结构:定义语句定义语句 (1)(1)数据定义:数据定义:DE
15、CLARE DECLARE 属性属性 变量名,变量名,属性包括:整型、实型、双精度型、字符型、指针、数组属性包括:整型、实型、双精度型、字符型、指针、数组及结构等类型。及结构等类型。(2)(2)模块定义:模块定义:PROCEDUREPROCEDURE模块名模块名(参数参数)RETURN RETURNENDEND基本控制结构基本控制结构(1)(1)顺序结构:顺序结构:顺序结构的语句序列采用自然语言进行描述。顺序结构的语句序列采用自然语言进行描述。语句序列语句序列S1S1语句序列语句序列S2S2语句序列语句序列SnSn(2)(2)选择结构:选择结构:IF-ELSE IF-ELSE结构结构IFIF条
16、件条件IFIF条件条件语句序列语句序列S1S1 或或 语句序列语句序列S SELSEELSEENDIFENDIF语句序列语句序列S2S2ENDIFENDIF 多分支多分支IFIF结构结构IFIF条件条件1 1 语句序列语句序列S1S1ELSEIFELSEIF条件条件2 2 语句序列语句序列S2S2ELSE ELSE 语句序列语句序列SnSnENDIFENDIF CASE CASE结构结构CASE CASE 表达式表达式 OFOFCASE CASE 取值取值1 1 语句序列语句序列S1S1CASECASE取值取值2 2 语句序列语句序列S2S2ELSE ELSE 语句序列语句序列SnSnENDC
17、ASEENDCASE(3)(3)循环结构:循环结构:FOR FOR结构结构FORFOR循环变量循环变量=初值初值 TO TO 终值终值循环体循环体S SEND FOREND FOR WHILE WHILE结构结构WHILE WHILE 条件条件循环体循环体S SENDWHILEENDWHILE UNTIL UNTIL结构结构REPEATREPEAT循环体循环体S S UNTIL UNTIL 条件条件输入输入/输出语句输出语句 输入语句:输入语句:GET(GET(输入变量表输入变量表)输出语句:输出语句:PUT(PUT(输出变量表输出变量表)模块调用语句模块调用语句 CALL CALL 模块名模
18、块名(参数参数)示例:拼词检查程序PROCEDURE spellcheck IS BEGIN split document into single words look up words in dictionary display words which are not in dictionary create a new dictionary END spellcheck使用PDL语言,逐步求精:PROCEDURE spellcheckBEGIN-*split document into single wordsLOOP get next word add word to word list
19、 in sortorder EXIT WHEN all words processedEND LOOP -*look up words in dictionaryLOOP get word from word list IF word not in dictionary THEN -*display words not in dictionary display word prompt on user terminal IF user response says word OK THEN add word to good word list ELSE add word to bad word
20、list ENDIF ENDIF EXIT WHEN all words processedEND LOOP -*create a new words dictionary dictionary:merge dictionary and good word listEND spellcheck5.1.3 5.1.3 详细设计的原则详细设计的原则 详细设计阶段应遵循下列原则详细设计阶段应遵循下列原则:(1)(1)将保证程序的将保证程序的清晰度清晰度放在首位。放在首位。结构清晰的程序易于理解和修改,会大大减少错误发生的结构清晰的程序易于理解和修改,会大大减少错误发生的机率,除了对执行效率有严格要求
21、的实时系统外,通常在详细机率,除了对执行效率有严格要求的实时系统外,通常在详细设计过程中应设计过程中应优先优先考虑程序的考虑程序的清晰度清晰度,而将程序的,而将程序的效率效率放在放在第第二位二位。(2)(2)设计过程中应采用设计过程中应采用逐步细化逐步细化的实现方法。的实现方法。从体系结构设计到详细设计,是一个细化模块描述的过从体系结构设计到详细设计,是一个细化模块描述的过程,由粗到细、分步进行的细化有助于保证所生成程序的可程,由粗到细、分步进行的细化有助于保证所生成程序的可靠性靠性 在详细设计中特别适合采用逐步细化的方法。在对程序进在详细设计中特别适合采用逐步细化的方法。在对程序进行细化的过
22、程中,还应同时对数据描述进行细化。行细化的过程中,还应同时对数据描述进行细化。(3)(3)选择适当的选择适当的表达工具表达工具。图形工具便于设计人员与用户的交流,而图形工具便于设计人员与用户的交流,而PDLPDL语言便于将详语言便于将详细设计的结果转换为源程序。设计人员应根据具体情况选择适细设计的结果转换为源程序。设计人员应根据具体情况选择适当的表达工具。当的表达工具。5.1.4 5.1.4 详细设计说明书详细设计说明书 详细设计说明书详细设计说明书是详细设计阶段最重要的技术文档。是详细设计阶段最重要的技术文档。体系结构设计说明书体系结构设计说明书侧重于软件结构的规定侧重于软件结构的规定详细设
23、计说明书详细设计说明书侧重于对模块实现具体细节的描述。侧重于对模块实现具体细节的描述。详细设计说明书可以看作是在体系结构设计说明书所确定详细设计说明书可以看作是在体系结构设计说明书所确定的系统总体结构的基础上,对其中各个模块实现过程的进一步的系统总体结构的基础上,对其中各个模块实现过程的进一步描述和细化。描述和细化。(1)(1)引言引言:用于说明编写本说明书的目的、背景,定义所:用于说明编写本说明书的目的、背景,定义所用到的术语和缩略语,以及列出文档中所引用的参考资料等。用到的术语和缩略语,以及列出文档中所引用的参考资料等。(2)(2)总体设计总体设计:用于给出软件系统的体系结构图。:用于给出
24、软件系统的体系结构图。(3)(3)模块描述模块描述:依次对各个模块进行详细的描述,主要包:依次对各个模块进行详细的描述,主要包括模块的功能和性能,实现模块功能的算法,模块的输入及输括模块的功能和性能,实现模块功能的算法,模块的输入及输出,模块接口的详细信息等出,模块接口的详细信息等。详细设计说明书包括的内容详细设计说明书包括的内容5.2 5.2 面向数据流的详细设计方法面向数据流的详细设计方法 面向数据流的详细设计方法关键技术面向数据流的详细设计方法关键技术:u (1)(1)设计过程中采用了自顶向下,逐步细设计过程中采用了自顶向下,逐步细分的方法。分的方法。u (2)(2)采用采用DO-UNT
25、ILDO-UNTIL循环结构和多分支选择循环结构和多分支选择结构结构(DO-CASE)(DO-CASE)两种补充结构。两种补充结构。(1)(1)设计过程中采用了自顶向下,逐步细分的方法设计过程中采用了自顶向下,逐步细分的方法:面向数据流的设计面向数据流的设计:n自顶向下自顶向下n逐步细分的方法逐步细分的方法在体系结构设计中,将需要处理的问题分解细化为在体系结构设计中,将需要处理的问题分解细化为一个由多个模块组成的层次结构的软件系统一个由多个模块组成的层次结构的软件系统在详细设计中,将系统中的每个模块逐步分解细化在详细设计中,将系统中的每个模块逐步分解细化为一系列的具体处理步骤为一系列的具体处理
26、步骤 所有模块的实现都只采用单入口、单出口的三种所有模块的实现都只采用单入口、单出口的三种基本控制结构基本控制结构 在面向数据流的详细设计中,为了保证程序结构的清晰度,在面向数据流的详细设计中,为了保证程序结构的清晰度,通常限制只能采用三种基本控制结构来构造程序通常限制只能采用三种基本控制结构来构造程序:u顺序结构顺序结构u选择结构选择结构(IF-THEN-ELSE(IF-THEN-ELSE型型)uDO-WHILEDO-WHILE循环结构循环结构图5.3 三种基本控制结构的流程图(a)顺序结构;(b)选择结构;(c)DO-WHILE循环结构FTFT(a)(b)(c)(2)(2)采用采用DO-U
27、NTILDO-UNTIL循环结构和多分支选择结构循环结构和多分支选择结构(DO-CASE)(DO-CASE)两种补充结构。两种补充结构。只允许使用三种基本控制结构的详细设计通常只允许使用三种基本控制结构的详细设计通常被称为经典的结构程序设计,被称为经典的结构程序设计,而加入了两种补充结构的详细设计则被称为扩而加入了两种补充结构的详细设计则被称为扩展的结构程序设计。展的结构程序设计。面向数据流的详细设计中并非完全禁止面向数据流的详细设计中并非完全禁止GOTOGOTO语语句的使用,例如限制在同一控制结构内部的句的使用,例如限制在同一控制结构内部的GOTOGOTO语句并不会破坏程序的结构化特点。语句
28、并不会破坏程序的结构化特点。图5.4 两种补充结构的流程图(a)DO-UNTIL循环结构;(b)多分支选择结构FT(a)CASE 1CASE 2CASE nDO CASE(b)优点:优点:自顶向下、逐步细分保证了程序的可靠性自顶向下、逐步细分保证了程序的可靠性而基本控制结构的使用则保证了程序的清晰易懂而基本控制结构的使用则保证了程序的清晰易懂缺点:缺点:程序结构的清晰往往要以程序结构的清晰往往要以存储容量的存储容量的增加增加和和运行效率的运行效率的降降低低为代价为代价作业画出与下列伪代码书写的程序所对应的N-S图和PAD图。K=n;FLAG=1 WHILE FLAG0 DOK=K-1FLAG=0FOR J=1 TO K DOIF L(J)L(J+1)THEN DOL(J)=L(J+1)FLAG=1END DOEND FOR END WHILE