第5章 总体设计

合集下载

第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章 总体设计

第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章 总体设计

第5章 总体设计

第5章总体设计软件总体设计又称概要设计,它的主要任务就是软件结构的设计,为了提高设计的质量,必须根据软件设计的原理改进软件设计。

本章内容主要内容包括:软件总体设计的基本任务,软件设计的基本原理,软件结构以及软件结构设计优化准则,面向数据流的设计方法,IDEFO图的设计方法,以及表示软件结构的另一种图形工具——HIPO 图。

5.1 基础知识5.1.1 软件总体设计的基本任务软件总体设计阶段是概要地回答系统应该如何实现。

因此要把握与详细设计的区别。

要完成如下任务。

1.软件系统结构设计按照结构化理论,实现一个系统目标需要程序和数据。

所以必须设计出组成这个系统的所用程序结构和数据库(文件)。

具体方法如下:(1)采用某种设计方法,将一个复杂的系统按功能划分成模块。

(2)确定每个模块的功能。

(3)确定模块之间的调用关系。

(4)确定模块之间的接口,即模块之间传递的信息。

(5)评价模块结构的质量。

2.数据结构及数据库设计在结构化理论软件系统中,尤其是对于大型数据处理的软件系统,除了系统结构设计外,数据结构与数据库设计是很重要的。

1)数据结构的设计根据需求分析阶段对系统数据的组成,操作约束和数据之间的描述,确定数据结构特性。

总体设计阶段利用逐步细化的方法对数据结构进行深入的设计。

2)数据库的设计一般的软件系统都有数据的存储,存储要借助数据库技术。

数据库的设计指数据存储文件的设计,设计包括概念设计,逻辑设计和物理设计。

3.网络系统设计如果采用的是网络环境,则要进行网络系统的设计。

4.软件总体设计文档总体设计说明书是总体设计阶段结束时提交的技术文档。

按国际GB8576-88《计算机软件产品开发文件编制指南》的规定,软件设计文档可分为“总体设计说明书”,“详细设计说明书”和“数据库数据说明书”。

5. 评审在该阶段,对涉及部分是否完整地实现需求中的功能,性能等要求,设计方案的可行性,关键的处理及内外部接口定义正确性,有效性以及各部分之间的一致性等,都一一进行评审。

《软件工程》课件 第5章总体设计

《软件工程》课件 第5章总体设计

模块划分的工具,因此,这样得到的模块往往具有过程内聚的
特性
2014年春 • 软件工程
过程内聚模块
读入 成绩单
审查 成绩单
统计 成绩
打印 成绩
读入并 审查成绩单
统计并 打印成绩单
2014年春 • 软件工程
(5) 通信内聚:
一个模块中的各个部分使用同一个输入数据或产生同一个输出数 据,则称该模块的内聚为通信内聚。 由于通信内聚模块中的各个部分都与某个共同的数据密切相关,
2014年春 • 软件工程
时间内聚模块中的各个部分在时间上的联系,其内聚
程度比逻辑内聚高一些。
往往会和其他相关模块有着紧密的联系,因而会造成
耦合性的增加。
2014年春 • 软件工程
(4) 过程内聚:
一个模块中的各个部分相关,并且必须按特定的
次序执行,则称该模块的内聚为过程内聚。
• 在结构化程序中,通常采用程序流程图作为设计软件和确定
内容耦合是所有耦合关系中程度最高的,会使因 模块间的联系过于紧密而对后期的开发和维护工作带 来很大的麻烦。
许多高级程序设计语言在设计时就充分考虑到了内容耦合的危 害,因而在规定语法时就已经杜绝了任何形式的内容耦合。
2014年春 • 软件工程
内容耦合
A
B
A
一模块直接访问 另一模块的内部 信息 (程序代码 或数据)
2014年春 • 软件工程
1. 耦合
设计目标:低耦合
2014年春 • 软件工程
(1) 数据耦合: 两个模块之间仅通过模块参数交换信息,且交
换的信息全部为简单数据。
数据耦合的耦合性最低。通常软件中都包含有 数据耦合。
2014年春 • 软件工程

