第4章 总体设计

合集下载

第四章 总体设计 PPT

第四章 总体设计 PPT


软件结构;用IPO图或其他工具(例如,PDL语言) 简要描述的各个模块的算法;模块间的接口关系;

需求、功能和模块三者之间的交叉参照关系等等。
设 用户手册

修改更正在需求分析阶段产生的初步的用户手册。

测试计划

包括测试策略,测试方案,预期的测试结果,测试 进度计划等等。

详细的实现计划
在总体设计阶段分析员应该考虑各种可能的实现方案,
并且力求从中选出最佳方案。
5.1 需求分析阶段得出的数据流图是总体设计的极好的出

发点。数据流图中的某些处理可以逻辑地归并在一个
体 设
自动化边界内作为一组,另一些处理可以放在另一个
自动化边界内作为另一组。这些自动化边界通常意味 着某种实现策略。
计 设想把数据流图中的处理分组的各种可能的方法,抛

无法控制各个模块对公共数据的存取,严重影响
软件模块的可靠性和适应性。
**
公共数据名的使用,明显降低了程序的可读性。

5.1.7 制定测试计划
5.1
在软件开发的早期阶段考虑测试问题,能促使软

件设计人员在设计时注意提高软件的可测试性。






5.1.8 书写文档
系统说明
用系统流程图描绘的系统构成方案;组成系统的物
理元素清单;成本/效益分析;对最佳方案的概括
5.1
描述;精化的数据流图;用层次图或结构图描绘的
5.1.5 设计软件结构
通常程序中的一个模块完成一个适当的子功能。
应该把模块组织成良好的层次系统,顶层模块
5.1
调用它的下层模块以实现程序的完整功能,每

软件工程-总体设计

软件工程-总体设计

设 构约束。

(2)子模式设计
子模式是用户使用的数据视图。
过 (3)完整性(Integrality)和安全性(Security)设计
程 (4)优化(Optimize)
主要目的是改进模式和子模式以优化数据的存取。
前一页


制定测试计划

在软件开发的早期阶段考虑测试
设 计
(Testing)问题,能促使软件设计人员 在设计时注意提高软件的可测试性 。
程 设计过程的下一个重要阶段——结构设计。
前一页
功能分解

体 为了最终实现目标系统,必须设计出组成 这个系统的所有程序和文件(或数据库)。对
的 程序(特别是复杂的大型程序)的设计,通常
设 分为两个阶段完成:

结构设计(Structure Design) :是总体设
计阶段的任务,确定程序由那些模块组
模块彼此间互相依赖(连接)的紧密程度。
前一页
耦合度
耦合度可以分为七级:
软件设计时应尽量使用数据 藕合,减少控制藕合,限制 外部环境藕合和公共数据藕 合,杜绝内容藕合。
非直接藕合 低
数据藕合
控制藕合

特征藕合
合 度
外部藕合
公共藕合 内容藕合 高
数据耦合 (Data Coupling):如果两
个模块彼此间通过参数交换信息, 而且交换的信息仅仅是数据,那么 这种耦合称为数据耦合。
设 计
设函数C(x)定义问题x的复杂程度, 函数E(x)确定解决问题x需要的工作量

(时间),对于两个问题p1和p2,如果
概 念
C(p1)> C(p2)

E(p1)> E(p2)

第四章 总体设计

第四章  总体设计
软件工程——第四章 总体设计 6
总体设计的任务
• •
回答“概要地说,系统应该如何实现?”这个问题; 划分出软件系统的物理组成元素(黑盒子);

程序 文件 数据库 人工过程和文档

设计软件的结构,即系统模块及它们之间的关系(即系统 结构图)
软件工程——第四章 总体设计
7
总体设计的必要性
sum(x,y) int x,y; {int z; z=x+y; return(z);}
6,10
16
6,10
8
Sum()
C语言中模块化以及模块之间的调用关系
Ave()
ave(x,y) int x,y; {int z z=(x+y)/2 return(z); }
在Main()中都进行求和、求平均的计算,问题比较复杂, 因此,求和、求平均的计算划分成独立模块, 由Main()函数调用的方法进行设计, 复杂度降低,问题容易解决,测试也方便。
完整准确的维护记录 持久地满足用户需要 的软件 软件工程——第四章 总体设计
3
软件设计过程

开发阶段的信息流
数据描述 功能描述 设计 数据设计 总体结构设计 编码 集成并确认 的软件
行为描述
其他需求
过程设计
测试
软件工程——第四章 总体设计
4
将分析模型转换为软件设计
加 工 据 E-R图 数据 规 对 流图 约 数据 象 字典 描 述 状态变迁图 数 控制规约
结构分析设计过程
阶段
总体设计
关键问题
概括地说,应该如何 解决这个问题?
结束标准
可能的解法: 系统流程图 成本/效益分析 推荐的系统结构; 层次图或结构图

4-第四章总体设计

4-第四章总体设计

4-第四章总体设计第四章总体设计需求分析中得到的系统模型(软件需求规格说明书)解决了”系统必须做什么”的问题.⽽”系统怎么做”是由系统设计来完成的.序:系统设计概述⼀.系统设计任务:采⽤适当的⼿段将软件需求说明转换为软件设计⽂档.系统设计分为两个阶段:总体设计与详细设计.1.总体设计(概要设计):主要完成软件结构的设计,确定系统的模块及其模块之间的关系.2.详细设计:主要完成各个模块内部的算法和数据结构.⼆.系统设计的⽅法在模块化、及由顶向下等传统设计策略的基础上形成的:1.⾯向数据流的结构化设计⽅法;2.⾯向数据结构的设计:Jackson⽅法、LCP等⽅法。

