软件工程 第6章

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

while i(17-22) end
输出 s[i]
PAD图的主要优点如下:
(1) 使用表示结构化控制结构的PAD符号所设 计出来的程序必然是结构化程序。 (2) PAD图所描绘的程序结构十分清晰,图中 竖线的总条数就是程序的层次数。 (3) 用PAD图二维树形结构表现程序逻辑易读、 易懂。程序从图中最左竖线上端的结点开始 执行,自上而下,从左向右顺序执行,遍历 所有结点。
(d) UNTIL型循环结构
(f)语句标号
An
(g)定义
(e) 多分支结构


begin
s[17]~s[22]=0 while num(1-1000) 输入 age =17 =18 s[17]++ s[18]++ s[19]++ s[20]++ s[21]++
age
=19 =20 =21 =22
s[22]++
零件号
库存量
10001 10002 10003 10004 10005 10006
1000 1250 886 69 2020 3450
建立零件库 (s数组), i=0 输入零件号 x
do while(x!=s[0][i])
i++ Y x==i++ s[0][i]) N
s[0][i] 输出 s[1][i] Y
(4) 容易将PAD图转换成高级语言源程序,这 种转换可用软件工具自动完成,有利于提高 软件可靠性和软件生产率。 (5) 既可用于表示程序逻辑,也可用于描绘数 据结构。 (6) 支持逐步求精方法的使用。开始时设计者 可以定义一个抽象的程序,使用def符号逐 步增加细节,直至完成详细设计。
图6.6 使用PAD图提供的定义功能 来逐步求精的例子
6.3 过程设计的工具
6.3.1 程序流程图 6.3.2 盒图 6.3.3 PAD图 6.3.4 判定表 6.3.5 判定树
6.3.6 过程设计语言
过程设计工具


过程设计的任务:在使用程序设计语言编制 程序以前,需要对所采用算法的逻辑关系进 行分析,设计出全部必要的过程细节,并给 予清晰的表达。 在过程设计阶段,要决定各个模块的实现算 法,并精确地表达这些算法。表达过程规格 说明的工具叫做详细设计工具,它可以分为 以下三类: 图形工具 表格工具 语言工具
--- 输入/输出结构 READ/WRITE TO <设备> <I/O表>
PDL语言具有下述优点: (1) PDL描述可以直接作为注释插在源程序 中,有助于保持文档和程序的一致性。 ( 2 )用 PDL 写出的程序,可抽象可具体,易 实现自顶向下逐步求精的设计原则。 ( 3 )同自然语言很接近易于理解。可使用普 通的文字处理系统完成PDL的书写和编辑工作。 (4) PDL描述与程序结构相似,可以利用自 动处理程序自动由PDL生成程序代码。 PDL的缺点是不如图形描述形象直观,因此人 们常常将 PDL 描述与一种图形描述结合起来使用。
6.3.2 盒图(N-S图)
不允许违背结构程序设计精神的图形工 具。它有下述特点: (1) 功能域(即,一个特定控制结构的作 用域)明确,可以从盒图上一眼就看出来。 (2) 不可能任意转移控制。 (3) 很容易确定局部和全程数据的作用 域。 (4) 很容易表现嵌套关系,也可以表示 模块的层次结构。
表示条件成立 与否不影响对 动作的选择
所 有 条 件
表示左边那 个条件成立
所 有 可 能 做 的 动 作
表示做它左 边那项动作
用判定表表示计算行李费的算法


当算法中包含多重嵌套的条件选择时,用判定表可以 清晰地表示复杂的条件组合与应做的动作之间的对应 关系。 在判定表中的条件部分给出所有的两分支判断的列表, 动作部分给出相应的处理

判定表用于表示程序的静态逻辑,判定表不适于作为 一种通用的设计工具,没有一种简单的方法使它能同 时清晰地表示顺序和重复等处理特性。
要求将程序流程图中的多分支判断都改成两分支判断

6.3.5百度文库判定树



