4-概要设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
分析DFD:用一组分层的DFD来表示系统划分的功 能、数据流和对数据流所做的处理。
确定DFD的特点及边界:区分事务流、变换流。
映射为软件结构:有两个设计映射策略:变换分析和 事务分析可供采用。
细化后,得到初始结构图:顶层模块负责控制处理服 务,实际工作较少;每个下层模块较少执行控制功能 而较多作具体处理工作;底层模块应有高度聚合,较 少有外部控制的特性。 获得最终的软件结构图:使用设计的质量度量:耦合 性和内聚性。
4.3 结构化设计方法
结构化设计方法(简称SD方法)
基于数据流的设计方法 把数据流图变换成软件结构 因为任何软件系统都可以用数据流图表示,所以面向 数据流的设计方法理论上可以设计任何软件的结构。
4.3.1 概念
信息流有变换流和事物流两种类型。
变换流(transform flow) 特点:从同一数据源进入系统的数据,它在数据流 图中流动的逻辑路径是相同的。
A A A A
Common公共数据区 a) 松散的公共耦合
Common公共数据区 b) 紧密的公共耦合
4.2.2 模块的耦合性
7.
内容耦合(content coupling) 一个模块直接访问另一个模块的内部数据; 一个模块不通过正常入口转到另一模块内部; 两个模块有一部分程序代码重叠; 一个模块有多个入口; …
软件工程概论 Software Engineering
章晓芳 xfzhang@suda.edu.cn
第4章 概要设计
4.1 概要设计的概念 4.2 模块独立性 4.3 结构化设计方法 4.4 数据设计
4.1.1 概要设计的目标和任务
软件设计是把软件需求变为软件的具体方案 软件设计包括两个阶段:概要设计和详细设计
4.1.3 概要设计的工具
HIPO图(hierarchy plus input-process-output):由层次 图(HC图)加上IPO图(Input-Process-Output)组成。 层次图中的矩形框表示模块,而针对层次图中的每 一个模块再配上IPO图来表达输入、处理、输出。 层次图中的矩形框代表模块,方框间的连线表示调 用关系。最顶层的方框代表主控模块,它调用下层 模块完成软件系统的功能。
软件系统
输入
输出
编辑
统计一
统计二 除
查询
月处理
年处理
添加
删除
插入
修改
合并
列表
4.1.3 概要设计的工具
结构图
方框代表一个模块,框内标明模块的名字或主要功能; 方框之间的箭头(或直线)表示模块的调用关系。 用带注释的箭头表示模块调用过程中来回传递的信息。 尾部是空心圆表示传递的是数据,实心圆表示传递的 是控制信息。 附加的符号:模块的选择调用或循环调用。
概要设计也称为总体设计,在这个阶段需要确定软 件的总体结构。
概要设计说明书主要由模块结构图、模块说明和测 试计划组成。 概要设计可分为数据设计、系统结构设计和过程设 计。(界面设计是发展趋势之一)
4.1.1 概要设计的目标和任务
概要设计的任务: 1. 制定规范 2. 总体结构设计:软件总体结构图 3. 处理方式设计:功能需求和非功能需求,算法评估 4. 数据设计:数据结构设计、文件设计和数据库设计 5. 质量设计 6. 文档设计:生成概要设计说明书、数据库设计说明 书、用户手册和软件测试计划 7. 评审概要设计
A flag flag
f1
f2
fn
4.2.2 模块的耦合性
5.
6.
外部耦合(external coupling):若干模块均与同 一个外部环境关联。一组模块都访问同一全局简单 变量而不是同一全局数据结构,而且不是通过参数 表传递该全局变量的信息。 公共耦合(common coupling):若干模块通过全 局的数据环境相互作用时(一组模块都访问同一个 公共数据环境)。 松散公共耦合、紧密公共耦合
4.2.3 模块的内聚性
内聚标志一个模块内部各成分彼此结合的紧密程度。 软件概要设计的目标是力求增加模块的内聚,尽量减少 模块间的耦合。增加内聚比减少耦合更重要。
高 内聚性
功能性内聚 顺序性内聚 通信性内聚 过程性内聚 时间性内聚 逻辑性内聚 偶然性内聚
低
模块独立性 强,功能单一 弱,功能分散
4.3.1 概念
SC图(结构图) 6种模块:传入模块、传出模块、变换模块、源模 块、漏模块、控制模块。
4.3.1 概念
SC图中的模块调用 简单调用
B属于变换模块,C属于漏模块
选择调用:用菱形符号表示 循环调用:用叠加在调用线始端的环形箭头表示
结构化设计方法的五个基本步骤:
4.2.2 模块的耦合性
3.
4.
特征耦合(stamp coupling)/标记耦合:两个模块 都要使用同一数据结构的一部分,不是采用全程公 共数据区共享,而是通过模块接口传递数据结构的 一部分(不是简单的数据)。 控制耦合(control coupling):两模块间通过参数 交换信息,而传递的信息中含有控制信息。
4.2.2 模块的耦合性
模块独立性 模块独立性的度量标准 耦合(coupling):模块之间相对独立性的量度 内聚(cohesion):模块功能相对强度的量度
耦合性是对软件程序结构中各个模块之间相互关联 程度的一种度量。 在设计软件时应追求尽可能松散耦合的系统。
低 耦合性 非直接耦合 数据耦合 特征耦合 控制耦合 外部耦合 公共耦合 内容耦合 高
相同的输出数据。(eg. 对同一文件进行管理)
4.2.3 模块的内聚性
6.
高级内聚 顺序性内聚(sequential cohesion):一个模块内的各 个组成部分顺序执行几个处理动作,前一个处理动作 产生的输出数据是下一个处理工作的输入数据。
7.
功能性内聚(functional cohesion):模块内所有成分 形成一个整体,完成单个功能。象一个“黑盒子”。
变换流
变换流的DFD是一个线性结构,由输入、变换和输 出三部分组成。
变换是系统的变换中心,变换输入端的数据流为系 统的逻辑输入,输出端为逻辑输出。而系统输入端 的数据流为物理输入,输出端为物理输出。
取得数据 C
变换数据 C为D
给出数据 D
变换型数据流图
物理输入
逻辑输入
逻辑输入
物理输出
4.3.1 概念
如果它是利用所计算的年龄来确定雇员将要退休 的时间,那么它就具有顺序内聚性。 如果它是分别计算年龄和退休时间的,但使用相 同生日数据,那么它就具有通讯内聚性。 分别建立两个子程序,一个根据生日计算年龄, 另外一个根据生日确定退休时间,确定退休时间 子程序将调用计算年龄的程序。
怎样使这个子程序成为功能内聚性呢?
A B A wk.baidu.com Entry1 „„ entry2 „„
a) 进入另一模块内部
b) 模块代码重叠
c) 多入口模块
A
全局数据区
L
M
B
C 指定的公共区 N D E F O P
模块E和L为外部耦合; 模块C、F和N为公共耦合; 模块B和D为内容耦合。 C、F、N都访问全局数据区中的同一个数据项 ,读写问题!
4.2.3 模块的内聚性
是 功能性内聚 是 该模块执行 一个功能吗? 数据流 不是 顺序性内聚 次序重要吗? 不是 通讯性内聚 是 模块内各组成 部分关系如何? 两者 皆非 控制流 过程性内聚 次序重要吗? 不是 是 逻辑相似吗? 不是 偶然性内聚 时间性内聚 逻辑性内聚
例子
功能内聚性:计算雇员年龄并给出生日的子程序。 假设有一个按给出的生日计算雇员年龄、退休时间 的子程序。
事务流(transaction flow) 特点:“以事务为中心的”,也就是说,数据沿输入 通路到达一个处理T,这个处理(事务中心)根据输入 数据的类型在若干个动作序列中选出一个来执行。
事务
事务中心
T 动作路径
4.3.1 概念
SC图(结构图)
用矩形框来表示模块, 用带箭头的连线表示模块间的调用关系, 在调用线的两旁,应标出传入和传出模块 的数据流。
4.1.2 概要设计的过程
概要设计的步骤: 1. 设想供选择的方案 2. 推荐最佳方案 3. 功能分解 4. 设计软件结构:面向数据流的设计方法和面向数 据结构的设计方法 5. 数据设计 6. 制订测试计划 7. 书写文档:概要设计规格说明书、用户手册、测 试计划、详细的实现计划等 8. 审查和复审
4.2.1 模块化
模块化论据:
函数C(X)定义了问题X的复杂性; 函数E(X)定义了求解问题X所需要的工作量(按时 间计)
对于问题P1和P2,如果C(P1) > C(P2),则 E(P1)>E(P2) C(P1+P2)>C(P1)+C(P2) E(P1+P2)>E(P1)+E(P2)
18
4.2.2 模块的耦合性
低 耦合性 非直接耦合 数据耦合 特征耦合 控制耦合 外部耦合 公共耦合 内容耦合 高
模块独立性 强 弱
设计软件时应尽量使用数据耦合,减少控制耦合, 限制环境耦合和公共耦合,杜绝内容耦合。 为了降低耦合度,可以采用消耦(decoupling)技术 根据问题的特点,选择适当的耦合类型 降低模块接口的复杂性 把模块的通信信息放在缓冲区中
结论:一个复杂问题分割成若干个容易解决、容易 管理的小问题后更易于求解。
4.2.1 模块化
对每个问题都存在着某个最佳模块数目,它能使得 软件成本最小。 需避免模块分割得过度或不足。
软件总成本 接口成本
成本(工作量)
最小成本区
成本/模块
模块总数
4.2.1 模块化
模块化的优点: 可以使软件结构清晰,容易设计、容易阅读和理 解、容易测试和调试。 提高软件的可靠性。 有助于软件开发工程的组织管理。 依据什么标准划分模块?耦合、内聚的概念。
变换分析
变换分析方法由以下四步组成:
重画数据流图; 区分有效(逻辑)输入、有效(逻辑)输出和中心 变换部分;
进行一级分解,设计上层模块;
进行二级分解,设计中、下层模块。
重画数据流图:描述系统中的数据是如何流动的,确定其 具有变换流特征。 区分有效(逻辑)输入、有效(逻辑)输出和中心变换部 分
模块独立性 强 弱
4.2.2 模块的耦合性
耦合分为七级: 1. 间接耦合(nondirect coupling):两模块中任一 个都不依赖对方而能独立工作,也就是说两个模 块之间没有直接关系,它们之间的联系完全是通 过主模块的控制和调用来实现的。 2. 数据耦合(data coupling):两模块间通过参数 交换信息,而传递的信息仅限于数据,或者说一 个模块访问另一个模块时,彼此之间是通过数据 参数(而不是控制参数、公共数据结构或外部变 量)来交换输入、输出信息的。
4.1.3 概要设计的工具
产生最佳结果 好输入 好输入 得到好输入 原始输入 原始输入 读输入 编辑输入 结果格式化 编辑结果 解 输出结果 解 格式化 的解 显示结果 格式化 的解 解
计算最佳解
M
M
A
B
A
B
C
a)选择调用
b)循环调用
4.2.1 模块化
模块化的思想:把软件划分为可独立命名和编址的 部件。每个模块完成一个子功能,当把所有模块组 装到一起成为一个整体时,便可以完成指定的功能。 模块是具有一定功能的可以用名词调用的程序语句 的集合。 模块化就是把程序划分成若干个模块,分别实现。
4.2.3 模块的内聚性
1.
内聚分为七级三类: 低级内聚
偶然性内聚(coincidental cohesion):一个模块内各成分为 完成一组功能而组合在一起,它们相互之间即使有关系,也 很松散或者模块内各部分之间就没有联系。 逻辑性内聚(logical cohesion):一个模块完成的诸任务逻 辑上相关。(eg.单入口多功能模块) 时间性内聚(temporal cohesion)/经典内聚:一个模块包含 的诸任务必须在同一时间段内执行,顺序无关。 (eg.初始 化模块)
2.
3.
4.2.3 模块的内聚性
4.
中级内聚 过程性内聚(procedural cohesion):模块内各个组 成部分的处理动作各不相同、彼此相关,并且受同一 控制流支配,必须按特定的次序执行。
5.
通信性内聚(communicational cohesion):一个模 块内各功能部分都使用了相同的输入数据,或产生了
确定DFD的特点及边界:区分事务流、变换流。
映射为软件结构:有两个设计映射策略:变换分析和 事务分析可供采用。
细化后,得到初始结构图:顶层模块负责控制处理服 务,实际工作较少;每个下层模块较少执行控制功能 而较多作具体处理工作;底层模块应有高度聚合,较 少有外部控制的特性。 获得最终的软件结构图:使用设计的质量度量:耦合 性和内聚性。
4.3 结构化设计方法
结构化设计方法(简称SD方法)
基于数据流的设计方法 把数据流图变换成软件结构 因为任何软件系统都可以用数据流图表示,所以面向 数据流的设计方法理论上可以设计任何软件的结构。
4.3.1 概念
信息流有变换流和事物流两种类型。
变换流(transform flow) 特点:从同一数据源进入系统的数据,它在数据流 图中流动的逻辑路径是相同的。
A A A A
Common公共数据区 a) 松散的公共耦合
Common公共数据区 b) 紧密的公共耦合
4.2.2 模块的耦合性
7.
内容耦合(content coupling) 一个模块直接访问另一个模块的内部数据; 一个模块不通过正常入口转到另一模块内部; 两个模块有一部分程序代码重叠; 一个模块有多个入口; …
软件工程概论 Software Engineering
章晓芳 xfzhang@suda.edu.cn
第4章 概要设计
4.1 概要设计的概念 4.2 模块独立性 4.3 结构化设计方法 4.4 数据设计
4.1.1 概要设计的目标和任务
软件设计是把软件需求变为软件的具体方案 软件设计包括两个阶段:概要设计和详细设计
4.1.3 概要设计的工具
HIPO图(hierarchy plus input-process-output):由层次 图(HC图)加上IPO图(Input-Process-Output)组成。 层次图中的矩形框表示模块,而针对层次图中的每 一个模块再配上IPO图来表达输入、处理、输出。 层次图中的矩形框代表模块,方框间的连线表示调 用关系。最顶层的方框代表主控模块,它调用下层 模块完成软件系统的功能。
软件系统
输入
输出
编辑
统计一
统计二 除
查询
月处理
年处理
添加
删除
插入
修改
合并
列表
4.1.3 概要设计的工具
结构图
方框代表一个模块,框内标明模块的名字或主要功能; 方框之间的箭头(或直线)表示模块的调用关系。 用带注释的箭头表示模块调用过程中来回传递的信息。 尾部是空心圆表示传递的是数据,实心圆表示传递的 是控制信息。 附加的符号:模块的选择调用或循环调用。
概要设计也称为总体设计,在这个阶段需要确定软 件的总体结构。
概要设计说明书主要由模块结构图、模块说明和测 试计划组成。 概要设计可分为数据设计、系统结构设计和过程设 计。(界面设计是发展趋势之一)
4.1.1 概要设计的目标和任务
概要设计的任务: 1. 制定规范 2. 总体结构设计:软件总体结构图 3. 处理方式设计:功能需求和非功能需求,算法评估 4. 数据设计:数据结构设计、文件设计和数据库设计 5. 质量设计 6. 文档设计:生成概要设计说明书、数据库设计说明 书、用户手册和软件测试计划 7. 评审概要设计
A flag flag
f1
f2
fn
4.2.2 模块的耦合性
5.
6.
外部耦合(external coupling):若干模块均与同 一个外部环境关联。一组模块都访问同一全局简单 变量而不是同一全局数据结构,而且不是通过参数 表传递该全局变量的信息。 公共耦合(common coupling):若干模块通过全 局的数据环境相互作用时(一组模块都访问同一个 公共数据环境)。 松散公共耦合、紧密公共耦合
4.2.3 模块的内聚性
内聚标志一个模块内部各成分彼此结合的紧密程度。 软件概要设计的目标是力求增加模块的内聚,尽量减少 模块间的耦合。增加内聚比减少耦合更重要。
高 内聚性
功能性内聚 顺序性内聚 通信性内聚 过程性内聚 时间性内聚 逻辑性内聚 偶然性内聚
低
模块独立性 强,功能单一 弱,功能分散
4.3.1 概念
SC图(结构图) 6种模块:传入模块、传出模块、变换模块、源模 块、漏模块、控制模块。
4.3.1 概念
SC图中的模块调用 简单调用
B属于变换模块,C属于漏模块
选择调用:用菱形符号表示 循环调用:用叠加在调用线始端的环形箭头表示
结构化设计方法的五个基本步骤:
4.2.2 模块的耦合性
3.
4.
特征耦合(stamp coupling)/标记耦合:两个模块 都要使用同一数据结构的一部分,不是采用全程公 共数据区共享,而是通过模块接口传递数据结构的 一部分(不是简单的数据)。 控制耦合(control coupling):两模块间通过参数 交换信息,而传递的信息中含有控制信息。
4.2.2 模块的耦合性
模块独立性 模块独立性的度量标准 耦合(coupling):模块之间相对独立性的量度 内聚(cohesion):模块功能相对强度的量度
耦合性是对软件程序结构中各个模块之间相互关联 程度的一种度量。 在设计软件时应追求尽可能松散耦合的系统。
低 耦合性 非直接耦合 数据耦合 特征耦合 控制耦合 外部耦合 公共耦合 内容耦合 高
相同的输出数据。(eg. 对同一文件进行管理)
4.2.3 模块的内聚性
6.
高级内聚 顺序性内聚(sequential cohesion):一个模块内的各 个组成部分顺序执行几个处理动作,前一个处理动作 产生的输出数据是下一个处理工作的输入数据。
7.
功能性内聚(functional cohesion):模块内所有成分 形成一个整体,完成单个功能。象一个“黑盒子”。
变换流
变换流的DFD是一个线性结构,由输入、变换和输 出三部分组成。
变换是系统的变换中心,变换输入端的数据流为系 统的逻辑输入,输出端为逻辑输出。而系统输入端 的数据流为物理输入,输出端为物理输出。
取得数据 C
变换数据 C为D
给出数据 D
变换型数据流图
物理输入
逻辑输入
逻辑输入
物理输出
4.3.1 概念
如果它是利用所计算的年龄来确定雇员将要退休 的时间,那么它就具有顺序内聚性。 如果它是分别计算年龄和退休时间的,但使用相 同生日数据,那么它就具有通讯内聚性。 分别建立两个子程序,一个根据生日计算年龄, 另外一个根据生日确定退休时间,确定退休时间 子程序将调用计算年龄的程序。
怎样使这个子程序成为功能内聚性呢?
A B A wk.baidu.com Entry1 „„ entry2 „„
a) 进入另一模块内部
b) 模块代码重叠
c) 多入口模块
A
全局数据区
L
M
B
C 指定的公共区 N D E F O P
模块E和L为外部耦合; 模块C、F和N为公共耦合; 模块B和D为内容耦合。 C、F、N都访问全局数据区中的同一个数据项 ,读写问题!
4.2.3 模块的内聚性
是 功能性内聚 是 该模块执行 一个功能吗? 数据流 不是 顺序性内聚 次序重要吗? 不是 通讯性内聚 是 模块内各组成 部分关系如何? 两者 皆非 控制流 过程性内聚 次序重要吗? 不是 是 逻辑相似吗? 不是 偶然性内聚 时间性内聚 逻辑性内聚
例子
功能内聚性:计算雇员年龄并给出生日的子程序。 假设有一个按给出的生日计算雇员年龄、退休时间 的子程序。
事务流(transaction flow) 特点:“以事务为中心的”,也就是说,数据沿输入 通路到达一个处理T,这个处理(事务中心)根据输入 数据的类型在若干个动作序列中选出一个来执行。
事务
事务中心
T 动作路径
4.3.1 概念
SC图(结构图)
用矩形框来表示模块, 用带箭头的连线表示模块间的调用关系, 在调用线的两旁,应标出传入和传出模块 的数据流。
4.1.2 概要设计的过程
概要设计的步骤: 1. 设想供选择的方案 2. 推荐最佳方案 3. 功能分解 4. 设计软件结构:面向数据流的设计方法和面向数 据结构的设计方法 5. 数据设计 6. 制订测试计划 7. 书写文档:概要设计规格说明书、用户手册、测 试计划、详细的实现计划等 8. 审查和复审
4.2.1 模块化
模块化论据:
函数C(X)定义了问题X的复杂性; 函数E(X)定义了求解问题X所需要的工作量(按时 间计)
对于问题P1和P2,如果C(P1) > C(P2),则 E(P1)>E(P2) C(P1+P2)>C(P1)+C(P2) E(P1+P2)>E(P1)+E(P2)
18
4.2.2 模块的耦合性
低 耦合性 非直接耦合 数据耦合 特征耦合 控制耦合 外部耦合 公共耦合 内容耦合 高
模块独立性 强 弱
设计软件时应尽量使用数据耦合,减少控制耦合, 限制环境耦合和公共耦合,杜绝内容耦合。 为了降低耦合度,可以采用消耦(decoupling)技术 根据问题的特点,选择适当的耦合类型 降低模块接口的复杂性 把模块的通信信息放在缓冲区中
结论:一个复杂问题分割成若干个容易解决、容易 管理的小问题后更易于求解。
4.2.1 模块化
对每个问题都存在着某个最佳模块数目,它能使得 软件成本最小。 需避免模块分割得过度或不足。
软件总成本 接口成本
成本(工作量)
最小成本区
成本/模块
模块总数
4.2.1 模块化
模块化的优点: 可以使软件结构清晰,容易设计、容易阅读和理 解、容易测试和调试。 提高软件的可靠性。 有助于软件开发工程的组织管理。 依据什么标准划分模块?耦合、内聚的概念。
变换分析
变换分析方法由以下四步组成:
重画数据流图; 区分有效(逻辑)输入、有效(逻辑)输出和中心 变换部分;
进行一级分解,设计上层模块;
进行二级分解,设计中、下层模块。
重画数据流图:描述系统中的数据是如何流动的,确定其 具有变换流特征。 区分有效(逻辑)输入、有效(逻辑)输出和中心变换部 分
模块独立性 强 弱
4.2.2 模块的耦合性
耦合分为七级: 1. 间接耦合(nondirect coupling):两模块中任一 个都不依赖对方而能独立工作,也就是说两个模 块之间没有直接关系,它们之间的联系完全是通 过主模块的控制和调用来实现的。 2. 数据耦合(data coupling):两模块间通过参数 交换信息,而传递的信息仅限于数据,或者说一 个模块访问另一个模块时,彼此之间是通过数据 参数(而不是控制参数、公共数据结构或外部变 量)来交换输入、输出信息的。
4.1.3 概要设计的工具
产生最佳结果 好输入 好输入 得到好输入 原始输入 原始输入 读输入 编辑输入 结果格式化 编辑结果 解 输出结果 解 格式化 的解 显示结果 格式化 的解 解
计算最佳解
M
M
A
B
A
B
C
a)选择调用
b)循环调用
4.2.1 模块化
模块化的思想:把软件划分为可独立命名和编址的 部件。每个模块完成一个子功能,当把所有模块组 装到一起成为一个整体时,便可以完成指定的功能。 模块是具有一定功能的可以用名词调用的程序语句 的集合。 模块化就是把程序划分成若干个模块,分别实现。
4.2.3 模块的内聚性
1.
内聚分为七级三类: 低级内聚
偶然性内聚(coincidental cohesion):一个模块内各成分为 完成一组功能而组合在一起,它们相互之间即使有关系,也 很松散或者模块内各部分之间就没有联系。 逻辑性内聚(logical cohesion):一个模块完成的诸任务逻 辑上相关。(eg.单入口多功能模块) 时间性内聚(temporal cohesion)/经典内聚:一个模块包含 的诸任务必须在同一时间段内执行,顺序无关。 (eg.初始 化模块)
2.
3.
4.2.3 模块的内聚性
4.
中级内聚 过程性内聚(procedural cohesion):模块内各个组 成部分的处理动作各不相同、彼此相关,并且受同一 控制流支配,必须按特定的次序执行。
5.
通信性内聚(communicational cohesion):一个模 块内各功能部分都使用了相同的输入数据,或产生了