三.原型法中的系统设计第⼀步原形设计:利⽤现有软件组成新系统,⽤最快速度实现⽤户的主演需求,证明系统的可⾏性;第⼆步最终设计:保留第⼀步设计中已证明的有⽤部分,对其余部分重新设计.§1 总体设计阶段的过程和任务总体设计过程包括两个阶段:系统设计(确定系统的物理⽅案)和结构设计(确定软件结构).具体的过程和任务如下:⼀.设计可供选择的⽅案:从对需求分析阶段的数据流图的充分分析中提出不同的物理实现⽅案.⼆.选取合理⽅案:从前⼀步的若⼲种⽅案中选取⼏种合理的⽅案.对每⼀种合理的⽅案完成下列任务:1.系统流程图;2.组成系统的物理元素清单;3.成本/效益分析;4.实现这个系统的进度计划.三.选择最佳⽅案: 对上述若⼲种合理⽅案经过认真、全⾯的分析,在⼴泛征求⽤户和专家意见的基础上,从中选出最佳的⽅案,并对该⽅案制定具体的实现计划.四.系统的结构设计:根据最佳⽅案,对系统的结构进⾏设计。

即通过功能的抽象和分解确定系统程序的模块组成和模块之间的相互关系等(功能结构). ⽽功能的抽象和分解过程就是对数据流图进⾏抽象和细化的过程.五.软件结构设计:按每个模块的⼦功能,⾃顶向下组成良好的层次调⽤关系.其过程是将细化的数据流图映射成软件结构图.六.数据库设计:除对系统的程序进⾏模块设计外,对系统的⽂件或数据库进⾏设计.数据库的设计包括四个步骤:1.模式设计:确定数据库的逻辑结构,表⽰成关系的、层次的或⽹状的形式之⼀;2.⼦模式设计:为系统中各⽤户设计出各⾃的数据视图;3.存储模式设计:(1)确定数据库的空间需求、存储格式索引组成等;(2)优化数据的存储性能;(3)规定各⽤户对数据库的访问权限和保密机制;(4)确定保证数据正确性和⼀致性的完整性约束条件。

第4章 总体设计

第4章 总体设计

时间内聚 过程内聚 内聚性
通信内聚
顺序内聚
功能内聚 高
4.3 启发规则 改进软件结构提高模块独立性 • 模块规模应该适中 • 深度、宽度、扇入、扇出都应适当 • 模块的作用域应该在控制域之内 • 力争降低模块接口的复杂程度 • 设计单入口单出口的模块 • 模块的功能应该可以预测

模块的作用域定义为受该模块内 一个判定影响的所有模块的集合。 模块的控制域是这个模块本身以 及所有直接或间接从属于它的模 块的集合。
中内聚
过程内聚:模块内的处理元素是相关的,且必须以特定次序执行。 通信内聚:模块中所有元素都使用同一个输入数据,和/或产生同一个 输出数据。 顺序内聚:模块中所有处理元素和同一个功能密切相关,且这些处理必
高内聚
须顺序执行。 功能内聚:所有处理元素属于一个整体,完成一个单一的功能。
偶然内聚 低
逻辑内聚
内聚
内聚:一个模块内各个元素彼此结合的紧密程度。 偶然内聚:一个模块完成一组任务,任务之间的关系很松散。公共语句。 低内聚 逻辑内聚:若干个逻辑功能类似的任务组成一个模块。 时间内聚:若干个任务必须在同一段时间内执行。如初始化工作。 模块A 模块B
S1; S2;
模块C
模块A 模块A 模块B 模块C 模块B 模块D 模块C
读旋转信号
读燃料流 确 定 加/减速 加速/减 速显示 发光二极 管显示
数字仪表板软件系统经过调整后的结构图
设计步骤: 设计步骤:
复查基本系统模型 复查并精化数据流图 确定数据流图具有变 换特性还是事务特性 确定输入流和输出流的边 界,划分变换或事务中心 第一级分解” 完成 “第一级分解” 第二级分解” 完成 “第二级分解” 精化软件结构
4.4 描绘软件结构的图形工具 • 层次图和HIPO图

第4章--总体设计