是判定表的变种,也能清晰地表示复杂 的条件组合与应做的动作之间的对应关 系。 形式简单,易于掌握和使用。 分支的次序可能对最终的判定树的简洁 程度有较大的影响。
伪代码----文字形式的表达工具,不能在计算机上执行, 但形式上与代码相似。用它来描述程序的结构,工作量 要比画图小,又比较容易转换真正的代码。
PDL -----关键词+自然语言
结构化语言的结构分为外层和内层:

外层: 具有严格的关键字外语法,用于定义控制 结构和数据结构。包括有简单陈述句、判定和 重复结构等三种。
输入错误! N
继续查询?
跳出循环
6.3.3 PAD图

问题分析图(Problem Analysis Diagram) 采用二维树形结构图表示程序的控制流。
A
A
P
B
(a)顺序结构
B
(b)选择结构
PAD图的基本符号
WHILE P S
UNTIL P
S
(c) WHILE型循环结构 P1 P2 P= … Pn A1 A2

内层: 采用自然语言短语表示实际操作和条件。 使用数据词典中定义的名字和有限的自定义词, 还可以使用一些简单的算术运算和逻辑运算符 号。
下面是商店业务处理系统中"检 查发货单"的例子

IF 发货单金额超过$500 THEN IF 欠款超过60天 THEN 在偿还欠款前不予批准 ELSE (欠款未超期) 发批准书及发货单 ENDIF ELSE (发货单金额未超过$500) IF 欠款超过60天 THEN 发批准书,发货单及催款通知 ELSE (欠款未超期) 发批准书及发货单 ENDIF ENDIF
6.3.1 程序流程图 •也称为程序框图,是历史最悠久、使用最广泛, 独立于任何一种程序设计语言。 •优点:对控制流程的描绘较直观,便于掌握。
起止端点 数据 处理 准备或预处理 预先定义的处理
条件判断
循环上界限
循环下界限
文档
流线
虚线
省略符
并行方式
注释
程序流程图中常用的符号
1、循环符号的使用
循环名 进入循环条件
6.3.4 判定表
建立判定表的步骤

左上部:过程执行期间的所有条件(或所有判 断 )。 左下部:与一个具体过程(或模块)有关的所有 处理。 右上部:各种可能的条件组合。 右下部:每一种条件组合所对应的应做的工作 。




下面以行李托运费的算法为例:
假设某航空公司规定,乘客可以免费托运重量 不超过30kg的行李。当行李重量超过30kg时, 对头等舱的国内乘客超重部分每公斤收费4元, 对其他舱的国内乘客超重部分每公斤收费6元, 对外国乘客超重部分每公斤收费比国内乘客多 一倍,对残疾乘客超重部分每公斤收费比正常 乘客少一半。用判定表可以清楚地表示与上述 每种条件组合相对应的计算行李费的算法,如 表6.1所示。
副教授
2 T
3 F
4 F
5 F
F
F T × F F ×
T
F F F
F
T F F
F
F T F
讲师 助教
讲座 50 30
25
×
20
15
×
×
教授 副教授 一般授课 课时津贴 讲座 50 讲师 助教
30 25 20 15
教师课时津贴判定树
6.3.6 过程设计语言 PDL 是一种用于描述功能模块的算法设计和 加工细节的语言,使用自然语言的词汇,同时 使用程序设计语言的语法,称为设计程序用语 言。它是一种伪代码(Pseudo code)
--- 重复型结构 DO LOOP <条件描述> <程序块/伪代码语句组>; EXIT WHEN ENDLOOP DO FOR <下标=下标表,表达式> <程序块/伪代码语句组>; ENDFOR
----- 多路选择结构
CASE OF <case 变量名>; WHEN < case 条件1> SELECT <程序块/伪代码语句组>; WHEN < case 条件2> SELECT <程序块/伪代码语句组>; … … DEFAULT: < 缺省或错误case: <程序块/伪代码语句组>; ENDCASE
用判定树计算行李费的算法


