结构化系统设计 ppt课件
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
模块设计中模块控制域与作用域的设计原则:
1.对于任何一个内部存在判断调用的模块,它的判
断作用的范围应该是其控制范围的一个子集。 2.存在判断调用的模块,所在层次不要与那些属于判
断作用范围的模块所在的层次相隔太远。
4、模块的扇入和扇出原则
模块的扇出 模块扇出的原则 模块的扇入 模块的扇入原则 模块扇出扇入总原则
数据耦合
sum(int a,int b) {int c; c=a+b; return(c); } main() { int x,y; printf(“x+y=%d”,sum(x,y))}
控制耦合
模块之间交换信息中包含有控制信息(有时控制信息以数 据的形式出现)
void output(flag) {if (flag) printf(“ok!”);
else printf(“no!”); } main() { int flag;
output(flag); }
公共耦合
如果两个或多个模块都和同一个公用数据域有关 1)系统可理解性降低(模块间存在错综复杂的连系) (2)系统可维护性差(修改变量名或属性困难) (3)系统可靠性差(公共数据区及全程变量无保护措施)
标准:
1.信息系统的功能:是否满足用户的需求 2.系统的效率:响应时间、操作的方便性 3.系统的可靠性:抗干扰能力、故障恢复 4.系统的工作质量:准确性、使用效果 5.系统的可变更性:修改和维护的难易程度 6.系统的经济性:系统收益与支出比
结构化系统设计的特点:
(1) 对一个复杂的系统,应用自顶向下、逐步求精的方法 予以分解和化简。
的直属下级模块的控制范围模 块。扇出系数是指其直属下级模块的个数。 扇出原则: -模块的扇出直接影响着系统的宽度 -模块的扇出过大,控制与协调困难,模块的聚合可能较低 -模块的扇出过小,说明上下级模块或本身过大,应进行分解 -一个系统的平均扇出系数通常是3至4,一般不应超过7
退
格
考
科
安
据
级
目
排
例如:一个模块用于计算高于平均分的人数,步骤是先循环累 计总分,然后计算得到平均分,最后循环统计高于平均分的人 数有步骤的先后,而且前一个步骤的结果要用于后一步骤的运 算中
通信内聚
上图中有两个工作: 按配件编号查询“数据存储”,获得单价。 按配件编号查询“数据存储”,获得库存量。 这两个处理动作都使用相同的输入数据,称为通讯内聚
系统设计的任务——总体设计和详细设计 系统总体设计是把总任务分解成为许多基本的、 具体的任务 • 将系统划分为模块 • 决定每个模块的功能、模块的调用关系 • 决定模块的界面,即模块间的数据传递 设计就是要回答“怎么做” 完成技术实现方案的制定,即信息系统的物理模型
– 一个逻辑模型,可以提出多个物理模型 – 根据物理模型进行实施,得到最终的物理系统
(一)模块的概念
模块(Module) 通常对应于用一个名字就可以调用的一段程序语句
(子程序或函数)
模块具有输入和输出、逻辑功能、运行程序、内部数据四种属性。
模块数量和软件成本的关系如下图所示
成本
软件总成本
接口成本
单元模块成本 模块数量
模块设计的度量标准
为了衡量模块的相对独立性,提出了模块间的耦合(Coupling)与 模块的内聚(Cohesion)两个标准
第7章 结构化系统设计
结构化方法
本章主要内容
系统设计的任务
总体设计:软件结构及各组成成分(子系统或模块之间的 相互关系)
– 结构化设计的概念、基本原则
– 从数据流图导出结构图
结构化设计
– 代码设计
– 输入、输出及人机对话设计
– 模块详细设计
– 数据库设计、网络设计
系统设计说明书
7.1 结构化方法概述
慎用公共数据区和全程变量!!!
当需要修改 公共数据时,
与之相关的 所有模块可能 都要进行修改
模块B、E和模块C之间存在着公共耦合
内容耦合
-若一个模块访问另一个模块的内容(包括数据和程序段)进行了 直接的引用甚至修改; -或通过非正常入口进入到另一模块内部; -或一个模块有多个入口; -或两个模块共享一部分代码;
B的扇出系数为1 A A的扇出系数为2
B
C C的扇出系数为3
B1
C1 C2 C3
模块的扇入(Fan_In)
模块的扇出表达了一个模块与其的直属上级模块的关系 模块的扇入系数是指其直接上级模块的个数
A B的扇出系数为2
B
C
A的扇出系数为3 F的扇入系数为2
D
E
F
G
H
模块的扇入、扇出原则
•模块的扇入说明系统的通用情况,扇入系数越大,表明共享该模 块的上级模块数目越多,通用性越强(通用性强,维护方便)
数据耦合
标记耦合
如果两个模块之间不仅存在着调 两个模块接口的参数包含相同的
用和被调用关系
内部结构
模块之间存在着数据通信 模块之间的通信方式是数据传递 或称参数交换
两个模块通过传递数据结构(不
是简单数据,而是记录、数组等) 加以联系。高级语言的数组名,记 录名,文件名等即为标记,其实传 递的是这个数据结构的地址.
2、 模块的内聚
模块的内聚反映模块内部联系的紧密程度。高内聚性的好处是 可以提高程序的可靠性。
有一个调查表明,50%的强内聚性子程序是没有错误的,而只 有 18%的弱内聚性子程序才是无错的,弱内聚性子程序的出错机 会要比强内聚性出错机会高 6 倍,而修正成本则要高 19 倍。 •模块的组合形式
功能\顺序\通信\过程\暂时\逻辑\偶然组合 •模块组合形式的判断 •模块组合形式的比较
证理货单”;维护起来不如功能内聚方便,要 修改模块中的一个功能,会影响到同一个模块 中的其他功能。
通信组合--通信内聚
一个模块内部的各个组成部分的 处理动作都使用相同的输入数据 或一个模块内部的各个组成部分 的处理动作都产生相同输出数据
内聚性低于顺序组合模块
过程组合--过程内聚
一个模块内部的各个组成部分的 处理动作各不相同,彼此没有什 么关系它们受同一个控制流支配, 决定它们的执行顺序
•片面追求高扇入可能使得模块的独立性降低 高扇入 :扇入就是指被其它类或方法引用。那高扇入也就是说你这
个类/方法...被很多其它类引用了。也就是利用率很高了。如果段 代码连写了三次,应考虑把它单独作为一个方法或类 •高层模块的扇出系数较高、中层模块的扇出系数较少 低扇出 :扇出自然就是引用其它类或方法了。 扇出越高,类就越 不稳定,因为任何一个引用对象出问题了,这个类也就会出问题。 引用超过约七个就算高扇出了. 对其它类的引用过多,导致该类 不稳定(取决所有引用类)
• 一个模块的控制范围是指它本身及其所有下 属模块的集合。
模块A的控制范围是: A、B、C、D
A
计算工资
假如判定出现在模 块A,该判断的作用
范围是:A B、C、D不受影响
B
计算临时工工资
C 计算职工工资
D 计算总工资
有些处理的执行受判断的影响。由此引出判断的作用范围(或称影 响范围)这一概念。 模块的作用域是指模块中判定的作用范围,它是指所有受这个判 定影响的模块。如果模块中含有受判定影响的操作,则该模块在 这个判定的作用范围之中。如果模块执行与否取决于判定的结果, 则该模块及其直接或间接调用的模块均在这个判定的作用范围之 中。 模块的控制域是指模块本身及其直接或间接调用的模块。 如 果模块的作用域不在控制域之内,则会增加模块间数据的传递量, 使模块间出现控制耦合。 模块的控制范围:本身及其所有下级模块。 模块的判断作用范围:被判断调用的模块。
用过程 直接引用 语句调用
离坐标原点越远, 耦合程度越高
方式
-耦合的方式
根据以上因素,对耦合分类如下: 数据耦合:采用子程序调用,调用模块将需要进行处 理的数据传递给被调模块。 标记耦合:两个模块接口参数包含相同内部结构。 控制耦合:一个模块将控制信息传递给另一个模块, 以控制被调模块的内部处理逻辑。(可以分解) 公共耦合:如果两个模块共享同一公用数据,称为公 共耦合。 内容耦合:两个模块之间的内部属性有直接关联,也 称病态耦合。(某些GOTO语句)
1、影响耦合度的因素
如果使用模块A需要了解模块B,那么A和B是耦合的。影
响模块间耦合程度有三方面的因素:模块接口的复杂程
度、调用模块的方式、通过模块接口的数据。
–联系方式--模块间通过什么方式联系 –来往信息的作用--模块间来往信息作什么用 –数量--模块间来往信息的多少。
作用
数量
0
少
多
混合 控制 数据
(2) 强调采用模块化的设计方法,并有一组基本设计策略 (3) 采用结构图作为模块设计的工具。
信息系统的可变更性
• 统计表示:在信息系统的整个生命周期中,系统维护成本占总 成本的80%左右。 • 因此,可变更性是衡量信息系统设计的重要指标。 结构简单
– 系统各组成元素分工明确,易于理解 – 元素之间的关系清晰简洁 软件设计方法: 结构化设计(SD)、面向对象设计(JSD方法)、 面向对象的设计方法(OOD方法)
内聚性较低
暂时组合--暂时内聚 逻辑组合--逻辑内聚
一个模块内部的各个 一个模块内部的各个组成部分的处理动作在 组成部分处理动作和 逻辑上相似,但功能却彼此不同或无关 时间有关。处理动作 须在特定时间内完成
内聚性低
内聚性低,把编辑各种输入数据的功能放在
例如:程序设计中的 一个模块中。又如出错处理。工作模块调用
–反之,低内聚一般会带来紧耦合 松耦合
作为软件设计的军规之一。各部分的关联越少意味着你在测 试,集成,维护的时候可以轻松不止一点点。 高内聚
也就是说一个类特别是一个方法应该专注于一件事。
作用范围与控制范围
• 一个判断的作用范围是所有这样的模块的集 合,这些模块内含有依赖于这个判断结果的 处理。或称影响范围。
7.2.1 模块化的基本思想
结构化设计方法是基于模块化、自顶向下逐步细化、结构化 程序设计等技术发展起来。使用模块化一定程度上能够简化系统结 构,使系统容易修改和理解。具体做法:
– 把整个软件划分为部分,其中每一部分的功能简单明确,即 程序模块(可以是子过程或函数) – 划分模块工作按层次进行,上层模块调用下层模块 – 每一个模块应尽可能独立 – 模块间的调用接口要阐明(模块名称、输入数据、输出数据)
模块组合判断树
是
是
数据流 次序重
该模块只 执行一个 功能吗?
否
模块内 各组成 部分关 系如何?
要吗?
次序重 控制流 要吗?
否 是 否
两者皆非
逻辑相 是 似吗? 否
功能组合 顺序组合 通信组合
过程组合 暂时组合
逻辑组合 偶然组合
耦合和内聚的关系
二者就像连体兄弟,存在紧密相关的关系:
–模块内的高内聚往往意味着模块间的松耦合
功能组合--功能内聚
顺序组合--顺序内聚
一个模块内部的各个组成 部分的处理动作全都为执 行同一个功能而存在
一个模块内部的各个组成部分执行的 几个处理动作具有这样的特征前一个 处理动作所产生的输出数据是下一个 处理动作的输入数据
功能组合内聚性最高。例 “解一个方程”,“求平方 根”,“计算利息”
顺序组合模块的内聚性较高。例: “输入并验
耦合形式 数据耦合 控制耦合 公共耦合 内容耦合
-几种耦合的比较
可读性 可维护性 扩散错误的能力 公用性
好
一般
弱
好
一般
不好
一般
不好
最坏
坏
强
最坏
最坏
最坏
最强
最坏
系统设计模块之间的联结原则
•尽量采用较低的耦合形式(简单耦合和数据耦合) •减少控制耦合 •必要时使用公共耦合,但一定要将数据控制在最少 •绝对不能采用内容耦合
初始化模块。
错误处理模块,将错误号作为控制参数传入;
出错处理模块根据不同的错误号执行相应的
操作
偶然组合--偶然内聚
一个模块内部的各个组成部分的处理动作 彼此没有任何关系。它们是根据设计人员 的个人喜好而随意混合在一起的
无内聚性
顺序内聚
比如显示期末成绩通知:
读
读
入
取
学
成
号
绩
取
判
取
科
显
断
不
目
示
留
及
补
数
结构化方法的主要思想: (1)软件是有组织、有结构的逻辑实体,其结构为自顶向下的 形式 (2)软件由程序和数据组成,其结构呈现三层组织形式,即系 统、子系统、功能模块/数据体 (3)软件结构中的各部分既独立又关联 从分析到设计
现实领 域的各 种需求
转换
计算机领 域的具体 实现
7.2 系统设计的任务和标准
耦合:模块和模块之间的联系程度 内聚:模块内部各元素之间的联系程度 设计目标:低耦合、高内聚 模块内的联系越紧越好 模块间的联系越少越好
(二)系统模块设计原则
1、模块之间的耦合原则 -模块之间的联系 -模块的耦合方式 -几种耦合的比较
2、模块的内聚性原则 3、模块的分解原则 4、模块的扇入和扇出原则