第4章--总体设计
块内联络(Cohesion,又称聚合度)是指一种模块内部各成 份(语句或语句段)之间旳联络,如图4.1(b)所示。块内联络大了, 模块旳相对独立性势必会提升。
第4章 总体设计
M1
块间联系
M2 块间联系
M3 块间联系
M4
M5
M6
( a ) 块间联系
M1
M2
M3
M4
M5
M6
( b ) 块内联系
图4.1 块间联络与块内联络
(1) 输入数据X旳格式。目前X旳格式是六个字符旳字符串, 其中有符号位、三位整数、小数点和一位小数,将来会有变化。
(2) 对X作合理性检验旳规则。目前只要X旳数值范围在- 500~+500之间就以为它是合理旳,将来打算采用某些更精确 旳检验规则。
(3) 目前将计算成果存入磁带中,将来存入磁盘中,存储 格式也有变化。
第4章 总体设计
Parnas措施对模块分解提出了深刻旳看法,但遗憾旳是, 它没有给出明确旳工作环节,所以这个措施一般仅作为其他 措施旳补充手段。
第4章 总体设计
4.4 Jackson 方 法
另一种措施LCP(Logical Construction of Programs) 措施,本节将主要简介Jackson措施。
第4章 总体设计
第4章 总体设计
4.1 模块化设计措施
4.2 构造化设计(SD)措施
4.3 Parnas措施
4.4 Jackson措施
4.5 总体设计旳其他工作
4.6 详细设计
4.7 编程
返回主目录
第4章 总体设计
第4章 总 体 设 计
4.1 模块化设计措施
1.模块设计旳基本概念
较大旳软件系统,一般是由许多具有特定功能旳较小旳 单元构成,这种单元就称为模块。一种模块具有输入和输出、 特定功能、内部数据和程序代码等四个特征。输入和输出模 块是需要处理和产生信息旳功能模块。输入输出和特定功能 构成了一种模块旳外貌,即模块旳外部特征。程序代码用来 完毕模块旳功能。内部数据是仅供该模块本身引用旳数据, 内部数据和程序代码是模块旳内部特征。对模块旳外部环境 来说,只需了解它旳外部特征就足够了。

第4章软件的系统设计--总体设计

第4章软件的系统设计--总体设计


模块化和软件成本的关系
软件总成本 最小成本区 M
成本或工作量
接口成本
模块数目
(二)、抽象

抽象是人类在解决复杂问题过程中使用的思维工具,即抽出 事物本质的共同的特性而暂不考虑它的细节. 软件系统进行模块设计时,可有不同的抽象层次。 在最高的抽象层次上,可以使用问题所处环境的语言概括地 描述问题的解法。 在较低的抽象层次上,则采用过程化的方法。


系统分析与需求分析的区别

需求分析是一个项目的开端,也是项目建设的基石。是对用户需求的定义, 对软件系统的描述。在以往建设失败的项目中,80%是由于需求分析的不 明确而造成的。因此一个项目成功的关键因素之一,就是对需求分析的把 握程度。而项目的整体风险往往表现在需求分析不明确、业务流程不合理, 用户不习惯或不愿意去用承建方的软件。作为第三方的监理公司,必须提 醒承建方、客户方重视需求分析的重要性。 系统分析的任务:将用户的业务逻辑转化为程序逻辑,计算时间和成本。 根据开发人员的理论知识和实际的经验,人们会采用各种满足实际情况的 系统分析、开发方法、步骤以及文档等等。一般情况下,在系统分析书中 应该有以下内容(视项目而定): 1、系统需求说明 说明系统是一个什么样的系统,用市场上现有的 系统来类比, 用客户(或是我们自己)需要一个什么样的系统进行说明, 力求完整。
现在汇编语言中);
(4) 一个模块有多个入口。
c
总结:数据耦合的程度最低,其次是控制耦合, 再其次是公共耦合,程度最高的是内容耦合。
模块内聚
模块独立性
内聚性 偶然 逻辑 时间 过程 通信 顺序 功能 内聚 内聚 内聚 内聚 内聚 内聚 内聚
内聚性是对一个模块内部各个组成元素之间相互结合的紧密程度的度 量指标。模块中组成元素结合的越紧密,模块的内聚性就越高,模块 的独立性也就越高。理想的内聚性要求模块的功能应明确、单一,即 一个模块只做一件事情。 在进行模块化设计时,耦合性和内聚性都是必须考虑的重要指标。但 经实践证明,保证模块的高内聚性比低耦合性更为重要,在软件设计 时应将更多的注意力集中在提高模块的内聚性上。模块的内聚性主要 可划分为如上几种不同的类型。

第4章 总体设计

第4章 总体设计

04 总体设计一、选择题(1)模块的内聚性最高的是( D )A.逻辑内聚B.时间内聚C.偶然内聚D.功能内聚(2)总体设计的目的是确定整个系统的( B )。

A.规模 B.功能及模块结构C.费用 D.测试方案(3)一个模块内部各程序都在同一数据结构上操作,这个模块的内聚性称为( C )。

A.时间内聚 B.功能内聚C.通信内聚 C.过程内聚(4)软件总体设计是指软件总体结构设计和数据设计,该阶段的主要任务不包括( C )。

A. 设计软件的模块结构B. 定义接口并建立数据结构C. 模块设计D. 生成概要设计规格说明(5)如果某种内聚要求一个模块中包含的任务必须在同一段时间内执行,则这种内聚为( A )。

A.时间内聚 B.逻辑内聚 C.通信内聚 D.信息内聚(6)为了提高模块的独立性,模块之间最好使用( D )。

A. 控制耦合B. 公共耦合C. 内容耦合D. 数据耦合(7)结构化程序设计的一种基本方法是( D )。

A.筛选法 B.递归法 C.归纳法 D.逐步求精法(8)对软件进行分解,是为了( B )。

A.降低模块间接口的复杂程度B.降低模块的复杂程度C.降低模块的复杂程度,并降低模块间接口的复杂程度D.降低模块的复杂程度,并提高模块间接口的复杂程度(9)在软件工程中,描绘软件结构的图形工具不包括( C )。

A. 层次图B. HIPO图C.PAD图D.H图(10)两个模块彼此传递的信息中有控制信息,这种耦合称为( D )。

