第5章 总体设计
第5章 总体设计
第 5 章 总 体 设 计
通信内聚:如果模块中所有元素都使用同一个输入数
据和(或)产生同一个输出数据,则称为通信内聚。
25
软 件 工 程
高内聚也有两类: 顺序内聚:如果一个模块内的处理元素和同一个功 能密切相关,而且这些处理必须顺序执行(通常一个 处理元素的输出数据作为下一个处理元素的输入数 据),则称为顺序内聚。
设 计
8
软 件 工 程
5. 设计软件结构
通常程序中的一个模块完成一个适当的子功能。应该把 模块组织成良好的层次系统,顶层模块调用它的下层模块以 实现程序的完整功能,每个下层模块再调用更下层的模块, 从而完成程序的一个子功能,最下层的模块完成最具体的功 能。软件结构(即由模块组成的层次系统)可以用层次图或结 构图来描绘,第5.4节将介绍这些图形工具。
逻辑内聚:如果一个模块完成的任务在逻辑上属于 相同或相似的一类,则称为逻辑内聚。
第 5 章 总 体 设 计
时间内聚:如果一个模块包含的任务必须在同一段 时间内执行,就叫时间内聚。
24
软 件 工 中内聚主要有两类: 程
过程内聚:如果一个模块内的处理元素是相关的,而 且必须以特定次序执行,则称为过程内聚。 (使用程序流程图作为工具设计软件时,常常通过研究 流程图确定模块的划分,这样得到的往往是过程内聚 的模块)
第 5 章 总 体 设 计
如果数据流图已经细化到适当的层次,则可以直接从数 据流图映射出软件结构,这就是第5.5节中将要讲述的面向 数据流的设计方法。
9
软 件 工 程
6. 设计数据库
对于需要使用数据库的那些应用系统,软件 工程师应该在需求分析阶段所确定的系统数据需 求的基础上,进一步设计数据库。 在数据库课中已经详细讲述了设计数据库的 方法,本书不再赘述。
第五章总体设计
外部表示 信息
输入流 变换流
内部表示
事务
输出流 时间
T
事务中心 活动通路
事务中心 T 完成下述任务: 接受输入数据(事务) 分析每个事务以确定它的类型 根据事务类型选取一条活动通路
5 面向数据流的设计方法(续) 精化数据流图
? 流类型
区分事务中心和 数据接收通路
区分输入和输出 分支
映射成事务结构
映射成变换结构
控产制生
mpg
mph显
产生
示
mpg显
示
计
算
里
英里
程
驱动仪 表板
铃声
输 入 控 制
Ca
MpCg t
Ce
显示
产生 里程 显示
显示
D
C
A B
Cm Ca
C
B
D
接受传感 器信号
A
驱动仪表板
转换成rpm 收集SPS 读旋转信号
计算gph
读燃料流 确定 加/减速
数字仪表 板控制
加速/减 速显示
显示 mpg
显示 mph
Flag=1?
S1
S2
内聚:一个模块内各个元素彼此结合的紧密程度。
低内聚
偶然内聚:一个模块完成一组任务,任务之间的关系很松散。公共语句。 逻辑内聚:若干个逻辑功能类似的任务组成一个模块。 时间内聚:若干个任务必须在同一段时间内执行。如初始化工作。
模块A 模块B 模块C
模块A
模块A 模块B 模块C
S1;
• 模块化:把程序划分成若干个模块,每个模块完成一个子功能,
把这些模块集总起来组成一个整体,可以完成指定的功能,满足问题的 功能。
模块 是数据说明、可执行语句等程序对象的说明。
第5章 总体设计
8
设计原理(续1)
◆设计示例: “用 AND, OR, and NOT 门构
建的计算机。 ”
chip1
chip2
◆第一种设计:设计师 设计三个功能芯片
chip3
2013-7-16
上海大学计算机学院
9
设计原理(续2)
◆第二种设计:每芯片一种门
2013-7-16
上海大学计算机学院
10
设计原理(续3)
2013-7-16
上海大学计算机学院
16
耦合(续1)
1. 内容耦合
● 一个模块直接引用另一个模块的内容 ● 示例
模块a修改模块b的语句 模块 a的分支转移到模块 b的局部标号
● 缺点
模块b的任何变化都要求变化a
2013-7-16
上海大学计算机学院
17
耦合(续2)
2. 共用耦合
● 两模块存取相同的数据 ● 示例
第5章 总体设计
◆设计任务
◆设计过程
◆设计原理
◆启发规则
◆图形工具 ◆面向数据流的设计
2013-7-16
上海大学计算机学院
1
总体设计的任务
◆“概括地说,系统应该如何实现?”
◆总体设计阶段的任务
●系统划分: 程序、文件、数据库、人工过程和文档等 ●设计软件的结构
每个程序是由哪些模块组成,以及这些模块相互间的关系。
2013-7-16
上海大学计算机学院
26
内聚(续4)
4. 过程性内聚
●一个模块内的处理元素是相关的,而且必须以特定次 序执行. ●示例
Function { read part number from database update repair record on master file }
第5章_总体设计 数据库原理
Contents
5.1 设计过程 5.2 设计原理 5.3 启发规则 5.4 描绘软件结构的图形工具 5.5 面向数据流的设计方法
闽南科技学院计算机系
软件设计宣言:Mitch Kapor • “什么是设计?设计是你站在两个世界——技 术世界和人类的目标世界——而你尝试将这两 个世界结合在一起……”。 罗马建筑批评家Vitruvius提出的观念: • “设计良好的建筑应该展示出坚固、适用和令 人赏心悦目”。
• 耦合衡量不同模块彼此间互相依赖(连接)的紧密
程度。耦合要低,即每个模块和其他模块之间的 关系要简单;
• 内聚衡量一个模块内部各个元素彼此结合的紧密
程度。内聚要高,每个模块完成一个相对独立的 特定子功能。
闽南科技学院计算机系
1. 耦合
• 耦合:是对一个软件结构内不同模块之间互连程 • • •
度的度量。 要求:在软件设计中应该追求尽可能松散耦合的 系统。 可以研究、测试或维护任何一个模块,而不需要 对系统的其他模块有很多了解; 模块间联系简单,发生在一处的错误传播到整个 系统的可能性就很小; 模块间的耦合程度强烈影响系统的可理解性、可 测试性、可靠性和可维护性。
A Flag B Flag
f1
f2
„
fn
闽南科技学院计算机系
• • • • • • • • • • • • • • • • • • • • • • • •
#include <stdio.h> static bool Signal; void AdultOrNot(int age) { if (age > 18) { Signal = 1; } else { Signal = 0; } } void WineOrNot() { if (Signal == 1) { printf("%s\n", "您已到达法定饮酒年龄!"); } else { printf("%s\n","您未到达法定饮酒年龄!"); } }
第5章 总体设计
第5章总体设计软件总体设计又称概要设计,它的主要任务就是软件结构的设计,为了提高设计的质量,必须根据软件设计的原理改进软件设计。
本章内容主要内容包括:软件总体设计的基本任务,软件设计的基本原理,软件结构以及软件结构设计优化准则,面向数据流的设计方法,IDEFO图的设计方法,以及表示软件结构的另一种图形工具——HIPO 图。
5.1 基础知识5.1.1 软件总体设计的基本任务软件总体设计阶段是概要地回答系统应该如何实现。
因此要把握与详细设计的区别。
要完成如下任务。
1.软件系统结构设计按照结构化理论,实现一个系统目标需要程序和数据。
所以必须设计出组成这个系统的所用程序结构和数据库(文件)。
具体方法如下:(1)采用某种设计方法,将一个复杂的系统按功能划分成模块。
(2)确定每个模块的功能。
(3)确定模块之间的调用关系。
(4)确定模块之间的接口,即模块之间传递的信息。
(5)评价模块结构的质量。
2.数据结构及数据库设计在结构化理论软件系统中,尤其是对于大型数据处理的软件系统,除了系统结构设计外,数据结构与数据库设计是很重要的。
1)数据结构的设计根据需求分析阶段对系统数据的组成,操作约束和数据之间的描述,确定数据结构特性。
总体设计阶段利用逐步细化的方法对数据结构进行深入的设计。
2)数据库的设计一般的软件系统都有数据的存储,存储要借助数据库技术。
数据库的设计指数据存储文件的设计,设计包括概念设计,逻辑设计和物理设计。
3.网络系统设计如果采用的是网络环境,则要进行网络系统的设计。
4.软件总体设计文档总体设计说明书是总体设计阶段结束时提交的技术文档。
按国际GB8576-88《计算机软件产品开发文件编制指南》的规定,软件设计文档可分为“总体设计说明书”,“详细设计说明书”和“数据库数据说明书”。
5. 评审在该阶段,对涉及部分是否完整地实现需求中的功能,性能等要求,设计方案的可行性,关键的处理及内外部接口定义正确性,有效性以及各部分之间的一致性等,都一一进行评审。
《软件工程》课件 第5章总体设计
模块划分的工具,因此,这样得到的模块往往具有过程内聚的
特性
2014年春 • 软件工程
过程内聚模块
读入 成绩单
审查 成绩单
统计 成绩
打印 成绩
读入并 审查成绩单
统计并 打印成绩单
2014年春 • 软件工程
(5) 通信内聚:
一个模块中的各个部分使用同一个输入数据或产生同一个输出数 据,则称该模块的内聚为通信内聚。 由于通信内聚模块中的各个部分都与某个共同的数据密切相关,
2014年春 • 软件工程
时间内聚模块中的各个部分在时间上的联系,其内聚
程度比逻辑内聚高一些。
往往会和其他相关模块有着紧密的联系,因而会造成
耦合性的增加。
2014年春 • 软件工程
(4) 过程内聚:
一个模块中的各个部分相关,并且必须按特定的
次序执行,则称该模块的内聚为过程内聚。
• 在结构化程序中,通常采用程序流程图作为设计软件和确定
内容耦合是所有耦合关系中程度最高的,会使因 模块间的联系过于紧密而对后期的开发和维护工作带 来很大的麻烦。
许多高级程序设计语言在设计时就充分考虑到了内容耦合的危 害,因而在规定语法时就已经杜绝了任何形式的内容耦合。
2014年春 • 软件工程
内容耦合
A
B
A
一模块直接访问 另一模块的内部 信息 (程序代码 或数据)
2014年春 • 软件工程
1. 耦合
设计目标:低耦合
2014年春 • 软件工程
(1) 数据耦合: 两个模块之间仅通过模块参数交换信息,且交
换的信息全部为简单数据。
数据耦合的耦合性最低。通常软件中都包含有 数据耦合。
2014年春 • 软件工程
软件工程导论第5章 总体的设计
⑵内聚:衡量一个模块内部各个元素彼此结合的紧密 程度。
5.2 续
耦合
软件结构中各个模块之间相互关联程度的度量。 常见的耦合: • ⑴非直接耦合 • ⑵数据耦合 • ⑶控制耦合 • ⑷特征耦合 • ⑸公共环境耦合 • ⑹内容耦合 设计原则:尽量使用数据耦合,少用控制耦合, 限制公共耦合的范围,避免使用内容耦合。
划分模块时尽量做到高内聚,低耦合,保持模块相对 独立性,并以此原则优化初始的软件结构。
⑴如果若干模块之间耦合强度过高,每个模块内功能 不复杂,可将它们合并,以减少信息的传递和公共区 的引用。
⑵若有多个相关模块,应对它们的功能进行分析,消 去重复功能。
设计准则
5.3 续
⑵模块规模应该适中
过大的模块往往是由于分解不充分。 过小的模块开销大于有效操作。
设计方法:定义一些不同的“映射”,把数据流 图变换成软件结构。
结构化设计方法——面向数据流的设计方法。
变换流
5.5 续
信息沿输入通路进入系统,同时由外部形式变换 成内部形式,进入系统的信息通过变换中心,经 加工处理以后再沿输出通路变换成外部形式离开 软件系统。当数据流图具有这些特征时,这种信 息流就叫作变换流。
B
C
D
(a) 基 本 形 式
(b) 顺 序
B
C
(c) 选 择
B
(d) 重 复
结构图
5.4 续
判定为真时调用A,为假时调用B
结构图
5.4 续
模块M循环调用模块A、B、C
概念
5.5 面向数据流的设计方法
定义:把信息流映射成软件结构,信息流的类型 决定了映射的方法。
目标:给出设计软件结构的一个系统化的途径。
总体设计
第 5 章 总体设计
a. 偶然内聚 如果一个模块完成一组任务, 如果一个模块完成一组任务,这些任务彼此之 间即使有关系,关系也是松散的, 间即使有关系,关系也是松散的,这种内聚称为偶 然内聚。 然内聚。 b. 逻辑内聚 如果一个模块完成的任务在逻辑上属于相同或 相似的一类,则称为逻辑内聚。 相似的一类,则称为逻辑内聚。 c. 时间内聚 如果一个模块包含的任务必须在同一段时间内 执行,就叫时间内聚。 执行,就叫时间内聚。
第 5 章 总体设计 5.2.2 抽象
在现实世界中一定事物、 在现实世界中一定事物、状态或过程之 间总存在着某些相似的方面, 间总存在着某些相似的方面,把这些相似 的方面集中和概括起来, 的方面集中和概括起来,暂时忽略它们之 间的差异,就是抽象。 间的差异,就是抽象。
第 5 章 总体设计
例 考虑适用于低级CAD的图形软件包 抽象Ⅰ 该CAD软件系统配有能与绘图员进行可 视化通信的图形界面,能用鼠标代替绘图工具,画 各种直线和曲线;能完成所有几何计算以及所有截 面视图和辅助视图的设计。图形设计的结果存在图 形文件中,图形文件可包含几何的、正文的和其他 各种补充设计信息。 抽象Ⅱ 软件任务: 用户界面任务; 创建二维图形任务; 显示图形任务; 管理图形文件任务。
第 5 章 总体设计
总体设计的目的: 总体设计的目的: 回答“概括地说,系统应该如何实现? 回答“概括地说,系统应该如何实现?”。 总体设计的任务: 总体设计的任务: 1. 划分出组成系统的物理元素—— 程序、文件、 划分出组成系统的物理元素—— 程序、文件、 数据库、人工过程和文档。 数据库、人工过程和文档。 2. 设计软件结构,也就是要确定系统中每个程 设计软件结构, 序是由哪些模块组成的, 序是由哪些模块组成的,以及这些模块相互之间 的关系。 的关系。
第5章 总体设计
…抽象…
抽象层次II:任务需求的描述。列出“What” 而不是“How”。
CAD SOFTWARE TASKS:
user interaction task; 2-D drawing creation task; graphics display task; drawing file management task;
5- 11
联机
批处理
5- 12
联机
批处理
5- 13
2
…步骤…
选取合理的方案
至少选取低成本、中等成本和高成本三
种方案 每种方案准备四份资料
系统流程图
组成系统的物理元素清单
成本/效益分析 实现这个系统的进度计划
5- 14
3
…步骤…
推荐最佳方案
综合分析对比各种合理方案的利弊,推
5- 35
局部化
局部化:把一些关系密切的软件元素
物理地放得彼此靠近
局部化有助于实现信息隐藏
信息隐蔽和局部化的优点
减少错误的传播
5- 36
模块独立(module independence)
模块独立的概念是模块化、抽象、信息隐藏 和局部化概念的直接结果 每个模块完成一个相对独立的子功能,并且 与其它模块间的接口简单 模块独立性的重要性
5- 20
模块化…
模块
由边界元素限定的相邻程序元素的序列,
而且有一个总体标志符代表它 数据说明;可执行的语句 Pascal或Ada中
模块化
Begin…end对
C,C++ 和Java中 把程序化分成独立命名且可独立访问的模 块,每个模块完成一个子功能,把这些模 {…}对 块集成起来构成一个整体,可以完成制定 的功能满足用户的需求
软件工程第五章总体设计
软件工程第五章总体设计在软件工程中,总体设计是一个至关重要的环节。
它就像是为一座大厦绘制蓝图,为后续的详细设计和编码工作奠定坚实的基础。
总体设计的主要任务是根据需求分析阶段确定的系统功能和性能要求,设计出软件系统的总体结构。
这包括确定系统由哪些模块组成,以及这些模块之间的关系。
通过合理的总体设计,可以有效地提高软件的可维护性、可扩展性和可靠性。
首先,我们来谈谈模块的划分。
模块是软件系统中具有相对独立功能的单元。
在划分模块时,需要遵循高内聚、低耦合的原则。
高内聚意味着一个模块内部的各个部分紧密相关,共同完成一个明确的功能;低耦合则表示模块之间的相互依赖程度要低,以便于独立开发、测试和维护。
例如,一个在线购物系统可以划分为用户管理模块、商品管理模块、订单管理模块等。
每个模块都有其特定的职责,相互之间通过清晰定义的接口进行通信。
模块的结构也有多种形式,如层次结构、网状结构和混合结构等。
层次结构是一种常见的结构,它将系统按照功能的层次进行划分,上层模块调用下层模块,形成一个树形的结构。
这种结构清晰明了,易于理解和维护。
网状结构则模块之间的关系更加复杂,适用于一些对性能要求较高的系统。
而混合结构则是结合了层次结构和网状结构的特点,根据系统的实际需求进行灵活的设计。
接下来,说说数据结构的设计。
数据结构的选择直接影响到系统的性能和效率。
在总体设计阶段,需要确定系统中主要的数据结构,如数据库表结构、文件结构等。
对于数据库设计,要考虑数据的完整性、一致性和安全性。
合理地设计索引和存储过程,可以提高数据的查询和更新速度。
文件结构的设计则要根据数据的特点和访问方式来确定,例如是顺序访问还是随机访问。
在总体设计中,还需要考虑软件的架构风格。
常见的架构风格有客户机/服务器架构(C/S)、浏览器/服务器架构(B/S)和分布式架构等。
C/S 架构适用于对性能要求较高、数据处理较为复杂的系统;B/S 架构则具有易于部署和维护的优点,适用于广泛的互联网应用;分布式架构则可以提高系统的处理能力和可靠性,适用于大规模的应用场景。
软件工程-第五章-总体设计
需求分析阶段所形成的数据流图是软件总体设计的基 础。我们要从可供选择的方案中选取合理的方案,为 每一个方案准备一份系统流程图,列出系统组成的物 理元素,进行效益分析,制定实现方案的进度。我们 要从合理的方案中选择一个最佳的方案向用户推荐。 当用户接受方案后,就要为这个最佳的方案设计软件 结构,一般情况下,这个软件结构要通过反复修改使 之合理。 同时还要进行必要的数据库设计。在分布式系统中还 要进行网络设计。 另外,还要制定测试计划和确定测试要求。 在详细设计前一定要进行软件总体设计。
软件工程
Software Engineering
第五章 总体设计
第五章 总体设计
软件设计的重要性 设计过程 软件总体设计 设计基本原理 体系结构设计 结构化设计 IDEF0图设计方法 软件结构优化
总体设计
总体设计的基本目标就是概要地回答系统应该 如何实现。所以设计在任何工程产品或系统中, 是开发阶段的第一步。设计(design)可以定 义为应用各种技术和原理,对一个设备、一个 过程或一个系统,作出足够详细的决策,使之 有可能在物理上得以实现的过程。
功能内聚
如果一个模块内所有处理元素完成一个,且仅 完成一个功能,则称为功能内聚(Functional Cohesion)。 功能内聚是最高的内聚。 在软件结构中,并不是每个模块都能归结为完 成一个功能而设计成一个功能内聚模块。
顺序内聚
如果一个模块内处理元素和同一个功能密切相 关,而且这些处理元素必须顺序执行,则称为 顺序内聚(Sequential Cohesion)。 通常一个处理元素的输出是另一个处理元素的 输入。
软件开发与应用-第5章 总体设计
A: ………… ………… A1=V1+V2 ………… …………
B: ………… ………… V1=B1 ………… …………
A: ………… ………… V1++ ………… …………
B: ………… ………… V2=B1+V1 ………… …………
问题: 公共部分的改动将影响所有调用它的模块; 公共部分的数据存取无法控制; 复杂程度随耦合模块的个数增加而增加。
例如:
from disk from tape
A:
Read inputs
from ……
模块化原理 时间内聚(Temporal cohesion):The functions are related only by the timing involved.
例如:系统的初始化 问题:不同功能混在一个模块中,有时共用部分 编码,使局部功能的修改牵动全局。
A: ……………… ……………… entry 1: ……………… ……………… entry 2: ……………… ………………
模块化原理
公共耦合 (Common coupling):Data are accessible
from a common data store.
Global : V1 V2 Global : V1 V2
Great deal of dependence
Independent
Highly coupled
Loosely coupled
Uncoupled
Goal: as loose as possible = as independent as possible
模块化原理
独立性由弱到强排列为:
第05章 总体设计
下面看人类解决问题的一般规律: 下面看人类解决问题的一般规律:
设函数C( )为定义问题x的复杂程度 的复杂程度, 设函数 (x)为定义问题 的复杂程度, 函数 E(x)为解决问题 的工作量 。 对于两个问题 1 为解决问题x的工作量 为解决问题 的工作量。 对于两个问题P 和P2,如果 C(P1) >C(P2) 显然 E (P1) >E (P2) 量也大) 量也大) (即复杂程度大,工作 即复杂程度大,
2011-4-2
(8)书写文档 ) 编写总体设计文档(包括系统构成方案、 ※ 编写总体设计文档(包括系统构成方案、 物理元素清单、成本/效益分析 效益分析、 物理元素清单、成本 效益分析、最佳方案的概 括描述、数据流图、软件结构、 括描述、 数据流图 、软件结构、各个模块的算 模块间的接口关系) 法,模块间的接口关系)。 ※ 用户手册 测试计划(测试策略,测试方案, ※ 测试计划(测试策略,测试方案,预期的 测试结果,测试进度计划) 测试结果,测试进度计划) ※ 详细的实现计划 (9)审查和复审 审查和复审 应该进行严格的技术审查和管理复审。
2011-4-2
结构设计是总体设计阶段的任务; 结构设计是总体设计阶段的任务; 的任务 过程设计是详细设计阶段的任务。 过程设计是详细设计阶段的任务。 的任务 为确定软件结构, 为确定软件结构 , 首先把复杂的功能进一 步分解成一系列简单的功能。 步分解成一系列简单的功能 。 功能分解导致数 据流图的进一步细化, 并用IPO图或其他工具 据流图的进一步细化 , 并用 图或其他工具 来描述细化后每个处理的算法。 来描述细化后每个处理的算法。
2011-4-2
局部化的概念和信息隐蔽概念是密切相关的。 局部化的概念和信息隐蔽概念是密切相关的。 所谓局部化 局部化是指把一些关系密切的软件元素物理 所谓局部化是指把一些关系密切的软件元素物理 地放得彼此靠近。 地放得彼此靠近。在模块中使用局部数据元素是 局部化的一个例子。显然, 局部化的一个例子。显然,局部化有助于实现信 息隐蔽。 息隐蔽。 信息隐蔽和局部化的概念是由Parnas提出的。 提出的。 信息隐蔽和局部化的概念是由 提出的 Parnas提出在总体设计时就要注意软件的可维护性和 提出在总体设计时就要注意软件的可维护性和 可靠性的设计措施。这就是信息隐蔽的原则。 可靠性的设计措施。这就是信息隐蔽的原则。 信息隐蔽的原则 为了适应软件在生命周期中的多次修改, 为了适应软件在生命周期中的多次修改, 在模块划分的总体设计阶段就要尽量设法将 可变性因素隐蔽在一个或几个局部的模块中。 可变性因素隐蔽在一个或几个局部的模块中。 2011-4-2
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
典型的总体设计过程包括下述9个步骤:
1. 设想供选择的方案
以数据流图为基础,寻找实现目标系统的各种不同的方 案。
由需求分析的数据流图作为出发点,把数据流图中的处理分 组的各种可能的方法,抛弃在技术上行不通的分组方法, 提供可供选择的物理系统。如P46图2.8、2.9所示。
模块化的后果:随着模块数目增加,设计模块间接 口所需要的工作量也将增加。
根据这两个因素,得出了图中的总成本曲线。每 个程序都有一个最适当的模块数目M,使得系统 的开发成本最小。
图5.1 模块化和软件成本
模块化优点
• 使软件结构清晰,容易设计也容易阅读和理解。 • 提高软件的可靠性。 程序错误局限在有限的模块中,使软件容易测试和 调试。 • 提高了软件的可修改性。 即使有变动,往往只涉及少数几个模块。 • 有助于软件开发工程的组织管理。 一个大型程序由许多程序员分工编写,分配技术熟 练的程序员编写困难的模块。
2. 选取合理的方案
至少选取低成本、中等成本和高成本的三种方案。 对每个合理的方案分析员都应该准备下列资料: (1) 系统流程图; (2) 组成系统的物理元素清单; (3) 成本/效益分析; (4) 实现这个系统的进度计划。
3. 推荐最佳方案
推荐一个最佳的方案,并且为推荐的方案制定详细的实现计 划。 提请使用部门负责人进一步审批之后,将进入总体设计过程 的下一个重要阶段——结构设计。
模块独立程度的度量标准:内聚和耦合。 耦合:模块间互相依赖(连接)的紧密程度; 内聚:模块内部各个元素彼此结合的紧密程度。 模块独立要求:高内聚、低耦合 1. 耦合 耦合是对一个软件结构内不同模块之间互连程度的 度量。 耦合强弱取决于模块间接口的复杂程度,进入或访 问一个模块的点,以及通过接口的数据。
9. 审查和复审
5.2 设计原理
好的设计准则 • 模块化 • 抽象 • 逐步求精 • 信息隐藏和局部化 • 模块独立
5.2.1 模块化
模块:
是由边界元素限定的相邻程序元素(例如,数据说明,可执 行的语句)的序列,而且有一个总体标识符代表它。
模块化:
把程序划分成独立命名且可独立访问的模块,每个模块完成 一个子功能,把这些模块集成起来构成一个整体,可以完 成指定的功能,满足用户的需求。
• 如果一个模块完成一组任务,这些任务之间即使有关 系,关系也是很松散的,则称为偶然内聚。
函数A 函数B 函数C 函数E
函数D
功能内聚 顺序内聚 通信内聚 过程内聚 时间内聚 偶然内聚 内聚性 弱 逻辑内聚 强
逻辑内聚( logically cohesive )
求精实际上是细化过程。求精要求设计者细化原始 陈述,随着每个后续求精(即细化)步骤的完成而提 供越来越多的细节。 抽象与求精是一对互补的概念。 • 抽象使得设计者能够说明过程和数据,同时却忽略 低层细节。 • 求精则帮助设计者在设计过程中逐步揭示出低层细 节。 • 这两个概念都有助于设计者在设计演化过程中创造 出完整的设计模型。
• 体系结构设计
设计软件的结构,确定系统中每个程序是由哪些模块组 成的,以及这些模块相互间的关系。
• 总体设计必要性(详细设计之前):站在 全局高度上,花较少成本,从较抽象的层 次上分析对比多种可能的系统实现方案和 软件结构,从中选出最佳方案和最合理的 软件结构,降低成本、提高质量。
5.1 设计过程
内容耦合 耦合性 高
公共耦合 控制耦合
标记耦合 数据耦合 低
模块独立性 低 高
标记耦合( Stamp coupled )
若两个模块间传递的参数中至少有一个是数据结构,如 字符串或记录,并且在模块中仅用到该数据结构中的 部分元素,则称这两个模块之间存在标记耦合。 • • 在这种情况下,被调用的模块可以使用的数据多于它确 实需要的数据,将导致对数据的访问失去控制,从而 给计算机犯罪提供了机会。
第五章 总体设计
本章 内容
5.1 5.2 5.3 5.4 5.5 5.6 习题 设计过程 设计原理 启发规则 描绘软件结构的图形工具 面向数据流的设计方法 小结 要求 :
掌握概要设计过程、设计原理、模块化方法 及模块独立性原则、软件结构的确定。 重点: 模块独立性原则。 难点: 软件结构的确定。
A
B
A
B
…. Entry2 ….
多重入口
进入另一模块内
部分代码重迭
模块独立性与耦合的关系
内容耦合 耦合性 高 低 模块独立性 低 高 公共耦合 控制耦合 标记耦合 数据耦合
总之,耦合是影响软件复杂程度的一个重要因素。 应该采取下述设计原则: 尽量使用数据耦合,少用控制耦合和标记耦合,限 制公共环境耦合的范围,完全不用内容耦合。
5.2.2 抽象
抽象:把事务相似的方面集中和概括起来,暂时忽 略它们之间的差异。 • • 抽象就是抽出事物的本质特性而暂时不考虑 它们的细节。
软件工程过程的每一步都是对软件解法的抽象 层次的一次精化。 • 在可行性研究阶段,软件作为系统的一个完整 部件; • 在需求分析期间,软件解法是使用在问题环境 内熟悉的方式描述的; • 当由总体设计向详细设计过渡时,抽象的程度 也就随之减少了; • 最后,当源程序写出来以后,也就达到了抽象 的最低层。
模块化的根据:把复杂的问题分解成许多容易解决 的小问题,原来的问题也就容易解决了。
设函数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)
局部化:是指把一些关系密切的软件元素物理地放 得彼此靠近。 局部化有助于实现信息隐藏。
5.2.5 模块独立
模块独立的概念是模块化、抽象、信息隐藏和局部 化概念的直接结果。 模块独立:具有独立功能而且和其他模块之间没有 过多的相互作用的模块。
模块独立的重要性: 第一,具有独立模块的软件比较容易开发。 第二,独立模块比较容易测试和维护。
内容耦合 耦合性 高
公共耦合 控制耦合
标记耦合 数据耦合 低
模块独立性 低 高
公共耦合( Common coupled )
• 若干模块访问一个公共的数 据环境,则它们之间的耦合称 为公共耦合。公共环境可为全 局数据结构、共享的通信区、 内存的公共覆盖区等。显然, 公共数据区的变化,将影响所 有公共耦合模块,严重影响模 块的可靠性和可适应性,降低 软件的可读性。
2. 内聚 内聚标志一个模块内各个元素彼此结合的紧 密程度。理想内聚的模块只做一件事情。 设计时力求做到高内聚。
功能内聚 顺序内聚 通信内聚 过程内聚 时间内聚 偶然内聚 内聚性 弱 耦合性 强 逻辑内聚 强
弱
功能内聚 顺序内聚 通信内聚 过程内聚 时间内聚 偶然内聚 内聚性 弱 逻辑内聚 强
偶然内聚( coincidental cohesion )
6. 设计数据库
对于需要使用数据库的应用系统,软件工程师应该 在需求分析阶段所确定的系统数据需求的基础上, 进一步设计数据库。
7. 制定测试计划 开发早期考虑测试问题,可提高软件的可测 试性。
8. 书写文档
(1) 系统说明。主要内容包括: 系统流程图描绘的系统构成方案,组成系统的物理元素 清单,成本/效益分析; 精化的数据流图,用层次图或结构图描绘的软件结构, 用IPO图描述的各个模块的算法,模块间的接口关系 等。 (2) 用户手册 (3) 测试计划 (4) 详细的实现计划 (5) 数据库设计结果
• 系统方案设计
总体设计的基本 目的就是回答“概 括地说,系统应该 如何实现?”
① 设想实现目标系统的各种可能方案。 ② 根据系统规模和目标综合考虑经济、技术、操作等 各种因素,从设想的供选择的方案中选取若干个合 理的方案。 ③ 综合分析、对比所选取的各种合理方案的利弊,从 中选出一个最佳方案,并制定最佳方案的详细实现 计划。
5. 设计软件结构
程序中一个模块完成一个适当的子功能,应该把模块组 织成良好的层次系统。 软件结构(即由模块组成的层次系统)可以用层次图或结 构图来描绘,第5.4节将介绍这些图形工具。 如果数据流图已经细化到适当的层次,可以直接从数据 流图映射出软件结构,这就是第5.5节中将要讲述的面 向数据流的设计方法。
Байду номын сангаас
结构化设计
传统的软件工程方法学采用结构化设计技术 完成软件设计(总体设计和详细设计)工 作。结构化设计技术的基本要点如下: • 软件系统由层次化结构的模块构成 • 模块是单人口和单出口的 • 构造和联结模块的基本准则是模块独立 • 用图来描述软件系统的结构,并且使软件 结构与问题结构尽量一致
总体设计任务
内容耦合 耦合性 高
公共耦合 控制耦合
标记耦合 数据耦合 低
模块独立性 低 高
控制耦合(Control coupled)
控制耦合:一个模块向另一个模块传 递控制信息,接收信息的模块的动 作根据信息值进行调整。 • • 控制耦合是中等程度的耦合, 它增加了系统的复杂程度。在把模 块适当分解之后通常可以用数据耦 合代替它。
内容耦合 耦合性 高
公共耦合 控制耦合
标记耦合 数据耦合 低
模块独立性 低 高
内容耦合( Content coupled )
内容耦合的四种情况: • 一个模块直接访问另一模块的内部数据。 • 一个模块不通过正常入口转到另一模块的内部。 • 两个模块有部分代码重迭。
• 一个模块有多个入口。
Entry1
逐步求精和模块化的概念,与抽象是紧密相关 的。在软件结构每一层中的模块,表示了对软件 抽象层次的一次精化。 • 软件结构顶层的模块,控制了系统的主要功能 并且影响全局; • 在软件结构底层的模块,完成对数据的一个具 体处理。 用自顶向下由抽象到具体的方式分配控制,简 化了软件的设计和实现,提高了软件的可理解性 和可测试性,并且使软件更容易维护。