结构化软件设计

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

• 过程内聚 如果一个模块内部的处理成分相关,必须
以特定的次序执行,则称为过程内聚。
B
• 通信内聚 如果一个模块的所有成分操作同一数据集
或生成同一数据集,则称为通信内聚。
内聚类型
• 顺序内聚 如果一个模块的各个成分和同一个
功能密切相关,而且一个成分的输出作为另一 个成分的输入,则称为顺序内聚。
• 功能内聚 模块的所有成分对于完成单一的B
内聚强弱排序
• 设计时力争做到高内聚。
B
耦合和内聚的关系
• 聚和耦合是密切相关的,与其它模块存在强耦合的模块通 常意味着弱内聚,而强内聚的模块通常意味着与其它模块 之间存在弱耦合。
• 模块设计追求强内聚,弱耦合。 • 片面明确耦合程度和内聚程度是没有任何实际意义的,我 们重要的是借助耦合和内聚的概念帮助我们设计模块。
• SA、SD和SP构成完整的结构化方法体系
结构图(SC)
• 用结构图(Structure Chert)来描述软件系统 的体系结构 • 描述一个软件系统由哪些模块组成,以及 模块之间的调用关系 • 结构图的基本成分有:模块、调用和数据
B
模块
• 模块(module):指具有一定功能的可以用 模块名调用的一组程序语句,如函数、子 程序等 • 它们是组成程序的基本单元 • 一个模块具有其外部特征和内部特征
– 模块功能可预测是指该模块对相同的输入能产生相同的输出 – 限制一个模块只处理单一的功能,那么,这个模块体现出高内聚 B – 单入口和单出口的模块能有效地避免内容耦合
概要设计
Sc图
DFD
(问题结构)
映射
软件系统的结构
B (程序结构)
SD方法表达工具—SC图
不加区分的数据 数据信息 控制信息
编辑学生记录 学生数据 学号
开发票 单价 数量
金额
B
计算水费
标记耦合举例
计算水电费 住户情况
水费
电费
住户情况
计算水费
计算电费
B “住户情况”是一个数据结构,图中模块都 与此数据结构有关. “计算水费”和“计算电费”本无关,由于 引用了此数据结构产生依赖关系,它们之间 也是标记偶合.
耦合强弱排序
原则:如果模块间必须存在耦合,尽量使用数据耦 B 合,少用控制耦合,限制公共环境耦合的范围,完 全不用内容耦合。
•变换型结构 •事务型结构
B
变换型结构
信息流 外部表示
输入流 输出流
信 息
变换流 内部表示 时间
信息沿输入通路进 入系统,同时由外部 形式变换成内部形式 ,进入系统的信息通 过变换中心,经过加 工处理以后再沿输出 通路变换成外部形式 离开软件系统。 B 当数据流具有这些特 征时,这种信息流称 为变换流。
B
耦合
• 耦合是对一个软件结构内各个模块之间互连程 度的度量。 • 耦合强弱取决于模块间接口的复杂程度,调用 模块的方式,以及通过接口的信息。 • 根据模块间耦合程度的强弱的标准,划分耦合 类型,共有七种。
B
图示
紧密耦合-有 很多依赖关系 松散耦合-有 少量依赖关系
B
无耦合-没有依赖关系
耦合类型(高→低)
A
B
A B
模块代码重叠
一模块直接访问 另一模块的内部 信息 (程序代码 或数据)
最不好的耦合形式 !!!
公共耦合举例