A.数据耦合 B.公共环境耦合 C.内容耦合 D.控制耦合(11)耦合是对软件不同模块之间互连程度的度量。

各种耦合按从强到弱排列如下:( C )A. 内容耦合,控制耦合,数据耦合,公共环境耦合。

B. 内容耦合,控制耦合,公共环境耦合,数据耦合。

C. 内容耦合,公共环境耦合,控制耦合,数据耦合。

D. 控制耦合,内容耦合,数据耦合,公共环境耦合。

(12)结构化设计又称为( B )。

A. 概要设计B. 面向数据流设计C. 面向对象设计D. 详细设计(13)按照总体设计中的启发式规则,模块的作用域和模块的控制域之间的关系应为( A )。

软件工程第4章总体设计

软件工程第4章总体设计

总体设计的概念和原理
A 0层
A
B
C
1层
B
D E F 2层
C
G
H
I 3层
D 网状结构
树形结构
总体设计的概念和原理
1 、 软件结构和过程 软件过程:软件过程集中考虑每个模块各自的处理细
节。过程必须提供一个精确的处理规格说明,包括事件顺 序,精确的判定位置、重复的操作,以及数据组织和结构 等。 结构和过程之间是有关系的:描述一个模块的实现,必 须包括所有从属于该模块的所有模块的引用,而从属于该 模块的所有模块是通过结构体现的。
总体设计的概念和原理
联系的作用(相互之间的影响)取决于传送的信息流 的类型:
混合型:当一个模块修改另一个模块的代码时,对修改 者来说,修改的代码是当作数据来处理的,而对被修改的模 块来说,则可能是对“控制”的改变,这种情况最难处理, 耦合度最高。
总体设计的概念和原理
联系的作用(相互之间的影响)取决于传送的信息流 的类型:
总体设计的概念和原理
1 、 软件结构和过程 软件结构:就是将一些功能模块按照某种关系连接 形成的结构。
树状结构的特点是:整个结构只有一个顶层模块,而对 于任何一个下层模块,只有一个上级模块,而且同一层模 块之间不发生联系。 网状结构的特点是:任意两个模块间都可以有双向的关 系。由于模块间不存在上下的关系,任何两个模块都是平 等的,因此分不出层次来。
它能用一个可操作的概念来描述,即程序员在编码、调试和修 改一个模块时,需要考虑另外一个模块的概率。如果两个模块 是紧耦合的,那么他修改一个模块,需要修改另外一个模块的
概率就高。显然整个系统的开发费用及系统的复杂性与模块间
的耦合度有直接的关系。

软件工程_总体设计

软件工程_总体设计
前一页
模块内聚
c
启发式规则
主 要 内 容
• • • • • • •
改进软件结构提高模块独立性 模块规模应该适中 深度、宽度、扇出和扇入应适当 模块的作用域应在控制域之内 尽量降低模块接口的复杂程度 设计单入口出口的模块 模块功能应该可以预测
前一页
软件结构形态
“形态”指的是系统结构所表现出来的形状。系统 结构的形状用如下特征来定义: (1)深度:指结构图控制的层次。 (2)宽度:指一层中最大的模块个数。 (3)扇出:指一个模块直接下属模块的个数。 (4)扇入:指一个模块直接上属模块的个数。 系统的深度能够粗略地描述系统的规模和复杂度。 系统宽度的一个主要影响是扇出。一般认为,扇出 的域值大约为6或7。
图形工具主 ຫໍສະໝຸດ 内 容• 层次图和HIPO图 • 结构图
前一页
层次图和HIPO图
图 形 工 具
层次图 用来描绘软件的层次结构,层
次图适合于在自顶向下设计软件的过程中 使用。
HIPO图 是美国IBM公司发明的层次 图加“输入/处理/输出图”的英文缩写 为了能使HIPO图具有可追踪性,在H图 (层次图)里除了最顶层的方框之外,每 个方框都加了编号。
数据库设计
总 体 的 设 计 过 程
前一页
数据库设计通常包括下述四个步骤: (1)模式设计(Pattern Design)
模式设计的目的是确定物理数据库结构。第三范 式的实体及关系数据模型是模式设计过程的输入,模 式设计的主要问题是处理具体的数据库管理系统的结 构约束。
(2)子模式设计
子模式是用户使用的数据视图。
软 件 设 计 的 概 念 和 原 理
前一页
模块化
设函数 C ( x )定义问题 x 的复杂程度, 函数 E ( x )确定解决问题 x 需要的工作量 (时间),对于两个问题p1和p2,如果 C(p1)> C(p2)

第4章 总体设计