某校制定了教师的讲课课时津贴标准。对于各 种性质的讲座,无论教师是什么职称,每课时津贴 费一律是50元;而对于一般的授课,则根据教师的 职称来决定每课时津贴费:教授 30 元,副教授 25 元,讲师20元,助教15元。 用判定表和判定树表示课时费的计算方法。
1 教授
(1)、数据说明: 其功能是定义数据的类型和作用域 格式: TYPE <变量名> AS <限定词1> <限定词2>
说明: 1. 变量名:是一个模块内部使用的变量或模块间共用 的全局变量名。 2. 限定词1 :标明数据类型 3. 限定词2 :标明该变量的作用域 TYPE number AS STRING LENGTH (12)
(4)、基本控制结构: IF <条件> THEN <程序块/伪代码语句组>; ELSE <程序块/伪代码语句组>; ENDIF
--- 选择型结构
--- 重复型结构
DO WHILE <条件描述> <程序块/伪代码语句组>; ENDDO REPEAT UNTIL <条件描述> <程序块/伪代码语句组>; ENDREP
循环体
S=0 i=1,100 S=S+i
S=0,i=1 S=S+i i=i+1 i >100 T
循环名 循环体
i
F
2、多出口判断流程符号的使用
A=B A<B X=? x=1 x=2 x=3 x=4 =4 =5
A:B A>B
X=? =1 =2 =3


请利用程序流程图描述下列问题的程序结构
某汽车修配厂,有一个存有汽车零件的 仓库,其中存有若干种零件,请编写一个查 询程序,用于查询该库中某零件的库存量为 多少。
6.4 面向数据结构的设计方法
6.4.1 Jackson图 6.4.2 Jackson程序设计方法 退出
6.5 程序复杂程度的定量度量
程序复杂性主要是指模块内部程序的复杂性 。它直接关系到软件开发费用的多少,开发周期 的长短和软件内部潜伏错误的多少。同时它也是 软件可理解性的另一种度量。
程序复杂程度定量度量意义:
X=S[0][i]
F
提示输入错误
Y 输出S[0][i]和S[1][i] 结束
输入零件号X X!=S[0][i]
i++
X
程序流程图的随意性和灵活性使它存 在一些缺点:
( 1 )并不是逐步求精的好工具:诱使程序 员过早地考虑程序的具体控制流程,而忽略了程 序的全局结构; ( 2 )用箭头代表控制流,这样使得程序员 不受任何约束,可以完全不顾结构程序设计的精 神,随意转移控制; ( 3 )程序流程图在表示数据结构方面存在 不足。
设该模块为查询模块。请设计该模块的 程序结构。具体要求: 1、应具有重复查询功能; 2、应具有数据检测功能; 3、请利用程序流程图描述该模块的算法。
零件号
库存量
10001 10002 10003 10004 10005 10006
1000 1250 886 69 2020 3450
开始
输入零件库存 S[ ][ ]数组 i=0
(2)、程序块: PDL的过程成分是由块结构构成的,而块将作为 一个单个的实体来执行。 BEGIN <块名> < 一组伪代码语句> END
(3)、子程序结构: 把 PDL 中的过程称为子程序。 PROCEDURE <子程序名> <一组属性> INTERFACE <参数表> < 程序块或一组伪代码语句> END

程序的复杂程度乘以适当常数即可估算出 软件中故障的数量以及软件开发需要的工 作量。 可以比较两个不同的设计和算法的优劣。 定量的复杂程度可作为模块规模的精确限 度。

6.5.1、McCabe 度量法 该方法是利用程序模块的程序图中环 路的个数,来计算程序的复杂性的。为此 ,该方法也称为环路复杂度计算法。 原理:程序的复杂性很大程度上取决
第一个任务 第二个任务 第三个任务 (a) 顺序结构 循环条件 DO_WHILE 部分
F ELSE 部分
条件 THEN 部分
T 值1
Case 条件 值2 „ 值n Casen 部分 Case1 Case2 部分 部分 (c) 多分支结构
(b) 选择结构
DO_UNTIL 部分 循环条件
A
(d) 循环结构
(e) 调用子程序 A
N-S图的基本符号
N-S图的嵌套定义形式


请利用N-S描述下列问题的程序结构
某汽车修配厂,有一个存有汽车零件的 仓库,其中存有若干种零件,请编写一个查 询程序,用于查询该库中某零件的库存量为 多少。
设该模块为查询模块。请设计该模块的 程序结构。具体要求: 1、应具有重复查询功能; 2、应具有数据检测功能; 3、请利用N-S图描述该模块的算法。
相关文档
最新文档