软件工程第四章-2(软件设计)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
更新事务
(3)混合流设计举例 变换中心 传出 传入 m EH T1 c1 LM b1 h e L b d g k b 2 c2 CD DE AB BC KL HK
T2
T3
a
b3 c3
f
FJ
j
事务流子系统
混合流设计举例
d 输入D d c c 输入C CD
XX系统
d k 变换控制 e k d f h g gj
„„
活动通路
„„
„„
„„
优化数据流图 面向数据流 方法的设计 “事务” “变换” 流类型 过程
区分事务中心 和数据接收路径 区分输入和 输出分支
映射成事务结构
事务分析
映射成变换结构
变换分析
用启发式设计规则优化软件结构
导出接口描述和全程数据结构 复查
详细设计
初始的SC
主模块
由变换分 析产生
输入模块 主加工模块 传出模块
§4.5概要设计(总体设计)
概要设计确定:
软件系统的结构 各模块功能及模块间联系(接口)
表示软件结构的图形工具
结构图(SC,Structured chart) 层次图和HIPO图
4.5.1 面向数据流的设计方法
(结构化设计方法SD,Structured Design)
1. 面向数据流设计方法的基本概念
时间
变换流
• 当数据流图具有这些特 征时,这种信息流就叫作 变换流。
事务型数据流
当数据流经过一个具有 “事务中心”特征的数据 处理时,它可以根据事务类型从多条路径的数据 流中选择一条活动通路。 这种具有根据条件选择处理不同事务的数据流, 就是事务型数据流,简称事务流。
事务 中心 ⊕
„„
⊕ ⊕
(3)、调整软件结构以保证结构中的模块满 足作用范围/控制范围原则
• 原则:某模块的判定语句的作用范围应在该模块的控制范 围之内,最好在直接控制范围之内。(下图中绿色的模块 是判定语句的作用范围)
T X A B1 Y B B2 X A B1 T Y B B2 X A B1 T Y B B2 A X T Y B B1 B2
软件结构图的六种模块类型(续)
⑵ 传出模块 从上级模块获得数据,经处理后再将其传送给下属模块。
X X Y
Y
⑶ 变换模块
也叫做加工模块。它从上级模块获得数据,经处理,转换 成其他形式,再传送回上级模块。
软件结构图的六种模块类型(续)
⑷ 源模块
X 传入的始端 X 传出的末端
⑸ 终模块 以上两种模块只被调用,不调用别的模块。
航线调度系统HIPO图举例 H 图: 命令监控器
1.0
取得输入 1.1
输入确认 1.2
请求确认 1.3
更新处理 1.4
传统的IPO图举例
输入
读口令请求 口令文件 权限文件
处理
1取得输入 2口令确认 3请求确认 4更新处理
输出
请求记录
权限记录 状态报告
响应
命令监控器(1.0)的IPO图
改进的IPO图格式
添加 删除 插入 修改 合并
列表
带编号的层次图(H图)
正文加工系统
输入 输出 编辑 加标题 1.0 2.0 3.0 4.0
存储 检索 编目录 5.0 6.0 7.0
添加 删除 插入 修改 合并 3.1 3.2 3.3 3.4 3.5
列表 3.6
2.
HIPO图
H图中每一方框(模块)均有一张 IPO图对应
传 入 分 支 的 分 解
c
C
b
c,e MA
e
E
d
B
a
D
A
传 出 分 支 的 分 解
w,u
ME
w
W
u
U
v
V
中心加工分支的分解
MT
e p
Q
c,p
P
r
u,w r
R
下面设计一个“统计输入文件中单词数目”程序。
文件名
读文 件名
文件名
验证 文件名
有效的 文件名
统计 单词数
单词 格式化 格式化 总数 单词数
计时 税收 薪金 常规 制工 制工 资额 扣款 资额 扣款
编外 编外 编外 人员 人员 人员 工资 税款 扣款
设计良好的软件结构应该是 顶层扇出比较高,中间扇出 较少,底层扇入到高扇入的 公共模块,有点类似于橄榄 状的结构
(5) 模块大小适中
模块过大:可理解程度下降 模块过小:开销大于有效操作 系统接口复杂
打包指用来为特定环境组装软件的 技术
4.5.4 层次图和HIPO图
IBM公司发明的HIPO图:
层次图 + 输入 / 处理 /输出图 ( H图 ) (IPO图)
(Hierachy Input Process Output)
1.
层次图(H图)
表示软件的层次结构
正文加工系统
输入 输出 编辑 加标题
存储 检索 编目录
单词数
显示 单词数
单词总数
输入流边界
输出流边界
文件单词数目统计
第一次分解
格式化和显示单词数
读取和验证文件名
统计单词数目
文件单词数目统计
第二次分解
格式化和显示单词数
读取和验证文件名
统计单词数目
读文件名
验证文件名
格式化单词数
显示单词数
4、事务分析设计方法
任何情况下都可使用变换分析方法 设计软件结构,但如数据流具有明 显的事务特点时 (有一个明显的事 务中心),以采用事务分析方法为宜 。
事务分析设计方法步骤:
(1)在DFD上确定事务中心、接收部 分和发送部分。 (2)画出SC框架,把DFD上的三部分 分别映射为事务控制模块、接收 模块和动作调度发送模块。 (3)分解细化接收分支和发送分支, 完成初始SC。
接收 路径
总控 调度
A路径
B路径
C路径
A路径
C路径 B路径
事务分析的映射方法
事务流设计
查询 事务1
事务2
有效 事务
有效 事务
更新事务
v
存款 取款
更新事务
w
审计信息
事务选择 确定事
事务3
有效 事务
务类型
更新事务
x
事务4
审计 记录
事务5
转账
有效 事务
更新事务
y
映射成
修改密码
有效 事务
更新事务
z
ATM机处理事务主控
分析器
调度器
ATM机系统结构
转账 修改密码
事务选择
查询
ቤተ መጻሕፍቲ ባይዱ存款
取款
审计记录
(4) 减少高扇出争取高扇入
高扇出的模块结构举例: 计算实发工资
取得 计时 薪金 编外 税收 编外 常规 编外 工资 制工 制工 人员 人员 人员 数据 资额 资额 工资 扣款 税款 扣款 扣款
避免平铺结构
增加中间层降低扇出
计算实发工资
取得工 计时工人 计薪工人 资数据 实发工资 实发工资 编外人员 实发工资
事务控制模块
由事务分 析产生
接受模块
动作调度模块
动作1模块 动作2模块 动作3模块
软件结构图的六种模块类型
• ⑴ 传入模块 从下属模块传入数据X,经处理后返回给上级模块数据流 Y。它传送的数据流叫做逻辑输入数据流。
Y 模块名 X
数据流
控制流
箭头尾部是空心圆表示传递的是数据,否则表示传递的是 控制信息。为了绘图简便本讲义后面暂且全部用普通箭头
4.6.1 结构化程序设计(SP)方法 传统的设计技术和旧观念:
设计的随意性,具有浓厚的个人色彩. 追求程序效率和个人设计技巧
新的设计思想和风格:
清晰第一
使用标准的、规范的控制结构
逐步细化
4.6.2 详细设计的描述方法
详细设计工具: (1) 图形工具 (2) 表格工具 (3) 语言工具
变换分析设计方法步骤
(2)第一级分解(建立初始SC框架)
设计顶层和第一层模块
第一级分解的方法
MC MA MT ME
第一级分解后的SC
MC
顶层
c,e
MA
传入模块
u,w c,e u,w
MT
中心变 换模块
ME
第一层
传出模块
第一级分解后的SC(另一种画法)
MC
p
c
e
e
c,p
r r
P
w,u
u
w
ME1
MA1 MA2
软件结构图的六种模块类型(续)
⑹ 控制模块
对所有下属模块进行协调和管理的模块。在一个 好的系统结构图中,协调模块应在较高层出现。
或
X X Y Y X Y
……… …
模块调用的表示
⑴ 简单调用
A X,Y B Z C X
箭头指向被调用模块 模块A调用B和C,A向B传送数 据流X和Y,B返回A数据流Z
1. 程序流程图
2. 盒图(N-S图) 3. 问题分析图(PAD) 4. 过程设计语言(PDL)(伪码)
5. 判定表
2. 盒图(N-S图)
用方框图代替传统的流程图
描述五种基本控制结构的图形构件
(1) 顺序型
A B C
(2) 选择型(If – then – else)
If – then – else F If – then F
3、变换分析设计方法
步骤:
(1)区分传入、变换中心、 传出部分,在 DFD 上 标明分界线
a A
B
b
变换中心
C
传入 部分
c r P
w
W
传出 部分
d e D E
R p Q u
v U V
从数据流程图的物理输入端开始,向系 统的中间移动,一直到某个数据流不再 被看作是系统的输入为止,这个数据流 的前一个数据流就是系统的逻辑输入。 同理从物理输出端开始,向系统的中间 移动,就可以找到软件的逻辑输出。 在输入部分和输出部分之间的就是中心 变换部分。
Q
R
ME2
传入分 支模块
中心加工 分支模块
传出分 支模块
变换分析设计方法步骤
(3)第二级分解(分解SC各分支)
自顶向下分解,设计出每个分支 的中、下层模块
完成第二级分解的方法是,从变换中心
的边界开始沿着输入通路向左移动,把 输入通路中每个处理逻辑映射成软件结 构中MA控制下的一个低层模块; 然后沿输出通路向右移动,把输出通路 中每个处理逻辑映射成直接或间接受模 块ME控制的一个低层模块; 最后把变换中心内的每个处理映射成受 MT控制的一个模块。
条件
T
条件
T
B
A
A
then –部分
else–部分 then –部分
(3)多分支选择型(CASE型)
条件 值1 值2
....
值n
A1 A2 .... An
(4) WHILE重复型 (5) UNTIL重复型 (后测试循环) (先测试循环)
DO-WHILE P
系统: 模块: 编号:
IPO图
作者: 日期:
被调用: 输入:
调用: 输出:
输入: 局部数据元素:
注释:
§4.6详细设计(过程设计、模块设计)
主要任务:编写详细设计说明书 为此,设计人员应: (1)确定每个模块的算法,用工具 表达算法的过程,写出模块的 详细过程性描述。 (2)确定每一模块的数据结构。 (3)确定模块接口细节。 详细设计是编码的先导。
(6)降低模块接口的复杂性
接口传递信息应简单且和模块功能 一致。
(7) 模块功能可预测
模块看成黑盒子,相同输入产生 相同输出,其功能为可预测的。 模块带有内部状态其功能可能是 不可预测的。难理解、难测试、 难维护。
(8)避免模块的病态连接
防止指向模块中间的分支或引用 (针对内容耦合)
(9)根据设计约束和可移植性 需求对软件打包
SD以数据流图为基础,它定义了把 DFD(Data Flow Diagram)变换成软件结构的映 射方法
DFD
(问题结构)
映射
软件系统的结构
(程序结构)
数据流图可分为两种类型: 变换型数据流 事务型数据流
变换型数据流
信息
输入流
输出流
• 信息沿输入通路进入系 统;
• 进入系统的信息通过变 换中心; • 经加工处理以后再沿输 出通路离开软件系统;
违背原则
符合但太高
适中
理想
如果在设计过程中,发现作用范围不在控制范围内 ,可采用如下办法把作用范围移到控制范围之内: 1)提高控制模块的层次。将判定所在模块合并到父 模块中,使判定处于较高层次。 2)将受判定影响的模块下移到控制范围内; 3)将判定上移到层次中较高的位置。但是要注意, 判定所在的模块最好不要太高,模块之间的控制参 数传递路径太长,增加了模块之间的耦合。
改进软件结构设计的指导原则
(软件结构设计的启发式规则)
(1) 模块功能的完善化
完整的模块应包括三部分:
(1)执行规定功能部分
(2)出错处理部分
(3)需返回给调用者数据时, 返回是否正确结束标志。
(2)消除重复功能
X
Q1
Y
Q2
X
Y
Q’
X
Q1
Y
Q2
C C
重复部分
改进前 Q1、Q2功 能相似
改进方法1: C 将Q1、Q2 改进方法 2 : 合并为Q’ 将 Q1 、 Q2 的公共 不可取
DE FJ EH
k 输出K k
L
L
HK
KL 输出L
事务子系统
L
m
m
LM 输出M
混合流设计
订货输入
订货处理
提货发票
读入数据
判别
进货输入
库存修改
进货票据
订单记录
分析统计
生成统计表
映射成
4.5.3 体系结构设计优化
将初始SC根据模块独立性原 则进行优化,对模块进行合并、分 解修改、调整,得到高内聚、低 耦合模块,得到易于实现、易于 测试和易于维护的软件结构,产 生设计文档的最终SC。
模块调用的表示(续)
⑵ 选择调用
表示判定条件。 A
B
B C D
模块A 中某个判定为真时调用模块B, 为假时不调用。
C
D
模块A 中某个判定为真时调用模块C, 为假时调用模块D。
模块调用的表示 (续)
⑶ 循环调用
A A
B
C
B
C
D
模块A根据内部循环条件,重复调用B、C模块, 直至内部出现满足循环终止条件为止。