第4章 总体设计
作用域:指受该模块内一个判断影响的所有模块的 集合。 控制域:指模块本身以及其所有直接或者间接从属 于它的模块集合。
4.4 软件结构设计启发式规则
TOP A C E B D F A C E TOP B D F A C E TOP B D F
(b) (c) 图4.14 模块的作用域和控制域 (a) 差的结构图 (b) 不理想的结构图 (c) 理想的结构图
4.4 软件结构设计启发式规则
3( .软件结构的形态特征准则 1)深度指软件结构中模块的层次数,它表示控制的
层数,一定意义上能粗略地反映系统的规模和复杂程 度。 (2)宽度指同一层次中最大的模块个数,它表示控制 的总分布。 (3)扇出指一个模块直接调用的模块数目。经验证明 ,良好的系统结构平均扇出数一般是3-4,不能超过59。 (4)扇入指有多少个上级模块直接调用它。
1、设计软件结构
(1)通过需求分析阶段得到的数据流图设想各种可能方 案。将一个复杂的系统按功能划分为若干模块; (2)确定每个模块的功能; (3)确定模块之间的调用关系; (4)确定模块之间的接口,即模块之间传递的消息; (5)评价模块结构的质量。
4.1 总体设计的目标及任务
2.数据结构及数据库设计
(1)模块接口设计要简单,以降低复杂程度和冗余度 。 (2)设计功能可预测并能得到验证的模块。 (3)适当划分模块规模,以保持其独立性。
式及传递的信息。
4.2 软件结构设计原理
4.2.4 模块独立性
耦合类型
无直接耦合—数据耦合—控制耦合—特征耦合—公共耦合—内 容耦合 低——————————————————————高
4.2 软件结构设计原理
4.2.4 模块独立性
无直接耦合:指两个模块之间没有直接的关系,它们分别从 属于不同模块的控制与调用,它们之间不传递任何信息。 数据耦合:指两个模块之间有调用关系,传递的是简单的数 据值,相当于高级语言中的值传递。这种耦合程度较低,模块 的独立性较高。 控制耦合:指一个模块调用另一个模块时,传递的是控制变 量(如开关、标志等) ,被调模块通过该控制变量的值有选择地 执行块内某一功能。

软件工程课件 第4章 总体设计

软件工程课件 第4章 总体设计

计算机与软件学院 毕硕本
4.3 设计原理
5.3.4 信息隐藏和局部化
信息隐藏原理指 出:应该这样设 计和确定模块, 使得一个模块内 包含的信息(过程 和数据)对于不需 要这些信息的模 块来说,是不能 访问的。
局部化的概念和 信息隐藏概念是 密切相关的。所 谓局部化是指把 一些关系密切的 软件元素物理地 放得彼此靠近。
从变换中心的 边界开始沿着 输入通路向外 移动,把输入 通路中每个处 理映射成软件 结构中“输入 信息处理控制 模块”控制下 的一个低层模 块。
然后沿输出通 路向外移动, 把输出通路中 每个处理映射 成直接或间接 接受“输出信 息处理控制模 块”控制的一 个低层模块。
最后把变换中 心内的每个处 理映射成受 “变换中心控 制模块”控制 的一个低层模 块。
5.3.2 抽象
抽象就是抽出事物的本质特性而暂时不考虑它 们的细节。
软件工程过程的每一步都是对软件解法的抽象 层次的一次精化。
第4章 总体设计
计算机与软件学院 毕硕本
4.3 设计原理
可行性 研究
软件作为系统 的一个完整部 件
软件工程过程的每一步
需求分析
总体设计 到详细设

抽象的程度也 就随之减少了
写出源程序
达到了抽象 的最低层
软件解法是使用在问题环 境内熟悉的方式描述的
第4章 总体设计
计算机与软件学院 毕硕本
4.3 设计原理
模块化的概念,与抽象是紧密相关的。 随着软件开发工程的进展,在软件结构每一层 中的模块,表示了对软件抽象层次的一次精化。 软件结构顶层的模块,控制了系统的主要功能 并且影响全局;在软件结构底层的模块,完成对 数据的一个具体处理。
考ቤተ መጻሕፍቲ ባይዱ

四章总体设计SystemDesign

四章总体设计SystemDesign
例如:从同一磁带上读取不相干的数据 —— 可能破坏 独立性。
高内聚: 顺序内聚(Sequential cohesion):The output from one
part of a module is the input to the next part.
功能内聚(Functional cohesion):Every processing
Flag A
B Flag
Fn …… F2 ……
F1
接口单一, 但仍然影响 被控模块的 内部逻辑。
数据耦合(Data coupling): Only data are passed. It is
easy to trace data and make changes.
☺ The most desirable.
functions or data are placed in the same module.
例如:
from disk
from tape
A: Read
from ……
inputs
§2.模块化原理
时间内聚(Temporal cohesion):The functions are
related only by the timing involved.
完成模块功能所必须的数据是否都传递了? 传输的数据是否只与单一的功能有关?是
否目的明确?
§5.面向数据流的设计方法 (又称为SD:Structural Design)
基本思想: DFD System Hierarchy 1、Data Flow 的分类 ⑴ 变换流(Transform Flow):
4、模块独立性(Module independence) 好设计的关键:每个模块完成一个相对独立的 子功能,并且与其它模块间的接口简单。

《软件工程》第4章 总体设计-大纲

《软件工程》第4章 总体设计-大纲

第4章总体设计4.1 总体设计的目标及任务——基本目的:解决“系统应该如何实现”的问题——系统设计阶段:确定系统的具体实现方案——结构设计阶段:确定系统的软件结构……任务1.设计软件结构……任务2.数据结构及数据库设计……任务3.确定测试要求并制定测试计划……任务4.编写总体设计文档《概要设计说明书》……任务5.评审4.2 软件结构设计原理4.2.1 模块化——模块……定义:是构成程序的基本单位,数据说明、可执行语句等程序对象的集合,或者是单独命名和编址的元素(如函数、子程序、过程)等。

——模块化……定义:解决一个复杂问题时自顶向下逐层把软件系统划分成若干个独立命名、且可独立访问的模块的过程。

每个模块完成一个特定的子功能,所有的模块按某种方法组装起来,成为一个整体,完成整个系统所要求的功能。