B
C
公共数据区
B
模块A、B、C间存在错综复杂的联系
控制耦合举例
B
读入分数
A
平均/最高 (控制信号) 成绩
平均/最高? 计算平均分 计算最高分
B
B
计算平均分 或最高分
输出结果
数据耦合举例
B
模块化
• 模块是数据说明、可执行语句等程序对象的集
合,模块可以单独被命名,可通过名字访问。 例如,过程、函数、子程序、宏等等都可作为 模块。
• 模块化就是把程序划分为若干个模块,每个
模块具有独立子功能,再把各个模块集成后, B 实现指定功能,满足问题要求。
抽象化
• 抽象就是抽出事务的本质特性而暂不考虑细节 问题,是人类在认识复杂现象中使用的最强有 力工具。 • 软件工程过程的每一步都是对问题的软件解法 抽象层次的一次精化。 • 逐步求精与抽象是紧密相关的
• 一个模块的扇出过大通常意味着该模块比较复 杂,然而扇出太少,可能导致深度的增加
– 一般情况,一个模块的扇出以3~9为宜
B
• 一个模块的扇入表示有多少模块可直接调用它, 它反映了该模块的复用(reuse)程度,因此模块的 扇入越大越好
软件设计中的概念
• 模块化 • 抽象信息局部化 • 模块独立性 • 耦合 • 内聚
功能都是必须的,则称为功能内聚。
偶然内聚(巧合内聚)
模块内各部分间无联系
例:
A
M
B
MOVE O TO R READ FILE F
C
MOVE S
TO
B
T
模块M中的三个语句没有任何联系 缺点:可理解性差, 可修改性差
逻辑内聚模块
A B C
公用代码段
E
F
G
E、F、G逻辑 功能相似,组 成新模块EFG
A1
Top Y B A (d)
B
B1
(a)
B2
B1
B1
B2
设计策略-3
• 降低模块接口的复杂程度和冗余程度,提高一致性
– 模块接口上应尽可能传递简单数据,而且传递的数据应保持与模块 的功能相一致,即不传递与模块功能无关的数据
• 模块的功能应是可预测的,避免对模块施加过多的 限制 • 尽可能设计单入口和单出口的模块
耦合类型
• 标记耦合
模块间通过参数传递复杂的内部数据结 构,称为标记耦合。此数据结构的变化将使相关的模 块发生变化。 模块间通过参数传递基本类型的数据, 称为数据耦合。
B
• 数据耦合
• 非直接耦合 模块间没有信息传递时,属于非直接耦
合。
内容耦合举例 Entry1 …… Entry1 ……
多入口模块 B
Sc图
DFD
(问题结构)
映射
软件系统的结构 B
(程序结构)
结构化设计
• 强调模块化、自顶向下逐步求精、信息隐 蔽、高内聚低耦合等设计准则 • 分为概要设计和详细设计两大步骤
– 概要设计是对软件系统的总体设计,采用结构化设 计方法,其任务是:将系统分解成模块,确定每个 模块的功能、接口(模块间传递的数据)及其调用关系, 并用模块及其对模块的调用来构建软件的体系结构 B – 详细设计是对模块实现细节的设计,采用结构化程 序设计(Structured Programming,简称SP)方法
事务型结构
事务 T 事务中心 数据沿输入通路到 达一个处理T,这个 处理根据输入数据的 类型在若干个动作序 列中选出一个来执行 。这种“以事务为中 心的”的数据流,成 为“事务流”。 B
• 内容耦合 当一个模块直接修改或操作另一个模块的数
据,或者直接转入另一个模块时,就发生了内容耦合。 此时,被修改的模块完全依赖于修改它的模块。
• 公共耦合两个以上的模块共同引用一个全局数据项就称
为公共耦合。
B • 控制耦合一个模块在界面上传递一个信号(如开关值、
标志量等)控制另一个模块,接收信号的模块动作根据 信号值进行调整,称为控制耦合。
则称为逻辑内聚。如一个模块读取各种不同类型外设的 输入。尽管逻辑内聚比偶然内聚合理一些,但逻辑内聚 的模块各成分在功能上并无关系,即使局部功能的修改 B 有时也会影响全局,因此这类模块的修改也比较困难。
内聚类型
• 时间内聚 如果一个模块完成的功能必须在同一时间
内执行(如系统初始化),但这些功能只是因为时间 因素关联在一起,则称为时间内聚。
• 数据(data):模块调用时需传递的参数可通过 在调用箭头旁附加一个小箭头和数据名来表 B 示
结构图的几个概念
• 深度:程序结构图中控制的层数,例如图中所示的结构图的 深度是5 • 宽度:程序结构图中同一层次上模块总数的最大值,例如图 中所示的结构图的宽度为7 • 扇出(fan out):该模块直接调用的模块数目。例如,例如图中 模块M的扇出是4,模块A的是2,模块B的扇出是1 • 扇入(fan in):能直接调用该模块的模块数目。例如图中模块 G的扇入是1,模块I的扇入是2,模块R的扇入是4
无此学生 B 读学生记录
SC中的四种模块
A
传入模块
B
传出模块
C B
D
协调模块
变换模块
A
E E F
B
F
(a)
(b)
(c)
(d)
SC简单调用
A
X,Y Z Z
B
B
Dቤተ መጻሕፍቲ ባይዱ
SC选择调用
A根据内 部判断决 定是否调 用B
A C
A按另一判 定结果选择 调用C或D
B
B
D
SC循环调用
A
B C
B
A根据内在的循环重 复调用B、C等模块
– 图a中,模块B2的影响范围(模块A)不在其控制范围(模块 B2)内 – 图b中,决策控制是在顶层模块,其影响范围(A、B2)在 控制范围内,但是从决策控制模块到被控模块之间相差 多个层次 – 图c和d较合适,图d为最好
Top X A Y B X A
Top
Top Y B X A B2 (b) B1 (c) Y B B2 X
W B E G I H J 宽度 K 扇出 C L N O R M P 扇入 Q
A 深度 F D
B
相关指标的含义
• 深度和宽度在一定程序上反映了程序的规模和 复杂程度
– 相对而言,如果程序结构图的深度和宽度较大,则说明 程序的规模和复杂程度都较大。 – 模块的扇入扇出会影响结构图的深度和宽度,例如减少 模块的扇出,可能导致宽度变小而深度增加
B
设计策略-1
按照模块化设计原则,相应的启发式设计策略如下: • 改造程序结构图,降低耦合度,提高内聚度 • 避免高扇出,并随着深度的增加,力求高扇入
– 避免如图a那样的“平铺”形态,较好的结构图形态 是如图b那样的“椭圆”型
B
(a)平铺形态
(b)椭圆形态
设计策略-2
• 模块的影响范围应限制在该模块的控制范 围内,例如下图中
B1
C1
A
B EFG
C
B 公用代码段
EFG模块内部逻辑
缺点:增强了耦合程度(控制耦合) 不易修改,效率低
过程内聚模块
读入 成绩单 审查 成绩单 统计 成绩 打印 成绩
读入并审查 成绩单
统计并打印 成绩单
B
通信内聚模块例
职工工 资记录
产生工 资报表
职工工 资报表 平均 工资
计算平 均工资
B
产生职工工资报表并计算平均工资模块
结构图(SC)举例
处方 挂号
医院管理系统
计 总 费
门诊 管理
挂 号 单
挂 号 费 总 计
药库 管理
药房 管理
病房 管理
财务 管理
B
挂号 病历 处方 处理 管理 管理
出库 处理
常规 处理
进药 管理
数据流图类型和SD方法的步骤
在软件设计开始之前,首先要分清DFD图所 显示的系统特征.在DFD图所代表的SA模型中, 所有系统均可以纳入两种典型的形式:
B
现实世界
面 向 OOA 对 象 开 OOD 发 方 法 OOP
结 构 化 开 发 方 法
结构化 分析SA
结构化 设计SD
结构化 编程SP B
计算机世界
软件设计任务
管理观点
概要设计 详细设计
数据设计 系统结构设计
技术观点
B
过程设计
软件设计方法分类
分 类
代 表
结构化设计方法
面向数据流的设计或者 过程驱动的设计 面向数据结构的设计或 者数据驱动设计 面向对象设计
LCP,JSP,DSSD
Coad,Yourdon
结构化设计方法(Structured B Design ,SD)基于模块化、自 顶向下逐层细化、结构化程序 设计等程序设计技术上发展起 来的。
结构化设计
• 结构化设计(Structured Design,简称SD)是一种 将结构化分析得到的数据流图映射成软件体系 结构的设计方法
B
模块独立性 • 模块独立性是软件系统中每个模块只涉
及软件要求的具体子功能,而和软件系 统中其他的模块接口是简单的。 • 模块独立的概念是模块化、抽象、信息 隐蔽和局部化概念的直接结果。 B • 重要概念:耦合、内聚
模块独立性的度量
模块独立性取决于模块的内部和外部特征。 SD方法提出的定性的度量标准: • 模块之间的耦合性 • 模块自身的内聚性
内聚
• 内聚标志一个模块内各个元素彼此结合的紧密 程度。 • 它是信息隐蔽和局部化概念的自然扩展。简单 地说,理想内聚的模块只做一件事情。 • 根据各个模块之间的内聚程度不同,分为七个 B 类型的内聚
内聚类型
• 偶然内聚 如果一个模块的各成分之间毫无关系,则称
为偶然内聚。
• 逻辑内聚 几个逻辑上相关的功能被放在同一模块中,
– 外部特征包括:模块的接口(模块名、输入/输出参数、返 回值等)和模块的功能 B – 内部特征包括:模块的内部数据和完成其功能的程序代码
• 在SD中,我们只关注模块的外部特征,而 忽略其内部特征
调用和数据
• 调用(call):用从一个模块指向另一个模块的 箭头来表示,其含义是前者调用了后者
– 为了方便,有时常用直线替代箭头,此时,表示位于上 方的模块调用位于下方的模块
相关文档
最新文档