5 详细设计 -...
TRANSCRIPT
第5章:详细设计
王崇骏
内容
第1节:详细设计及详细设计工具
第2节:详细设计说明书及复审
第1节:详细设计及详细设计工具
内容
[1]详细设计
[2]详细设计工具
软件生存周期模型(瀑布模型)
需求分析
问题定义
可性行研究
计划
时期
概要设计
详细设计
编 码
测 试
开发
时期
运行与维护运 行
时 期
特点:
上一阶段的变换结果是下一阶段的变换的输入,相邻两个阶段具有因果关系,紧密相联。
• 软件设计是把软件需求变为软件的具体方案,软件设计包括两个阶段:
– 概要设计:将软件需求转换为软件结构和数据结构,并编写概要设计说明书;
– 在概要设计阶段完成了软件系统的总体设计,规定了各个模块的功能和模块间的联系之后,进一步就需要考虑实现各个模块的功能,即:详细设计,也称过程设计;
详细设计
• 根据概要设计对每个模块的定义进行设计,以实现指定的功能、算法和外部接口所要求的模块内部的数据结构和程序的逻辑结构。模块设计包括:– 详细的算法过程设计
– 内部数据结构设计
– 程序逻辑结构设计
详细设计的功能
• 详细设计功能
– 对软件开发人员来说,提高软件开发效率
– 对软件测试和维护人员来说,提供摆脱繁琐的程序代码,了解模块程序结构的途径
详细设计的本质
• 详细设计的本质是使用结构化构造(即用顺序、选择和重复三种程序结构)表示程序过程,降低程序的复杂性,从而提高可靠性、易测试性和易维护性。
• 详细设计的重点在于如何描述程序的逻辑结构,只有好的详细设计,才能设计出可维护性好的软件。
逻辑表示方式
•表示程序逻辑结构的主要方式有:
– 图形描述
将过程细节用图来表示,在图中,逻辑结构用具体的图形表示
– 表格描述
利用表来表示过程细节,表列出了各种操作和相应的条件
– 语言描述 用类语言(伪码)表示过程的细节,很接近编程语言
图形描述
•程序流程图
•N-S图
•PAD图
程序流程图
• Program Flow Chart,又称程序框图
• 独立于程序设计语言,直观、清晰、易于掌握,在软件设计中经常使用的方法
– 方框表示处理步
– 菱形表示逻辑判断
– 箭头表示控制流
S1
C4
C5
C3
C2
C1
S2 S3
S4
S5
N Y
N
Y
N
N
N
Y
Y
Y
程序流程图的小结-1
• 不足之处
– 流程图本质上不是逐步求精的好工具,它诱使程序员过早地考虑程序的控制流程,而不去考虑程序的全局结构。
– 流程图中用箭头代表控制流,因此程序员不受任何约束,可以完全不顾结构程序设计的精神,随意转移控制。
– 流程图不易表示数据结构。
程序流程图的小结-2
• 改进方案– 对使用的符号做严格定义,不允许随心所欲地画出各种不规范的流程图;
– 用流程图表示过程细节时,不要乱用箭头(否则会使结构不清晰);
– 限制流程图只能使用3种(或变形)基本的控制结构对使用的符号做严格定义,不允许随心所欲地画出各种不规范的流程图;
基本控制结构
• 任何复杂的程序流程图都应由这3种基本的控制结构组合或嵌套而成:
– 顺序结构
– 分支结构
– 循环结构
顺序结构
A和B是一个语句
(甚至是空语句),也可以是我们下面将介绍的各种结构中的某一种/(块);
A
B
分支结构
• 也叫做选择结构,依照逻辑判断式的取值决定选择加工中的一个来执行。
– 基本选择结构
– 若干变形结构
基本结构
当条件表达式P为真的时,执行A块,否则执行B块
P
A B
真 假
If (P)
A;
else
B;
变形1
当B为空语句时
P
A
真 假
If (P)
A;
变形2
当B为分支结构时,(嵌套)
If (p1)
A;
Else if (p2)
C;
Else
D;
P1
A
真 假
C
P2
D
真 假
变形3 当条件表达式P是多值比较的时候,Java的实现方法:
Switch (p){
Case x1:A;
Case x2:C;
…
Default:
}
P:x1
A
真 假
C
P:x2
D
真 假
循环结构
[1] WHILE循环
[2] DO-WHILE循环;
[3] FOR循环;
WHILE循环
P
A
真
假
while (p)
{
A;
}
•也叫先判定型循环、当型循环;
•首先初始化控制条件,当P的值为真的时候执行A,否则退出循环体;
DO-WHILE循环•也叫后判定型循环、直到型循环;
•DO-WHILE结构首先执行循环体,然后计算终止条件,如果为TRUE则从循环体头继续执行,否则退出
do
{
B;
} while (p);
P真
假
A
B
FOR循环首先初始化然后判断终止条件是否满足,如果满足,则执行循环体,最后执行迭代部分
For A; p;C)
{
B;
}
P
真
假
A
B
C
N-S图
• 也称为盒图(Box-Diagram)或方块图,是符合结构化程序设计的图形描述工具;
– 研制方块图的目的是:既要制定一种图形工具,又不允许它违反结构化原则;
– 规定了5种图形构件分别对应于结构化程序设计中的顺序、循环、分支及其变形;
– 当问题很复杂时,N-S图可能很大,在一张纸上画不出时,可用分层N-S图表示,即在图中的一部分用一个名字表示,而在另外的纸上画出用此名字表示的相应部分。
第一个任务
第二个任务
第三个任务
条件F T
ELSE
部分
THEN
部分
CASE条件
值1 值2 …... 值n
CASE1
部分
A
循环条件
Do - While
部分
Do - Until
部分
循环条件
调用子程序A循环
顺序 IF-THEN-ELSE分支 CASE分支
C1
C4
C5N Y
S1
S4
S2 S3
S5
N
N
Y
Y
C2
C3
小结:N-S图
• 图中每个矩形框都是明确定义了的功能域;
• 图中的控制转移不能任意规定,必须遵守结构化程序设计的要求;
• 从图中,可以很容易确定局部数据和全程数据的作用域;
• 图中可以很容易表现嵌套关系及其模块的层次结构;
PAD图
• Program Analysis Diagram,问题分析图,日本
日历公司提出的用结构化程序设计思想表现程序逻辑结构的图形工具;
• 设置5种基本控制结构的图式,并允许递归使用;
PAD图(Problem Analysis Diagram)
A
B
(a) 顺序结构
A
B
P
(b) 选择结构
WHILE P S
(c) WHILE 型循环结构
UNTIL P S
(d) UNTIL 型循环结构
A1
A2
P=
An
…
P1
P2
Pn
(e) 多分支结构
(f) 语句标号
(g) 定义
A
C
B1
B2
P1
WHILE P3 C4
C
def
C1
C2
C3
P2
小结:PAD图
• PAD图所描述的程序结构十分清晰,图中最左面的竖线是程序的主线,即第一层结构,随着程序层次的增加,PAD图逐渐向右延伸,每增加一个层次,图形向右扩展一条竖线,PAD图中的竖线的总条数就是程序的层次数。
• 作为详细设计的工具,比流程图更容易读;
• 容易将PAD图转换成高级语言源程序,这种转换可用软件工具自动完成。
• 既可以用于表示程序逻辑,也可用于描述数据结构。
• PAD图的符号具有支持自顶向下、逐步求精方法的作用。开始时设计者可以定义一个抽象的程序,随着设计工作的深入而用def符号逐步增加细节,直至完成详细设计。
表格描述工具
当算法中包含多重嵌套的条件选择时,用程序流程图、N-S图或PAD图都不容易清楚的描述,此时,可以利用表格描述工具来表示:
– 判定表
– 判定树
•一张判定表由四部分组成:
– 左上部列出所有条件;
– 左下部是所有可能做的动作;
– 右上部为各种可能组合条件,其中每一列表示一种可能组合;
– 右下部的每一列是和每一种条件组合所对应的应做的工作。
所有条件
所有动作
条件组合
对应动作
判定表
1 2 3 4 5
教授 T F F F
副教授 F T F F
讲师 F F T F
助教 FF
F T
讲座 T F F F F
50 ×
30 ×
25 ×
20 ×
15 ×
例:某校制定了教师的讲课课时津贴标准。对于各种性质的讲座,无论教师是什么职称,每课时津贴费一律是50元;而对于一
般的授课,则根据教师的职称来决定每课时津贴费:教授30元,副教授25
元,讲师20元,助教15元。
•优点:能够简洁、无二义性地描述所有的处理规则;
•缺点:表示的是静态逻辑、只在某种组合条件下的可能的结果,不能表达加工的顺序,也不能表达循环结构,因此它不能作为一种通用的设计工具,一般作为辅助工具配合其他工具一起使用;
小结:判定表
• Decision Tree
•判定树实质上是判定表的一种变形,本质上是一致的。
•优点:形式简单、比较直观、易于掌握和使用;
•缺点:不如判定表简洁;
判定树
教师课时津贴判定树
课时津贴
一般授课
讲座
教授
副教授
讲师
助教
30
25
20
15
50
判定树
语言工具
• PDL(Program Design Language)
•用伪码表示过程的细节,很接近编程语言
– 外部语法(Outer Syntax):用于定义控制结构和数据结构;
– 内部语法(Inter Syntax):用英语中的一些简单的句子、短语和通用的数学符号来描述程序应执行的功能;
顺序型结构
•这种结构最为简单,语句按照排列的先后次序进行;
选择型结构
•采用传统的IF-THEN-ELSE形式:
IF <条件描述>
THEN<程序块或伪代码语句组>
ELSE<程序块或伪代码语句组>
多分支结构
•采用传统的IF-THEN-ELSE形式:
CASE OF <CASE变量名>
WHEN <条件1> SELECT<程序块或伪代码语句组>
WHEN <条件2> SELECT<程序块或伪代码语句组>
WHEN <条件3> SELECT<程序块或伪代码语句组>
……
WHEN <条件n> SELECT<程序块或伪代码语句组>
ENDCASE
循环结构
•当型
•直到型
• FOR型
当型循环
•先判定型:
DO WHILE <条件描述>
<程序块或伪代码语句组>
ENDDO
直到型循环
• 后判定型
REPEAT UNTIL <条件描述>
<程序块或伪代码语句组>
ENDREP
或者
DO LOOP
<程序块或伪代码语句组>
EXIT WHEN <条件描述>
ENDLOOP
FOR型循环
•下标型结构:DO FOR <下标=下标表,表达式或序列>
<程序块或伪代码语句组>
ENDFOR
小结:PDL特征• PDL虽然不是程序设计语言,但是它与高级程序设计
语言非常类似(外部语法和内部语法),只要对PDL描述稍加变换就可变成源程序代码。因此,它是详细设计阶段很受欢迎的表达工具。
• 用PDL写出的程序,既可以很抽象,又可以很具体。因此,容易实现自顶向下逐步求精的设计原则。
• PDL描述同自然语言很接近,易于理解。
• PDL描述可以直接作为注释插在源程序中,成为程序的内部文档。这对提高程序的可读性是非常有益的。
• 有数据说明机制
• 有子程序定义和调用机制,用来表达各种方式的接口说明;
• PDL的缺点是不如图形描述形象直观,因此人们常常将PDL描述与一种图形描述结合起来使用。
详细设计工具的选择
在详细设计中,对一个工程设计选择的原则是:过程描述是否易于理解,复审和维护;进而过程描述能否自然地转换成代码,并保证详细设计与代码完全一致。
为了达到这个原则,设计工具必须具备如下一些特征:
– 模块性、简明性、便于编辑、机器可读性
– 易维护性、强行结构化、自动处理、
– 数据表示、逻辑验证、编程能力
本节小结
• 介绍了详细设计的概念
• 介绍了用于详细设计的若干工具及选择策略