——模块的基本属性……外部属性:接口,功能,状态……内部属性:逻辑4.2.2 抽象:逐步求精——定义:抽出事物本质特性而不考虑细节4.2.3 信息隐藏和局部化——信息隐藏原理定义:设计和确定模块时,使得一个模块内包含的信息对于不需要这些信息的模块来说,是不能访问的。

——局部化定义:把一些关系密切的软件元素物理地放得彼此靠近4.2.4 模块独立性——模块独立定义:每个模块完成一个相对独立的特定子功能,并且和其他模块之间的关系很简单。

——模块独立性的定性标准度量:……耦合:(1)定义:软件系统结构中各模块间相互联系紧密程度的一种度量。

模块之间联系越紧密,其耦合性就越强,模块的独立性则越差。

(2)分类:无直接…数据…控制…特征…公共…内容……内聚:(1)定义:一个模块内部各个元素彼此结合的紧密程度的度量。

(2)分类:偶然…逻辑…时间…过程…通信…顺序…功能……原则:力争做到高内聚,并且能辨认出低内聚的模块,通过修改设计提高模块的内聚程度并降低模块间的耦合程度。

4.3 软件结构设计工具——层次图——HIPO图:带编号的层次图——软件结构图4.4 软件结构设计启发式规则——作用域定义:指受该模块内一个判断影响的所有模块的集合——控制域定义:指模块本身以及其所有直接或者间接从属于它的模块集合——原则:好的设计:所有受判定影响的模块应该都从属于做出判定的那个模块,最好局限于做出判定的那个模块本身及它的直属下级模块。

第四章 总体设计(概要设计)

第四章 总体设计(概要设计)

§4.1 总体设计的过程
总体设计过程通常由两个主要阶段组成: 1.系统设计,确定系统的具体实现方案; 2.结构设计,确定软件结构。
总体设计的过程: 总体设计的过程:
一、设想供选择的方案
确定方案
二、选择合理的方案 三、推荐最佳方案 四、功能分解
确定结构
五、设计软件结构 六、数据库设计 七、制定测试计划 八、书写文档 九、审查复审
第四章 总体设计(概要设计)
软件设计的任务是把分析阶段产生的软 件需求说明转换为用适当手段表示的软件 设计文档。 软件设计可分为概要设计(Preliminary Design)和详细设计(Detail Design)。 概要设计确定软件的结构,即软件的组成 及各子系统之间的相互联系;详细设计确 定模块内部的算法和数据结构,产生描述 各模块程序过程的详细设计的文档。
七.模块功能应该可以预测。 模块功能应该可以预测。 模块的功能应该可以预测, 模块的功能应该可以预测,但也要防止模块 功能过分局限。 功能过分局限。 如果一个模块可以当作一个黑盒子, 如果一个模块可以当作一个黑盒子 , 也就是 只要输入数据相同就产生同样的输出, 说,只要输入数据相同就产生同样的输出,这个 模块就是可以预测的。 模块就是可以预测的。 以上列出的启发式规则多数是经验规律, 以上列出的启发式规则多数是经验规律 , 对 改进设计,提高软件质量, 改进设计,提高软件质量,往往有重要的参考价 但是, 值。但是,它们既不是设计的目标也不是设计时 应该普遍遵循的原则。 应该普遍遵循的原则。
1. 偶然性内聚(Coincidental Cohesion) 所谓偶然性内聚是指一个模块内各成分为完成一组 功能而组合在一起,它们相互之间即使有关系,也很 松散。 2. 逻辑性内聚(Logical Cohesion) 如果一个模块完成的任务逻辑上相关(例如,一个产 生所有与类型无关的输出),则称为逻辑性内聚。 3. 时间性内聚 (Temporal Cohesion) 如果一个模块内包含的任务必须在一个时间段内执行 (例如一个初始化模块),则称之为时间性内聚。 4. 过程性内聚 (Procedural Cohesion) 模块的过程性内聚是指,模块内成分彼此相关,并 且必须按特定的次序执行。

四章概要设计总体设计

四章概要设计总体设计