软件工程导论第5章 总体的设计

软件工程导论第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. 设计软件结构,也就是要确定系统中每个程 设计软件结构, 序是由哪些模块组成的, 序是由哪些模块组成的,以及这些模块相互之间 的关系。 的关系。

软件工程第五章总体设计

软件工程第五章总体设计

软件工程第五章总体设计在软件工程中,总体设计是一个至关重要的环节。

它就像是为一座大厦绘制蓝图,为后续的详细设计和编码工作奠定坚实的基础。

总体设计的主要任务是根据需求分析阶段确定的系统功能和性能要求,设计出软件系统的总体结构。

这包括确定系统由哪些模块组成,以及这些模块之间的关系。

通过合理的总体设计,可以有效地提高软件的可维护性、可扩展性和可靠性。

首先,我们来谈谈模块的划分。

模块是软件系统中具有相对独立功能的单元。

在划分模块时,需要遵循高内聚、低耦合的原则。

高内聚意味着一个模块内部的各个部分紧密相关,共同完成一个明确的功能;低耦合则表示模块之间的相互依赖程度要低,以便于独立开发、测试和维护。

例如,一个在线购物系统可以划分为用户管理模块、商品管理模块、订单管理模块等。

每个模块都有其特定的职责,相互之间通过清晰定义的接口进行通信。

模块的结构也有多种形式,如层次结构、网状结构和混合结构等。

层次结构是一种常见的结构,它将系统按照功能的层次进行划分,上层模块调用下层模块,形成一个树形的结构。

这种结构清晰明了,易于理解和维护。

网状结构则模块之间的关系更加复杂,适用于一些对性能要求较高的系统。

而混合结构则是结合了层次结构和网状结构的特点,根据系统的实际需求进行灵活的设计。

接下来,说说数据结构的设计。

数据结构的选择直接影响到系统的性能和效率。

在总体设计阶段,需要确定系统中主要的数据结构,如数据库表结构、文件结构等。

对于数据库设计,要考虑数据的完整性、一致性和安全性。

合理地设计索引和存储过程,可以提高数据的查询和更新速度。

文件结构的设计则要根据数据的特点和访问方式来确定,例如是顺序访问还是随机访问。

在总体设计中,还需要考虑软件的架构风格。

常见的架构风格有客户机/服务器架构(C/S)、浏览器/服务器架构(B/S)和分布式架构等。

C/S 架构适用于对性能要求较高、数据处理较为复杂的系统;B/S 架构则具有易于部署和维护的优点,适用于广泛的互联网应用;分布式架构则可以提高系统的处理能力和可靠性,适用于大规模的应用场景。

软件工程-第五章-总体设计

软件工程-第五章-总体设计




需求分析阶段所形成的数据流图是软件总体设计的基 础。我们要从可供选择的方案中选取合理的方案,为 每一个方案准备一份系统流程图,列出系统组成的物 理元素,进行效益分析,制定实现方案的进度。我们 要从合理的方案中选择一个最佳的方案向用户推荐。 当用户接受方案后,就要为这个最佳的方案设计软件 结构,一般情况下,这个软件结构要通过反复修改使 之合理。 同时还要进行必要的数据库设计。在分布式系统中还 要进行网络设计。 另外,还要制定测试计划和确定测试要求。 在详细设计前一定要进行软件总体设计。
软件工程
Software Engineering
第五章 总体设计
第五章 总体设计





软件设计的重要性 设计过程 软件总体设计 设计基本原理 体系结构设计 结构化设计 IDEF0图设计方法 软件结构优化
总体设计

总体设计的基本目标就是概要地回答系统应该 如何实现。所以设计在任何工程产品或系统中, 是开发阶段的第一步。设计(design)可以定 义为应用各种技术和原理,对一个设备、一个 过程或一个系统,作出足够详细的决策,使之 有可能在物理上得以实现的过程。
功能内聚


