第4章 总体设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
模块化程度与软件成本的关系
软件设计的原则
从图中我们可以看出,在进行模块化 设计时,既要尽量的细分模块,又要考虑 设计接口所带来的成本,设计中尽量使模 块化程度接近于图中的最小成本区域。
软件设计的原则
2、抽象与逐步求精 抽象是人们认识复杂事物的一种强 有力的思维工具。 抽象,即抽出事物固有的本质的共 同属性,而忽略其他不重要、存在差异 的细节。
软件设计的原则
模块耦合性:
低 耦合性 高
非直接耦合 数据耦合 标记耦合 控制耦合 外部耦合 公共耦合 内容耦合 强 模块独立性 弱
软件设计的原则
1、非直接耦合 两个模块之间没
有直接关系,它们之
间的联系完全是通过 主模块的控制和调用
来实现的。独立性最
强。
软件设计的原则
2、数据耦合 一个模块访问另一个模块时,彼此之间是通过简单数据
4.1 软件设计概述
简单地说,软件设计就是根据需求分析所确 立的“做什么(What to do?)”来确定系统应该 “怎么做”(How to do?)的过程。
软件设计概述
目标系统 逻辑模型 其他需求
性能需求 功能需求 设计 系统结构设计 数据设计 编码 过程设计 程序
开发阶段的信息流
测试
组装好的有效系统
软件设计的原则
通过对软件系统的不断细分可以将系 统开发的工作量不断减小,工作量的大小 将随着模块化程度的加大而不断减小。 但能不能说把系统划分的越细,开发 的工作量就越小? 不能,因为还有一些因素不容我们忽 视,那就是接口的开发成本。
软件设计的原则
最小成本区域 成本 软件总成本 接口成本
成本/模块 模块数量
计算累积
过程内聚
内聚性分类
关闭文件
紧急意外故 障处理
报警
保留现场 · · ·
要求在系统运行的 同一时间内处理的元素 组成一个模块。图中关 闭文件、报警、保留现 场等任务必须无间断地 同时处理。
时间内聚
内聚性分类
逻辑内聚:几种相关的功 能组合在一起,每次被调 用时,由传送给模块的控 制型参数来确定该模块应 执行哪一种功能。逻辑内 聚模块表明了各部分之间 在功能上的相关关系。
参数来交换输入、输出信息的。
p0 (x0, y0) p1 (x1, y1) 数据耦合 LINE ( x0, y0,x1,y1)
软件设计的原则
3、标记耦合(特征耦合)
一个模块通过参数表传递记录信息。这个记录信息是数据
结构的子结构(如结构体、公用体),而实际所用到的数据只 是其中的一部分。
p0 (x0, y0) p1 (x1, y1) 标记耦合 LINE ( p0, p1)
Biblioteka Baidu
软件设计的原则
模块独立性的度量: 一般采用两个准则度量模块独立性。即模块 间的耦合性和模块的内聚性。 耦合性是模块之间互相连接的紧密程度的度 量。模块之间的连接越紧密,联系越多,耦合性 就越高,而其独立性就越弱。
软件设计的原则
内聚性是一个模块内部各个元素彼此结合的紧
密程度的度量。 一个模块内部各个元素之间的联系越紧密, 则它的内聚性就越高,相对地,它与其它模块之 间的耦合性就会减低,而模块独立性就越强。 模块独立性比较强的模块应是高内聚低耦 合的模块。
3、模块间的信息传递:用带注释的短箭头表示 模块间传递的信息。 4、两个附加符号:弧形线表示循环调用,菱形 表示选择调用。
面向数据流的设计方法
查询成绩 A
学 号 查 询 标 志 记 录 地 址
M
学生记录
模块间的控制关 系及信息传递
B
C
T1
T2
T3
模块间选择调用
模块间循环调用
面向数据流的设计方法
系统结构图中有4种类型的模块:
软件设计的原则
耦合度:
模块间联系的紧密程度称之为耦合度。 如果一个模块在不需要另一个模块的情况下,能够完整 地执行其功能,就称这两个模块完全独立。通常模块之间总 是相互关联的,因为完全独立的模块是无法构成系统的。关 键是连接的程度和复杂度。
软件设计的原则
紧耦合 模块间连接很强。 松耦合 模块间的连接弱叫。 我们的目标是努力实现“松耦合”系统。
软件设计的原则
6、公共耦合 一组模块都访问同一个公共数据环境。公共数据环境可
以是全局数据结构、共享的通信区、内存的公共覆盖区等。
软件设计的原则
7、内容耦合(出现的情况较少)
发生下列情形,两模块之间就发生了内容耦合:
1)一个模块直接访问另一个模块的内部数据。 2)一个模块不通过正常入口转到另一模块内部。
P
模块T
Q
R
S
MOV READ MOV
A TO B Card file C TO D
巧合性内聚
设计优化准则
软件结构的设计优化准则:
1、划分模块时,尽量做到高内聚、低耦合,保持模块相对独立性。 模块划分的准则:“将相关的各部分放在一起,无关的东西不要放 在一起。” 2、模块的大小要适中。 3、软件结构的深度、宽度、扇入、扇出应适当。 深度表示控制的层数。 宽度表示控制的总分布。 扇出是对由某一模块直接控制的模块数目的度量。 扇入指出有多少个模块直接控制一个给定的模块。
软件设计的原则
在软件开发的过程中,每前进一步实际上 就是对软件解法抽象层次的进一步细化,即为 我们所说的逐步求精。 抽象与逐步求精之间事实上是一种互补关 系,逐步求精即为抽象的细化过程,由抽象的 最高层次,经历软件工程中需求分析、总体设 计和详细设计的过渡过程,不断的一步步细化, 最后结束于代码的编写,也即达到抽象的最低 层。
软件设计的原则
4、模块的独立性
是指软件系统中每个模块只涉及软件要求的具体的子 功能,而和软件系统中其它的模块的接口尽可能简单。 模块的独立性是衡量软件质量的关键。对软件的功能 加以分割以后,如果模块的独立性好,相互间的接口不复 杂,在各自设计和修改代码时所引起的二次影响不大,错 误传播少,所以开发的软件质量就好。
3、模块间公用的信息尽量少。
软件设计的原则
模块内聚性:
内聚是描述一个模块内各个元素之间关系的一个概 念,是对各元素彼此结合的紧密程度的一种度量。
高 内聚性 低
功能内聚 顺序内聚 通信内聚 过程内聚 时间内聚 逻辑内聚 巧合内聚 强 模块独立性 弱
内聚性分类
功能内聚:
模块中的各个程序段联合起来共同完成一个特定 的具体的单一的功能,模块中各个部分都是完成该功 能必不可少的部分,模块的各个部分协同工作、紧密 联系、不可分割。
概要设计的任务
概要设计(总体设计)的基本任务:
将系统划分成模块结构形式,决定每个模块要完成的 功能,每个模块之间的调用关系,决定模块接口。
概要设计阶段的主要产品:
模块结构图
模块说明书 每个模块的描述
系统的模块组成及 模块间的调用关系 主要包含功能和 接口描述
还有数据结构、数据库和评审报告等。
4.3 软件设计的原则
3)两个模块有一部分程序代码重叠。(汇编语言)
软件设计的原则
耦合度是一个抽象的概念,但它能用一个可操作的概念 来描述,即程序员在编码、调试和修改一个模块时,需要考 虑修改另外一个模块的概率。 如果两个模块是紧耦合的,那么它修改一个模块时,需 要修改另外一个模块的概率就高。
软件设计的原则
耦合度是评价程序质量的重要指标,耦合度越小,则每 个模块越容易独立地被理解、编写和修改,同时每个模块的 错误越不容易扩散蔓延到其他模块。 为了降低耦合度,可采取如下方法: 1、用过程语句(函数方式等)调用其它模块,降低接口 复杂性; 2、模块间传送的参数是数据,尽量使用数据耦合,少用 控制耦合,限制公共耦合的范围,坚决避免使用内容耦合;
结构化设计的目标:将软件设计为多个结构合理、功能 单一的模块,建立系统的模块结构图。它的主要表示方法 是一种分层次的结构图。
面向数据流的设计方法
SD设计方法的主要思想:
认为一个程序、一组程序或一个系统,是由一组 功能模块来构成的。
软件设计者首先必须无视程序、模块或过程的内 部情况,而只对它们之间的关系进行分析。将系统看 作是逻辑功能的抽象集合——功能模块的集合。
设计优化准则
设计优化准则
软件结构的设计优化准则:
4、降低接口复杂性。 5、力求设计单入口和单出口的模块。 6、设计功能可预测的模块(即相同的输入应有相同的输出)。
4.4 面向数据流的设计方法
面向数据流的设计方法
面向数据流的设计方法,又称结构化设计即SD(Structured Design) 。
软件设计的原则
3、信息屏蔽与局部化 信息隐蔽的思想主要是强调模块的 独立特性及其信息的隐蔽,即对于一个 整体的程序划分为若干模块,而每个模 块隐藏、封装一定功能的程序成分,并 尽可能少地显露其内部实现细节。
软件设计的原则
局部化则是指把一些关系密切的软 件元素彼此间靠近,使关系密切的元素 位于同一局部范围之内。
从文件File中读出数据
模块A
1、由数据产生报表一
2、由数据产生报表二
通信内聚
如图:1和2所对应 的功能均需要利用文件 File进行操作。
内聚性分类
过程内聚:模块内部 各个组成部分的处理 动作不相同。但他们 受同一控制流支配, 并由这个控制流决定 它们的执行顺序。
循环体
事务记录
累积销售额
累积订货量
4.2 软件设计的目标
软件设计的目标是为系统制定总的蓝图,权 衡各种技术和实施方法中的利弊,合理利用各种 资源,精心规划出系统的一个总的设计方案。
软件设计的任务
软件设计的任务:
采用合适的设计方法进行系统结构、数据和过程的 设计,把分析阶段产生的软件需求说明书转换为用适当 手段表示的软件设计文档。 软件设计按生存周期可划分为两个阶段: 1)概要设计:给出软件系统的整体模块结构。 2)详细设计:给出软件模块中各个模块的输入、输出及 详细的过程描述。
1、传入模块:从下属模块取得数据,经过某些处理,再将其 送给上级模块。它传送的数据叫做逻辑输入数据流。图示 2、传出模块:从上级模块取得数据,进行某些处理后,传送 给下属模块。它传送的数据流叫做逻辑输出数据流。图示 3、变换模块:从上级模块取得数据,进行特定处理后,送回 原上级模块。它加工的数据流叫做变换数据流。图示 4、协调模块:对其下属模块进行控制和管理的模块。在一个 好的系统结构图中,协调模块应在较高层出现。图示
软件设计的原则
4、控制耦合 一个模块通过传送开关、
标志、名字等控制信息,明显
地控制选择另一模块的功能。
软件设计的原则
5、外部耦合 一组模块都访问同一全局简单变量而不是同一全局数据
结构,而且不是通过参数表传递该全局变量的信息,则称之
为外部耦合。例如C语言程序中各个模块都访问被说明为 extern类型的外部变量。
内聚性分类
求一元二 次方程的 根的模块
1、输入系数 2、求解 3、输出方程的解
如果一个模块内处理 元素和同一功能密切相关, 而且这些处理元素必须顺 序执行,则称为顺序内聚。
顺序内聚
内聚性分类
模块中的成分需要用 同样的输入数据或产生的 相同的输出数据时称为通 信内聚。模块内各功能段 有公用的信息区。
1、模块化
模块化,就是指把一个待开发的软件系 统分解成若干小的部分,即将一个大的问题 分成若干小的问题逐一解决。
软件设计的原则
为何要采用模块化这种设计方法呢?
软件设计的原则
在软件开发过程中,大型软件系统的设计往往是 非常复杂的,而采用模块化的设计方法,能将一个大 的复杂的问题,分解成若干小的简单的问题逐一解决。 对一个大的系统分解成若干小的功能模块,有利 于我们对各具体问题的解决,使得程序的结构更加清 晰,便于阅读、理解。另外,模块化也使得软件的测 试和维护人员更易于进行软件测试及维护。
面向数据流的设计方法
描述工具:
结构化设计方法提出了一种图形工具——结构图。
结构图是精确表达程序结构的图形表示方法。它作 为软件文档的一部分,清楚地反映出程序中模块之间的 层次调用关系和联系。
面向数据流的设计方法
结构图的主要符号:
1、模块:方框表示,并用名字标识该模块。
2、模块的调用关系:用单向箭头或直线连接模 块间的控制关系。
逻辑内聚
内聚性分类
此例中每条语句之间各不 相干,只因为P、Q、R、S都 要用到它们,为了节省一些存 储空间,将它们放在一个模块 中。 问题:这种模块不易取名, 模块含义不易理解,难以测试, 不易修改。当P、Q有不同要 求(如P要求MOVE A TO E) 时 T的修改会很复杂。因为它 们本来互不相关,所以变动的 可能性很大。 当存储空间不是很紧张时, 应尽量避免巧合性内聚。
面向数据流的设计方法
结构化设计的优点:
( 1 )减少设计复杂性。将对大目标的实现转化为一些 小目标来实现。结构化设计是一种减少设计复杂性的技 术。 (2)结构独立。结构化设计将功能性程序划分成多个 相对独立的程序模块。 (3)单一的功能模块,易于进行软件修改,易于开发 和维护。 (4)加强了代码的可重用性。