模块的独立性:
外部耦合(External Coupling)
一组模块都访问同一全局简单变量而不是 同一全局数据结构,而且不是通过参数表传 递该全局变量的信息,则称之为外部耦合。
公共耦合(Common Coupling)
若一组模块都访问同一个公共数据环境, 则它们之间的耦合就称为公共耦合。公共的 数据环境可以是全局数据结构、共享的通信 区、内存的公共覆盖区等。
正文加工系统
输入 编辑 加标题 存储 检索
添加 删除 插入
合并
图形工具:
HIPO图
HIPO图为层次图(H图)+IPO图。 层次图中的每个矩形框加上编号,对应于每个矩形 框用IPO图来描述模块的处理过程。
正文加工系统
输入1.0 编辑2.0 加标题3.0 存储4.0 检索5.0
添加2.1 删除2.2 插入2.3
设计人员在软件设计时注意提高软件的可测 试性。
总体设计的过程:
(8) 书写文档 系统说明 用户手册 测试计划
详细的实现计划 数据库设计结果
(9) 审查与复审 技术审查 管理复审
软件设计的概念与原理 模块化:
软件系统的模块化是指整个软件被划分成
若干单独命名和可编址的部分,称之为模块。 这些模块可以被组装起来以满足整个问题的 需求。
时间内聚又称为经典内聚。这种模块大多 为多功能模块,但模块的各个功能的执行与 时间有关,通常要求所有功能必须在同一时 间段内执行。例如初始化模块和终止模块。
模块的独立性:
逻辑内聚(Logical Cohesion)
这种模块把几种 相关的功能组合 在一起,每次被 调用时,由传送 给模块的判定参 数来确定该模块 应执行哪一种功 能。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.模块设计的基本概念 . 较大的软件系统,一般是由许多具有特定功能的较小的 单元组成,这种单元就称为模块。一个模块具有输入和输出、 特定功能、内部数据和程序代码等四个特性。输入和输出模 块是需要处理和产生信息的功能模块。输入输出和特定功能 构成了一个模块的外貌,即模块的外部特性。程序代码用来 完成模块的功能。内部数据是仅供该模块本身引用的数据, 内部数据和程序代码是模块的内部特性。对模块的外部环境 来说,只需了解它的外部特性就足够了。
第4章 总体设计
② 不太可能发生的修改,可以涉及少量模块和不太用的模 块之界面; ③ 极不可能发生的修改,才需改动常用模块的界面。 Parnas在1972年提出的信息隐蔽原则已被软件界广泛接受, “信息隐蔽”(也就是“抽象”)已成为软件工程学中的一个重 要原则,“抽象数据类型”以及诸如Ada语言中的Package等有 关概念就是信息隐蔽原则的体现。 Parnas的研究工作虽然同SD方法的研究是独立的,但其结 论颇为接近:将信息隐蔽在模块的内部,就是将模块作为一个 黑盒,使其他模块不了解这个模块的内部细节,这同模块之间 要相对独立、块间联系要小等想法是一致的。
第4章 总体设计
使用Parnas方法,我们可以将程序设计成如图4.2所示的结 构。其中模块Get an X隐含了上述第一个因素,模块Validate隐 含了第二个因素,模块Store隐含了第三个因素。 而其他模块则 不必了解这些因素。将来某个因素发生变化时,仅仅修改一个 模块就行了。 读者可以想象,如果不将Validate独立出来,而是同Get a Valid X混合在一起, 则第二个因素发生变化时影响的范围就比 现在大了。 [例4.2] 用数组实现了一个栈,有10个模块要对栈作存取 操作。 一种设计方案是将数组、栈顶、深度等作为全程变量,由 各个模块自行对栈作存取操作(如图4.3(a)所示),也就是说10个 模块都需了解栈的具体结构细节。
第4章 总体设计
所以我们可以说,SD方法的长处来自于模块之间的相对独 立性,它提高了系统的质量(可理解性、可维护性、可靠性等), 也减少了研制软件所需的人工。 2.块间联系和块内联系 . 如何衡量模块之间的相对独立性呢? SD方法提出了块间联 系和块内联系这两个标准(如图4.1所示)。 块间联系(Coupling,又称耦合度)是指模块之间的联系,它 是对模块独立性的直接衡量,如图4.1(a)所示。块间联系越小 就意味着模块的独立性越高,所以这是一个最基本的标准。 块内联系(Cohesion,又称聚合度)是指一个模块内部各成 分(语句或语句段)之间的联系,如图4.1(b)所示。块内联系大了, 模块的相对独立性势必会提高。
第4章 总体设计
模块设计技术上有相当的困难,它需要有一定的方法来 指导,从而使设计人员可以获得较好的方案。20世纪70年代以 来,出现了许多设计方法来支持模块设计,其中具有代表性的 有结构化设计、Parnas方法、Jackson方法、Warnier方法等。这 些方法都采用了模块化、由顶向下逐步细化的基本思想。它们 的差别在于构成模块的原则不同。结构化设计方法以数据流图 为基础构成模块结构;Parnas方法以信息隐蔽为原则建立模块 结构;而Jackson 方法则以数据结构为基础建立模块结构。当 然这些方法也可以结合起来使用。
第4章 总体设计
也就是说,在设计模块结构时,将某个因素隔离在某个模 块内部,这个因素的变化不致于传播到所在模块的边界之外。 下面用两个例子解释信息隐蔽原则。 [例4.1] 某程序输入一个数X,对它进行合理性检查,然 后进行计算,最后将计算结果存入存储器中。根据实际情况, 我们估计到以下三个因素将来可能要发生变化: (1) 输入数据X的格式。目前X的格式是六个字符的字符串, 其中有符号位、三位整数、小数点和一位小数,将来会有变化。 (2) 对X作合理性检查的规则。目前只要X的数值范围在- 500~+500之间就认为它是合理的,将来打算采用某些更精确 的检查规则。 (3) 目前将计算结果存入磁带中,将来存入磁盘中,存储 格式也有变化。
第4章 总体设计
Parnas方法对模块分解提出了深刻的见解,但遗憾的是, 它没有给出明确的工作步骤,所以这个方法一般仅作为其他 方法的补充手段。
第4章 总体设计
4.4 Jackson 方 法
第4章 总体设计
(3) 考虑到软件本身也会有错误,所以模块之间要加强检 查,防止错误的蔓延。例如开平方根的模块应检查输入的变量 是否大于等于零,而不应假设这一点必然成立;又如操作系统 中应考虑万一发生死锁,该怎么处理;或者有一个进程发生了 故障,连续不断地申请资源而不再归还时,系统如何发现和处 理这种异常。 2.提高可维护性的技术──信息隐蔽 .提高可维护性的技术 信息隐蔽 大型软件系统是多个版本的,在整个生命期中要经历多次 修改,设计时如何划分模块,才能使将来修改的影响范围尽量 小呢? Parnas提出了信息隐蔽(Information Hiding)的原则。根据 信息隐蔽原则,设计时应首先列出可能发生变化的因素,在划 分模块时将一个可能发生变化的因素包含在某个模块的内部, 使其他模块与这个因素无关。这样,将来这些因素发生变化时, 我们只需要修改一个模块就够了,而其他模块则不受这个因素 的影响。
第4章 总体设计
M
M
M1
M2