如果一个模块内所有处理元素完成一个,且仅 完成一个功能,则称为功能内聚(Functional Cohesion)。 功能内聚是最高的内聚。 在软件结构中,并不是每个模块都能归结为完 成一个功能而设计成一个功能内聚模块。
顺序内聚


如果一个模块内处理元素和同一个功能密切相 关,而且这些处理元素必须顺序执行,则称为 顺序内聚(Sequential Cohesion)。 通常一个处理元素的输出是另一个处理元素的 输入。

第5章_总体设计(徐东升)共117页文档

第5章_总体设计(徐东升)共117页文档

软件工程抽象过程:
软件工程过程的每一步都是对软件解法的抽象 层次的一次精化。
在可行性研究阶段,软件作为系统的一个完整 部件;使用问题环境的语言--自然语言以概况 的方式回答问题是否有解
在需求分析期间,软件解法是使用在问题环境 内熟悉的方式描述的;DFD ER 状态转换图
当由总体设计向详细设计过渡时,抽象的程度 也就随之减少了;程序流程图
易设计也容易阅读和理解。 模块化使软件容易测试和调试,因而有助于提
高软件的可靠性。 模块化能够提高软件的可修改性。 模块化也有助于软件开发工程的组织管理。
5.2.2 抽象
抽象:现实世界中一定事物、状态或过程之间 总存在着某些相似的方面(共性)。把这些相似 的方面集中和概括起来,暂时忽略它们之间的
程序文件数据库文档和人工过程等但是每个物理元素仍属于黑盒子级这些黑盒子的具体内容将在详细设计阶段进行设想供选择的方案设想供选择的方案选取合理的方案推荐最佳方案结构设计阶段确定软件结构也就是要确定系统中每个程序由哪些模块组成的这些模块相互之间的关系是什么样的?????功能分解设计软件结构设计数据库???制定测试计划?书写文档?审查和复审典型的总体设计过程包括下述9个步骤
功能分解
设计软件结构 设计数据库
制定测试计划 书写文档
审查和复审
典型的总体设计过程包括下述9个步骤: 1. 设想供选择的方案
根据需求分析阶段得出的数据流图考虑各种可 能的实现方案,力求从中选出最佳方案。
2. 选取合理的方案
从前一步得到的一系列供选择的方案中选取若 干个合理的方案。对每个合理的方案分析员都 应该准备下列4份资料:
由两个主要阶段组成:
系统设计阶段,确定系统的具体实现方案(划分出 组成系统的物理元素:程序、文件、数据库、文档 和人工过程等,但是每个物理元素仍属于黑盒子级, 这些黑盒子的具体内容将在详细设计阶段进行)

第5章-总体设计(概要设计)

第5章-总体设计(概要设计)

3. 推荐最佳方案 分析员应该综合分析对比各种合理方案的利弊,推 荐一个最佳的方案,并且为推荐的方案制定详细的 实现计划。制定详细实现计划的关键技术是本书第 13章中将要介绍的工程网络。 用户和有关的技术专家应该认真审查分析员所推荐 的最佳系统,如果该系统确实符合用户的需要,并 且是在现有条件下完全能够实现的,则应该提请使 用部门负责人进一步审批。在使用部门的负责人也 接受了分析员所推荐的方案之后,将进入总体设计 过程的下一个重要阶段——结构设计。
5.2.3 逐步求精
逐步求精是人类解决复杂问题时采用的基本方法, 也是许多软件工程技术(例如,规格说明技术,设 计和实现技术)的基础。可以把逐步求精定义为: “为了能集中精力解决主要问题而尽量推迟对问题 细节的考虑。” 逐步求精之所以如此重要,是因为人类的认知过程 遵守Miller法则:一个人在任何时候都只能把注意 力集中在(7±2)个知识块上。
事实上,可以把逐步求精看作是一项把一个时期内 必须解决的种种问题按优先级排序的技术。逐步求 精方法确保每个问题都将被解决,而且每个问题都 将在适当的时候被解决,但是,在任何时候一个人 都不需要同时处理7个以上知识块。 逐步求精最初是由Niklaus Wirth提出的一种自顶向 下的设计策略。按照这种设计策略,程序的体系结 构是通过逐步精化处理过程的层次而设计出来的。 通过逐步分解对功能的宏观陈述而开发出层次结构, 直至最终得出用程序设计语言表达的程序。 Wirth本人对逐步求精策略曾做过如下的概括说明:
但是,在开发软件的过程中,软件工程师在一段时 间内需要考虑的知识块数远远多于7。例如,一个 程序通常不止使用7个数据,一个用户也往往有不 止7个方面的需求。逐步求精方法的强大作用就在 于,它能帮助软件工程师把精力集中在与当前开发 阶段最相关的那些方面上,而忽略那些对整体解决 方案来说虽然是必要的,然而目前还不需要考虑的 细节,这些细节将留到以后再考虑。Miller法则是 人类智力的基本局限,我们不可能战胜自己的自然 本性,只能接受这个事实,承认自身的局限性,并 在这个前提下尽我们的最大努力工作。

