软件工程第五章传统设计方法
Proc Old Bal
程序结构图
第三步:写出程序的过程性表示
LCP法
Logical Construction of Programs, 与Jackson方法类似,也是从数据结构出发设计程序, 但是该方法的逻辑更严格。
映射 详细组织
数据结构 (Warnier图) 程序分析
程序结构 (Warnier图)
3. 用Jackson伪代码写出结构图中每个处理的过程性描述
例5.7 信用卡购货季报程序。
建立两个帐册:顾客帐册和付款帐。 每季度末,根据帐册产生一份会计报表。 第一步:画数据结构图
第二步:画程序结构图
Pay-File
C-M-F
CNO-Group*
Cust-REC*
Pay-REC*
Balance
例5.1:用事务映射方法从下图导出 相 应的初始SC图。
第一层分解
事物控制 事物 分析 发送
第一层分解后细化
混合结构
5.2.5优化结构设计的指导规则
1.对模块分割、合并和变动调用关系的指导规则 提高内聚,降低耦合 简化模块接口。接口复杂可能表明模块的独立 性差 少用全局性数据和控制型信息。因为可能导致 不可预测的结果 控制模块大小。过大不易理解;太小则接口开 销过大 有时不必拘泥于DFD图
Internal PROCEDURE spell_check IS statements BEGIN Split document into single words Look up words in dictionary External statements Display words which are not in dictionary Create a new dictionary END spell_check
在一组数中找出其中的 最大数
第一步: 1.输入一组数; 2.找出其中的最大数; 3.输出最大数
2.1 任取一数,假设它就是 最大数; 2.2 将该数与其他各数逐一 比较; 2.3 若发现有任何大于该假 设的最大数,即取而代之
5.3.3 常用的表达工具
流程图(Flow Diagram)和N-S图
A
B
C
5.2.2 数据流图的类型与SD方法的步骤
1. DFD(数据流图)的类型
(1)变换型结构
(2)事务型结构
基本模型
同时存在两类结构的系统
2. SD方法的步骤
从DFD图到SC图的映射 : (1)复审DFD图,必要时可再次进行修改或细化 (2)鉴别DFD图的结构特征:事务?变换?
(3)按照规则,把DFD图映射为初始的SC图:
伪代码和PDL语言
流程图(Flow Diagram)
任何复杂的程序流程图都应由以上五种基本结 构组合而成。
优点:容易掌握,使用广泛。 缺点:不具备逐步求精的特点,不利于提高大型 系统的可理解性; 转移控制过于方便。 趋势:尽可能少地使用
1973年,Nassi&Shneiderman提出
事务映射 或 变换映射 (4)改进初始的SC图
5.2.3变换映射
• 划分DFD图的边界 • 建立初始SC图的框架 – 顶层都只含一个用于控制的主模块 – 第一层包括传入、传出和中心变换三个模块 • 分解SC图的各个分支 – 分解实质上是(根据DFD图的)“映射”
例5.1:用变换映射方法从下图导出 相应 的初始SC图。
付款帐数据结构
总帐数据结构
Acct Rept
Cust Data
Master Totals
CNO Group*
Total PMT
Total Bal
CNO
Pay REC
Cust Total
Bal Data
Rept LINE*
Old Bal
New Bal
输出文件的数据结构
Process Pay-File & CMF Giving Acct-Rept
第一级分解
第二级分解(分支分解)
传入分支的分解(一)
传入分支的分解(二)
传入分支的模块调 用与执行
MA
c
C
B
A
b
a
E
D
e
d
传出分支的分解
w, uMEw u来自WUv
V
(a)
(b)
中心加工分支的分解
初始SC图
5.2.4事务映射
在DFD图上确定边界 事务中心 接受部分(包括接受路径) 发送部分(包括全部动作路径) 画出SC图框架 DFD图的三个部分分别映射为事务控制模块, 接受模块和动作发送模块 分解和细化接受分支和发送分支
Proc Cust Data Proc * CNO Group Proc CNO Proc Pay-REC Proc * Rept-LINE Proc Master Tots Comp Tot-PMT Comp Cust-Tot Comp Bal Data Comp New Bal Comp File-Bal
P=1
T
P S
F
(4) 后判定型循环结构 S T P F
T T T
F F F
A1 A2 An
P=2
P=n
…
3.逐步细化的实现方法
1’ 输入一个数组。 输入一个数组; 由粗到细,每次细化一部分 2.1’ 令最大数=数组中的 过程和数据结构的细化要并行的进行 第一元素; 2.3’ 从第二元素至最末一 每一步的细化使用相同的结构化语言,最后 个元素依次做; 一步用伪代码描述 2.3’ 如果新元素>“最大 例5.5 数”则“最大数”=新元素
5.1.2 从分析模型导出设计模型
分析模型
设计模型
5.2 结构化设计方法
SD方法的中心任务是把用DFD图表示 的系统分析模型方便的转换为软件结构设计 的模型。 所提供的方法与原则,主要是为了确定 软件的体系结构与接口。
5.2.1 SC图(Structure Chart,结构图)
1.SC图的组成符号
矩形框来表示模块 带箭头的连线表示 模块间的调用关系 调用时要标明传入 和传出模块的数据 流
传入 X X 变换 控制 X 源 漏 X … Y Y 传出 Y
SC图使用的模块符号
2.SC图中的模块调用
(1)简单调用
X,Y
Z
A
Z
B
C
入 X ,Y Z
出 Z —
(2)选择调用
A B C D
(3)循环调用
5.传统设计方法
目录
5.1 概述 5.2 结构化设计方法 5.3 过程设计 5.4 Jackson方法
5.1.1 面向数据流设计和面向数据设计
面向数据流设计
面向数据设计
以SD方法为代表 以数据流出发点 目标是得出软件 的体系结构
以Jackson方法为 代表 以数据结构作为 分析和设计的基 础 侧重点是程序的 过程性描述
程序结构 (流程图)
详细的过程描述
(伪代码或结构化英语)
程序设计
THANK YOU
2.保持高扇入/低扇出的原则
高扇入——提高模块利用率 低扇出——减少控制复杂度 良好的软件通常具有瓮形结构
煎饼型结构
塔 型 结 构
瓮形结构
3.作用域/控制域规则
(1)模块的作用域/控制域 控制域:模块本身及下级模块 作用域:受模块中的判定影响的模块 (2)作用域/控制域规则 作用域不要超出控制域的范围 位置离受它控制的模块越近越好
5.3 过程设计
5.3.1 目的与任务 1.目的
确定模块采用的算法和块内数据结构 使用适当的表达工具,便于编码
2.任务:编写软件的“过程设计说明书”
为每个模块确定采用的算法 确定每一模块使用的数据结构 确定模块接口的细节,如内外接口和用户界面 设计测试用例
5.3.2 过程设计的原则与方法
1.清晰第一的设计风格
Dijkstra 1960: 取消GOTO语句 一般地,清晰第一,效率第二
2.结构化的控制结构,保持程序的清晰线索
限制GOTO语句的使用 只适用3种基本控制结构:顺序、选择、循环 模块单入、单出
(1) 顺序结构
(2) 选择结构
(3) 先判定型循环结构
A
B
F
A
P
T
B (5) 多情况选择
N-S图
A B
Sequential S
Do-Until P
F
P A B
T
F
P B
T
Do-While P
S While
Selective P 1 A1 2 A2 Case n An
A
Call subroutine
Until
伪代码和PDL语言
伪代码的的意思是并非真正的代码,也不 能在计算机上执行,但形式上与代码相似。 PDL是一种用于描述功能模块的算法设计和 加工细节的语言。称为设计程序语言。它 是一种伪码。 PDL可描述选择结构和循环结构,是一种十 分灵活和有用的过程设计表达工具。
5.4 Jackson方法
5.4.1 Jackson 表示法
A
Bo
A S
A
I Co
S
B
C
B C
B*
C
A=
A=
B
A=B
Jackson 方法是面向数据结构的开发方法。
5.4.2 Jackson方法的设计步骤
1.
用Jackson图画出输入数据和输出数据的数据结构;
2.
找出输入数据结构和输出数据结构中有对应关系的 数据单元,画出软件结构图 • 对输入输出有对应关系的数据单元画一个处理框 • 为输入结构每个剩余的数据单元画一处理框 • 为输出结构每个剩余的数据单元画一处理框