M10
M1
M2

M10
Stack
Stack
Stack
Stack (a) (b)
图4.3 模块对栈的存取操作
第4章 总体设计
通过上面两个例子的讨论,我们可以体会到信息隐蔽的目 的是使修改造成的影响尽量局限在一个或少数几个模块内部, 从而降低软件维护的开支。又因为修改极易引起错误,所以修 改影响范围越小,修改引起错误的可能性越小,系统的可靠性 也就提高了。 为了达到上述目标,根据信息隐蔽原则,模块分解时应该 做到以下几点: (1) 每个模块功能简单、容易理解。 (2) 修改一个模块的内部实现不会影响其他模块的行为。 (3) 将可能变化的因素在设计方案中作如下安排: ① 最可能发生的修改,不必改动模块界面就能完成;
第4章 总体设计
在设计时使软件结构尽量简单清晰,这是避免错误、提高 可靠性的根本手段。Parnas主张设计时应预计到将来可能发生 的种种意外,采取以下措施以提高系统的健壮性: (1) 考虑到硬件有可能出现意外故障,所以接近硬件的模 块应该对硬件的行为进行检查,以便及时发现硬件的错误,例 如对磁带中的文件配上检查以供核对,或存储几份副本以供比 较等。 (2) 考虑到操作人员有可能失误(也可能有人会故意破坏), 负责接受操作人员输入的模块应该对输入数据进行合理性检查, 辨认非法、越权的操作要求,同时也要为操作员提供合适的纠 错手段。
第4章 总体设计
M1 块间联系 M2 块间联系 M4 M5 ( a ) 块间联系 M3 块间联系 M6 M4 M2
M1
M3 M5 M6
( b ) 块内联系
图4.1 块间联系与块内联系
第4章 总体设计
SD方法的目标是使块间联系尽量小,块内联系尽量大。 事实上,块间联系和块内联系是同一件事的两个方面。程序中 各组成成分间是有联系的,如果将密切相关的成分分散在各个 模块中,就会造成很高的块间联系;反之,如果密切相关的一 些成分组织在同一模块中,块内联系高了,则块间联系势必也 就少了。 3.描述方式 . SD方法使用的描述方式是结构图(Structure Chart),它描述 了程序的模块结构,并反映了块间联系和块内联系等特性。 结构图中的主要成分有:
第4章 总体设计
பைடு நூலகம்
Main
Get a valid X X Get an X OK Validate
Compute
Store
图4.2 使用Parnas方法的程序结构图
第4章 总体设计
这个方案的缺点是:如果将来栈的具体结构需作修改(如深 度增加),这10个模块都必须作相应的修改。 另一个设计方案是根据信息隐蔽原则,先构造两个模块 Push和Pop, 它们分别负责对栈进行存取操作,10个模块通过 调用Push和Pop实现栈操作(如图4.3(b)所示),此时,栈的具体 结构是隐含在Push和Pop两个模块内部的,其他10个模块完全 不了解这些细节,“栈”对它们来说是一个“抽象”的数据结 构。这个方案的优点是:如果将来需要修改栈的具体结构,只 需改动Push和Pop两个模块就够了,其余10个模块完全不受影 响。
第4章 总体设计
2.模块设计的主要任务 . 模块设计的任务是把一个较大的软件系统分解成许多较小 的具有特定功能的模块,由它们共同完成软件系统的整体功能。 具体来说,就是: 第一,将软件系统划分成模块; 第二,决定各个模块的功能; 第三,决定模块间的调用关系; 第四,决定模块间的界面。 所以,模块设计的主要工作是完成模块分解,确定软件系 统中模块的层次结构。
第4章 总体设计
4.3 Parnas 方 法
Parnas认为软件设计对软件质量有着决定性的影响,又因 为模块设计是确定模块的界面,一个界面往往影响着多个模块, 所以设计中的缺陷影响很大,纠正设计错误所付出的代价也很 大,因而设计时应该特别予以重视。 正因为如此,Parnas主张设计时应预先估计到整个生命期 可能发生的种种情况,以便事先采取相应的措施来提高软件的 可靠性和可维护性。 1.提高可靠性的技术──防护性检查 .提高可靠性的技术 防护性检查 复杂的软件结构容易隐含错误,尤其是在将来修改时更易 造成错误,所以软件结构对可靠性影响很大。
第4章 总体设计
第4章 总体设计 章
4.1 模块化设计方法 4.2 结构化设计 结构化设计(SD)方法 方法 4.3 Parnas方法 方法 4.4 Jackson方法 方法 4.5 总体设计的其他工作 4.6 详细设计 4.7 编程 返回主目录
第4章 总体设计
第4章 总 体 设 计
4.1 模块化设计方法
第4章 总体设计
相关文档
最新文档