软件开发与应用-第5章 总体设计

软件开发与应用-第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
模块化原理
独立性由弱到强排列为:

第5章 总体设计

第5章 总体设计
5- 30
…抽象…
抽象层次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中 把程序化分成独立命名且可独立访问的模 块,每个模块完成一个子功能,把这些模 {…}对 块集成起来构成一个整体,可以完成制定 的功能满足用户的需求
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

5.2.4 信息隐藏和局部化
信息隐藏原理指出:应该这样设计和确定模块,使 得一个模块内包含的信息对于不需要这些信息的模块 来说,是不能访问的。 局部化是指把一些关系密切的软件元素物理地放得 彼此靠近。 这些独立的模块彼此间仅仅交换那些为了完成系统 功能而必须交换的信息。
5.2.5 模块独立(I)
内容耦合 :如果一个模块直接访问另一个模块的内部数据;或者一 个模块不通过正常入口转到另一模块内部;或者两个模块有一部分程 序代码重迭;或者一个模块有多个入口,则两个模块之间就发生了内 容耦合。 公共耦合 :若一组模块都访问同一个公共数据环境,则它们之间的 耦合就称为公共耦合。公共的数据环境可以是全局数据结构、共享的 通信区、内存的公共覆盖区等。 见下图
5.2.2 抽象(II)
在软件需求分析阶段,用“问题所处环境的为大家 所熟悉的术语”来描述软件的解决方法。而在从概要 设计到详细设计的过程中,抽象化的层次逐次降低。 当产生源程序时到达最低的抽象层次。 数据抽象 :数据抽象与过程抽象一样,允许设计 人员在不同层次上描述数据对象的细节。 控制抽象 :与过程抽象和数据抽象一样,控制抽 象可以包含一个程序控制机制而无须规定其内部细节。
5.1 设计过程(I)
典型的总体设计过程包括下述9个步骤: 1. 设想供选择的方案 2. 选取合理的方案 3. 推荐最佳方案 4. 功能分解 5. 设计软件结构 6. 设计数据库 7. 制定测试计划 8. 书写文档 9. 审查和复审
5.1.1 设想供选择的方案
选出最佳的方案,大大提高系统的性能/价格 比。 需求分析阶段得出的数据流图是总体设计的 极好的出发点。
5.1.9 审查和复审
5.2 设计原理
1、模块化 2、抽象 3、逐步求精 4、信息隐蔽和局部化 5、模块独立
5.2.1 模块化(I)
模块化就是把程序划分成独立命名且可独立访问的模块, 每个模块完成一个子功能,把这些模块集成起来构成一个整 体,可以完成指定的功能满足用户的需求。 采用模块化原理可以使软件结构清晰,容易设计也容易阅 读和理解、测试。 设函数C(x)定义问题x的复杂程度,函数E(x)确定解决问 题x需要的工作量(时间)。对于两个问题P1和P2, C(P1+P2)>C(P1)+C(P2) 综上所述,得到下面的不等式E(P1+P2)>E(P1)+E(P2)
5.2.1 模块化(II)
图5.1 模块化和软件成本
5.2.2 抽象(I)
对软件进行模块设计的时候,可以有不同的抽 象层次。在最高的抽象层次上,可以使用问题所 处环境的语言描述问题的解法。而在较低的抽象 层次上,则采用过程化的方法。 过程的抽象 :在软件工程过程中,从系统定义 到实现,每进展一步都可以看做是对软件解决方 案的抽象化过程的一次细化。在软件计划阶段, 软件被当做整个计算机系统中的一个元素来看待。
5.2.6 模块独立性度量标准(VII)
中内聚有如下几类: 过程内聚 :使用流程图做为工具设计 程序的时侯,常常通过流程图来确定模 块划分。把流程图中的某一部分划出组 成模块,就得到过程内聚模块。这类模 块的内聚程度比时间内聚模块的内聚程 度更强一些。 通信内聚 :如果一个模块内各功能部 分都使用了相同的输入数据,或产生了 相同的输出数据,则称之为通信内聚模 块。通常,通信内聚模块是通过数据流 图来定义的。见右图
5.1.3 推荐最佳方案
用户和有关的技术专家应该认真审查分析员所推荐 的最佳系统。 接受了分析员所推荐的方案之后,进入总体设计过 程的下一个重要阶段——结构设计。
5.1.4 功能分解(I)
为了最终实现目标系统,必须设计出组成这个系统 的所有程序和文件。程序设计,通常分为两个阶段完 成: 首先进行结构设计,结构设计确定程序由哪些模块 组成,以及这些模块之间的关系;结构设计是总体设 计阶段的任务, 然后进行过程设计。过程设计确定每个模块的处理 过程。过程设计是详细设计阶段的任务。
5.2.3 逐步求精
逐步求精是人类解决复杂问题时采用的基本方法,也是 许多软件工程技术的基础。可以把逐步求精定义为:“为 了能集中精力解决主要问题而尽量推迟对问题细节的考 虑。” Miller法则:一个人在任何时候都只能把注意力集中在 (7±2)个知识块上。 求精是细化过程。从在高抽象级别定义的功能陈述(或 信息描述)开始,求精要求设计者细化原始陈述,随着每 个后续求精(即细化)步骤的完成而提供越来越多的细节。
5.3、设计的启发规则
3、深度、宽度、扇入、扇出适当
深度 = 层数
过大表示分工过细 管理模块过分简单,适 当合并
宽度 = 跨度数的最大值
过大表示系统复杂
5.3、设计的启发规则
扇出 = 模块直接调用 或控制的模块数
3 ≤ fan-out ≤ 9
A
在不破坏独立性的前提 下,fan-in 大的比较好
5.1.5 设计软件结构
通常程序中的一个模块完成一个适当的子功能。应 该把模块组织成良好的层次系统。软件结构可以用层 次图或结构图来描绘。 如果数据流图已经细化到适当的层次,则可以直接 从数据流图映射出软件结构。
5.1.6 设计数据库
在前阶段数据字典和数据流图、ERD的基础上,考 虑数据库的设计。
5.1.2 选择合理的方案
应该从前一步得到的一系列供选择的方案中选取若 干个合理的方案,通常至少选取低成本、中等成本和 高成本的三种方案。 对每个合理的方案分析员都应该准备下列4份资料: (1) 系统流程图; (2) 组成系统的物理元素清单; (3) 成本/效益分析; (4) 实现这个系统的进度计划。
模块的独立程度可以由两个定性标准度量,这两个标准分别称为内 聚和耦合。 1. 耦合 耦合是对一个软件结构内不同模块之间互连程度的度量。耦合强弱 取决于模块间接口的复杂程度,进入或访问一个模块的点,以及通过 接口的数据。 一般模块之间可能的连接方式有七种,构成耦合性的七种类型。
5.2.6 模块独立性度量标准(II)
5.2.6 模块独立性度量标准(III)
外部耦合 :一组模块都访问同一 全局简单变量而不是同一全局数据结 构,而且不是通过参数表传递该全局 变量的信息,则称之为外部耦合。外 部耦合引起的问题类似于公共耦合 控制耦合 :如果一个模块通过传 送开关、标志、名字等控制信息,明 显地控制选择另一模块的功能,就是 控制耦合。见右图
5.3、设计的启发规则
5、降低接口的复杂程度
接口复杂可能表明模块的独立性差 接口复杂或不一致(看起来传递的数据 间无联系),是紧耦合或低内聚的征兆
【例】求一元二次方程的根
5.2.6 模块独立性度量标准(IV)
标记耦合 :如果一组模块通过参数表传递记录信息,就是 标记耦合。 数据耦合 :如果一个模块访问另一个模块时,彼此之间 是通过数据参数(不是控制参数、公共数据结构或外部变量) 来交换输入、输出信息的,则称这种耦合为数据耦合。数据 耦合是松散的耦合,模块之间的独立性比较强。 非直接耦合 :如果两个模块之间没有直接关系,它们之 间的联系完全是通过主模块的控制和调用来实现的,这就是 非直接耦合。这种耦合的模块独立性最强。 设计原则: 设计原则: 尽量使用数据耦合,少用控制耦合和特征耦合,限制公共 环境耦合的范围,完全不用内容耦合。
概要设计 详细设计
SE核心过程 “Don’t rush through it! Don’ Design is worth the effort!” effort!”
任务(I)
总体设计的基本目的就是回答“概括地说,系统应 该如何实现?” 总体设计又称为概要设计或初步设计。划分出组成 系统的物理元素——程序、文件、数据库、人工过程 和文档等等 每个物理元素仍然处于黑盒子级,这些黑盒子里的 具体内容将在以后仔细设计。
A作用域在控制域内 作用域在控制域内
A: ………… if …… then goto M1 ………… ………… M: ………… ………… M1: goto C1 ………… ………… C: ………… ………… C1: ………… …………
如何修改?
A作用域超出了控制域 作用域超出了控制域
判断点上移 把A中的 if 移到 M中 受影响块下移 把C移到A下面
A的扇入 A
注:设计得很好的软件结构通常顶层 扇出比较高,中间扇出比较少, 扇出比较高,中间扇出比较少,底层 模块有高扇入。 模块有高扇入。
5.3、设计的启发规则
A
M C
4、作用域在控制域内
B
M的控制域 的控制域 = {M, A, B, C}
控制域 模块本身以及所有直接或间接从属于它的模块的 集合 If flag
5.2.6 模块独立性度量标准(VIII)
高内聚有如下几类 信息内聚(顺序内聚):这种模块完成多个功能,各 信息内聚(顺序内聚): ): 个功能都在同一数据结构上操作,每一项功能有一个唯 一的入口点。例如,右图所示的模块具有4个功能,由 于模块的所有功能都是基于同一个数据结构,因此,它 是一个信息内聚的模块。 信息内聚模块可以看成是多个功能内聚模块的组合, 并且达到信息的隐蔽。即把某个数据结构、资源或设备 隐蔽在一个模块内,不为别的模块所知晓。当把程序某 些方面细节隐藏在一个模块中时,就增加了模块的独立 性。 功能内聚 :一个模块中各个部分都是为完成一项具 体功能而协同工作,紧密联系,不可分割的。则称该模 块为功能内聚模块。
第5章 总体设计
概要设计或初步设计
内容提要
5.1 设计过程 5.2 设计原理 5.3 启发规则 5.4 描绘软件结构的图形工具 5.5 面向数据流的设计方法
软件生存期
软件计划 需求分析 软件设计 实现(编码) 实现(编码) 测试 维护
定义时期
开发时期
使用和维护时期
退 役
软件设计的任务和作用
两个阶段
开发具有独立功能而且和其他模块之间没有过多的相互 作用的模块,就可以做到模块独立。 希望这样设计软件结构,使得每个模块完成一个相对独 立的特定子功能,并且和其他模块之间的关系很简单。 模块独立重要性理由: 第一,有效的模块化的软件比较容易开发出来。 第二,独立的模块比较容易测试和维护。
相关文档
最新文档