第四章软件设计基础_第1页
第四章软件设计基础_第2页
第四章软件设计基础_第3页
第四章软件设计基础_第4页
第四章软件设计基础_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第四章软件设计基础 第四章第四章 软件设计基础软件设计基础 第四章软件设计基础 n软件设计的基本目的就是回答软件设计的基本目的就是回答“系统应该如何系统应该如何 实现?实现?”这个问题。这个问题。 n软件设计的任务,就是把分析阶段产生的软件软件设计的任务,就是把分析阶段产生的软件 需求规格说明转换为用适当手段表示的软件设需求规格说明转换为用适当手段表示的软件设 计,并形成软件设计文档。计,并形成软件设计文档。 n软件设计方法学缺少那些更为经典的工程设计软件设计方法学缺少那些更为经典的工程设计 学科所具有的深度、灵活性和定量性。学科所具有的深度、灵活性和定量性。 第四章软件设计基础 4.1软件设

2、计的目标和任务软件设计的目标和任务 1. 软件设计的目标软件设计的目标 n软件设计一般都包括软件设计一般都包括 n数据设计数据设计 n体系结构设计体系结构设计 n接口设计接口设计 n过程设计过程设计(或称构件级设计或称构件级设计) n软件设计过程最终目标是产生一个设计规约,软件设计过程最终目标是产生一个设计规约, 该规约包括描述数据、体系结构、接口和构件该规约包括描述数据、体系结构、接口和构件 的设计模型。的设计模型。 第四章软件设计基础 数据词典数据词典 数数 据据 流流 图图 实实 体体 关关 系系 图图 状态转换图状态转换图 加加工 工 规规 格格 说说 明明 控控 制制规 规 格格说

3、说明 明 数数 据据 对对 象象 描描 述述 过程设计过程设计 接口设计接口设计 体系结构设计体系结构设计 数据设计数据设计 第四章软件设计基础 软件设计的目标和任务软件设计的目标和任务 n体系结构设计定义软件主要结构性元素之间的关系。体系体系结构设计定义软件主要结构性元素之间的关系。体系 结构设计表示可以从系统规约、分析模型以及分析模型中结构设计表示可以从系统规约、分析模型以及分析模型中 所定义子系统的交互导出。所定义子系统的交互导出。 n数据设计将分析阶段创建的信息模型转变成实现软件所需数据设计将分析阶段创建的信息模型转变成实现软件所需 的数据结构。的数据结构。 n接口设计描述软件内部模块

4、之间以及软件与人之间是如何接口设计描述软件内部模块之间以及软件与人之间是如何 通信的。数据和控制流图提供了接口设计所需的信息。通信的。数据和控制流图提供了接口设计所需的信息。 n构件级设计将软件体系结构的结构性元素转变成对软件构构件级设计将软件体系结构的结构性元素转变成对软件构 件的过程性描述,即描述软件构件的详细内部设计细节。件的过程性描述,即描述软件构件的详细内部设计细节。 第四章软件设计基础 软件设计的任务 从工程管理的角度来看,传统的软件设计任务通从工程管理的角度来看,传统的软件设计任务通 常分两个阶段完成常分两个阶段完成 。 n第一个阶段是概要设计,即总体设计。第一个阶段是概要设计,

5、即总体设计。 n第二阶段是详细设计阶段,即过程设计。第二阶段是详细设计阶段,即过程设计。 第四章软件设计基础 4.2软件设计基本概念软件设计基本概念 n在过去四十年中发展起来一套基本的软件设计在过去四十年中发展起来一套基本的软件设计 概念,它们有助于解决以下问题:概念,它们有助于解决以下问题: n能用什么标准将软件划分为单个构件?能用什么标准将软件划分为单个构件? n如何将功能或数据结构与软件概念性表示分离如何将功能或数据结构与软件概念性表示分离 开?开? n是否存在定义软件设计技术质量的统一标准?是否存在定义软件设计技术质量的统一标准? n软件设计的基本概念为达到软件设计的基本概念为达到“使

6、程序正确使程序正确”这这 一目标提供了必要的框架。一目标提供了必要的框架。 第四章软件设计基础 4.2软件设计基本概念软件设计基本概念 n4.2.1 模块与模块化 n1模块模块 n模块是指这样一组程序语句,它包括输入、输模块是指这样一组程序语句,它包括输入、输 出和逻辑处理功能、内部信息及其运行计划。出和逻辑处理功能、内部信息及其运行计划。 n模块指可单独命名且可通过名字访问的过程函模块指可单独命名且可通过名字访问的过程函 数、子程序或宏调用。数、子程序或宏调用。 第四章软件设计基础 4.2软件设计基本概念软件设计基本概念 n模块具有以下几种特征:模块具有以下几种特征: n接口,模块的输入输出

7、;接口,模块的输入输出; n功能,指模块实现什么功能,有什么作用;功能,指模块实现什么功能,有什么作用; n逻辑,描述模块内部如何实现需求及所需数据;逻辑,描述模块内部如何实现需求及所需数据; n状态,该模块的运行环境,模块间调用与被调用状态,该模块的运行环境,模块间调用与被调用 关系。关系。 第四章软件设计基础 4.2软件设计基本概念软件设计基本概念 n2模块化模块化 n模块化就是将程序划分成若干个独立的模块,模块化就是将程序划分成若干个独立的模块, 每个模块完成一个特定子功能,每个模块既是每个模块完成一个特定子功能,每个模块既是 相对独立的,又是相互联系的,它们共同完成相对独立的,又是相互

8、联系的,它们共同完成 系统指定的各项功能。系统指定的各项功能。 n模块化的目的是为了降低软件的复杂性。模块化的目的是为了降低软件的复杂性。 第四章软件设计基础 第四章软件设计基础 4.2软件设计基本概念软件设计基本概念 n图图4.2 软件设计成本与模块数量关系图软件设计成本与模块数量关系图 最 小 成 本 区域 M 软 件 总 成本 模块数 量 成 本 或 工 作量 集 成 成 本 成 本 / 模 块 第四章软件设计基础 4.2软件设计基本概念软件设计基本概念 n4.2.2 抽象与逐步求精 n1抽象抽象 n抽象是指从一些事物中抽取其本质的共同的特抽象是指从一些事物中抽取其本质的共同的特 性,而

9、忽略其非本质细节的差异。性,而忽略其非本质细节的差异。 n在抽象的最高层次使用问题环境的语言,在较在抽象的最高层次使用问题环境的语言,在较 低层次上使用更过程化的方法,把面向问题的低层次上使用更过程化的方法,把面向问题的 术语和面向实现的术语结合起来描述问题的解术语和面向实现的术语结合起来描述问题的解 法。法。 第四章软件设计基础 逐步求精 n抽象化的实现方法:自顶向下,逐步求精。抽象化的实现方法:自顶向下,逐步求精。 n逐步求精是一种先总体、后局部的思维原则,也就是逐步求精是一种先总体、后局部的思维原则,也就是 一种逐层分解、分而治之的方法。一种逐层分解、分而治之的方法。 n从在高抽象级别定

10、义的功能陈述(或信息描述)开始,从在高抽象级别定义的功能陈述(或信息描述)开始, 该陈述概念性地描述了功能或信息,但没有提供有关该陈述概念性地描述了功能或信息,但没有提供有关 功能内部工作的情况或信息的内部结构。求精是设计功能内部工作的情况或信息的内部结构。求精是设计 者详细描述的原始声明,在后续求精(详细描述)活者详细描述的原始声明,在后续求精(详细描述)活 动中,提供越来越多的细节。动中,提供越来越多的细节。 第四章软件设计基础 4.2软件设计基本概念软件设计基本概念 n4.2.3 信息隐藏信息隐藏 n信息隐蔽是在设计和确定模块时,使得一个模块内包信息隐蔽是在设计和确定模块时,使得一个模块

11、内包 含的信息(过程和数据)对于不需要这些信息的模块含的信息(过程和数据)对于不需要这些信息的模块 来说,是不能访问的。来说,是不能访问的。 n应用这一思想,在软件开发中先后出现了:应用这一思想,在软件开发中先后出现了: n“数据封装数据封装”(Data Encapsulation,指在一个模块,指在一个模块 中包含一个数据结构和在此数据结构上执行的操作);中包含一个数据结构和在此数据结构上执行的操作); n“抽象数据类型抽象数据类型”(Abstract Datatype,指一种数,指一种数 据类型,其中可包含在该类型实例上执行的操作)等据类型,其中可包含在该类型实例上执行的操作)等 设计方法

12、;设计方法; n在在OOD中进一步发展为具有中进一步发展为具有“继承继承”特性的特性的“类类” (可以看成是一个支持继承的抽象数据类型)和(可以看成是一个支持继承的抽象数据类型)和“对对 象象”。 第四章软件设计基础 4.2软件设计基本概念软件设计基本概念 n4.2.4 模块独立性模块独立性 n模块独立性(模块独立性(Module Independence)概括了把软)概括了把软 件划分为模块时要遵守的准则,也是判断模块构造是件划分为模块时要遵守的准则,也是判断模块构造是 不是合理的标准,同时也是模块化和抽象及信息隐藏不是合理的标准,同时也是模块化和抽象及信息隐藏 概念的直接产物。概念的直接产

13、物。 n坚持模块的独立性,一般认为是获得良好设计的关键。坚持模块的独立性,一般认为是获得良好设计的关键。 n换句话说,希望这样设计软件结构,使得每个模块只换句话说,希望这样设计软件结构,使得每个模块只 完成系统要求的一个相对独立的特定子功能,并且和完成系统要求的一个相对独立的特定子功能,并且和 其他模块之间的关系很简单。其他模块之间的关系很简单。 第四章软件设计基础 4.2软件设计基本概念软件设计基本概念 n为什么模块的独立性很重要呢?为什么模块的独立性很重要呢? n第一,有效的模块化(即具有独立的模块)软件第一,有效的模块化(即具有独立的模块)软件 比较容易开发出来。比较容易开发出来。 n第

14、二,独立模块比较容易测试和维护。第二,独立模块比较容易测试和维护。 n独立性可以从两个方面来度量,即模块本身的内独立性可以从两个方面来度量,即模块本身的内 聚(聚(Cohesion)和模块之间的耦合)和模块之间的耦合 (Coupling)。)。 第四章软件设计基础 4.2软件设计基本概念软件设计基本概念 n1内聚内聚 n这是从功能角度对模块内部聚合能力的量度。按照由这是从功能角度对模块内部聚合能力的量度。按照由 弱到强的顺序,弱到强的顺序,Myers把模块内部聚合能力分为把模块内部聚合能力分为7类。类。 n内聚是模块功能强度内聚是模块功能强度(一个模块内部各个元素彼此结合一个模块内部各个元素彼

15、此结合 的紧密程度的紧密程度)的度量。的度量。 偶然内聚 第四章软件设计基础 4.2软件设计基本概念软件设计基本概念 n偶然性内聚偶然性内聚 n块内各组成成分在功能上是互不相关的。块内各组成成分在功能上是互不相关的。 XYZ W A=B+C GET CARD PUT OUTPUT IF I=5 THEN E=0 第四章软件设计基础 4.2软件设计基本概念软件设计基本概念 n逻辑性内聚逻辑性内聚 n这种模块把几种相关、相似功能组合在一起,这种模块把几种相关、相似功能组合在一起, 每次被调用时,由传递给模块的参数来确定该每次被调用时,由传递给模块的参数来确定该 模块应完成哪一种功能。模块应完成哪一

16、种功能。 XYZW ABCD XYZW ABCD 第四章软件设计基础 4.2软件设计基本概念软件设计基本概念 n时间性内聚时间性内聚 n如果一个模块所包含的任务必须在同一如果一个模块所包含的任务必须在同一“时间时间” 内完成,则这个模块的块内联系称为时间性内内完成,则这个模块的块内联系称为时间性内 聚。聚。 紧急意外故障处理 l关闭文件 l报警 l保留现场 . . . 第四章软件设计基础 4.2软件设计基本概念软件设计基本概念 n过程化内聚过程化内聚 n当一个模块中包含的一组任务必需按照某一特当一个模块中包含的一组任务必需按照某一特 定的次序执行时,就称为过程性内聚模块。定的次序执行时,就称为

17、过程性内聚模块。 建立方程组系数矩阵 高斯消去法 回 代 第四章软件设计基础 4.2软件设计基本概念软件设计基本概念 n通信性内聚通信性内聚 n模块内部的各个成分都使用同一种输入数据,模块内部的各个成分都使用同一种输入数据, 或者产生同一个输出数据。它们靠公用数据而或者产生同一个输出数据。它们靠公用数据而 联系在一起,故称为通信性内聚。联系在一起,故称为通信性内聚。 开领 书单 登记 售书 删除 修改 发票 领书单 售书登记表 文件 第四章软件设计基础 4.2软件设计基本概念软件设计基本概念 n顺序性内聚顺序性内聚 n如果一个模块内的处理元素和同一个功能密切如果一个模块内的处理元素和同一个功能

18、密切 相关,而且这些处理必须顺序执行,通常一个相关,而且这些处理必须顺序执行,通常一个 处理元素的输出数据作为下一个处理元素的输处理元素的输出数据作为下一个处理元素的输 入数据,则成为顺序性内聚。入数据,则成为顺序性内聚。 A l输入系数 l求解 l打印方程解. 第四章软件设计基础 4.2软件设计基本概念软件设计基本概念 n功能性内聚功能性内聚 n如果一个模块包括仅为完成某一具体任务所必如果一个模块包括仅为完成某一具体任务所必 需的所有成分,或者说模块中所有成分结合起需的所有成分,或者说模块中所有成分结合起 来是为了完成一个具体的任务,此模块则为功来是为了完成一个具体的任务,此模块则为功 能强

19、模块。能强模块。 第四章软件设计基础 4.2软件设计基本概念软件设计基本概念 n2耦合耦合 n耦合是对软件内部模块之间相互联系的度量。耦合是对软件内部模块之间相互联系的度量。 按照按照Myers的划分,也归纳为的划分,也归纳为7类。类。 第四章软件设计基础 4.2软件设计基本概念软件设计基本概念 n非直接耦合非直接耦合 n若两个模块没有直接关系,它们之间的联系完若两个模块没有直接关系,它们之间的联系完 全是通过主程序的控制和调用来实现的,便称全是通过主程序的控制和调用来实现的,便称 这两个模块为非直接耦合,这样独立性最强。这两个模块为非直接耦合,这样独立性最强。 A C B D 无块间联系 第

20、四章软件设计基础 4.2软件设计基本概念软件设计基本概念 n数据耦合数据耦合 n若一个模块访问另一个模块,且被访问模块的若一个模块访问另一个模块,且被访问模块的 输入和输出都是数据项参数,则称这两个模块输入和输出都是数据项参数,则称这两个模块 之间的联系为数据耦合。之间的联系为数据耦合。 通过变元传递 数据 A B 第四章软件设计基础 n特征耦合特征耦合 n若两个以上的模块都需要其余某一数据结构的子结构时,若两个以上的模块都需要其余某一数据结构的子结构时, 不使用其余全局变量的方式而是用记录传递的方式,这不使用其余全局变量的方式而是用记录传递的方式,这 样的耦合称为特征耦合。样的耦合称为特征耦

21、合。 n模块模块1与模块与模块2为同级模块,相互之间没有信息传递,属为同级模块,相互之间没有信息传递,属 于非直接耦合。模块于非直接耦合。模块3、4都是模块都是模块1的下属模块。模块的下属模块。模块1 调用它们时,可通过参数表与它们交换数据。如果交换调用它们时,可通过参数表与它们交换数据。如果交换 的都是简单变量,便构成数据耦合(如模块的都是简单变量,便构成数据耦合(如模块1、3之间);之间); 如果交换的是数据结构,便构成特征耦合(如模块如果交换的是数据结构,便构成特征耦合(如模块1与模与模 块块4之间)。之间)。 模块1模块2 模块3模块4 第四章软件设计基础 n房租水电房租水电=房租房租

22、+用水量用水量+用电量用电量 第四章软件设计基础 4.2软件设计基本概念软件设计基本概念 n控制耦合控制耦合 n控制耦合是中等强度的控制耦合是中等强度的 耦合。此时在模块间传耦合。此时在模块间传 递的信息不是一般的数递的信息不是一般的数 据,而是用作控制信号据,而是用作控制信号 的开关值或标志量的开关值或标志量 (Flag)。)。 第四章软件设计基础 4.2软件设计基本概念软件设计基本概念 n外部耦合外部耦合 n若允许一组模块访问同一个全局变量,可称它若允许一组模块访问同一个全局变量,可称它 们为外部耦合。们为外部耦合。 BA 有名公共区 第四章软件设计基础 4.2软件设计基本概念软件设计基本

23、概念 n公共耦合公共耦合 n若允许一级模块访问同一个全局性数据结构,若允许一级模块访问同一个全局性数据结构, 则称之为公共耦合。则称之为公共耦合。 第四章软件设计基础 n内容耦合内容耦合 n最强的一类耦合称为内容耦合。最强的一类耦合称为内容耦合。 n如果发生下列情形,两个模块之间就发生了内容耦合如果发生下列情形,两个模块之间就发生了内容耦合 (1) 一个模块直接访问另一个模块的内部数据一个模块直接访问另一个模块的内部数据; (2) 一个模块不通过正常入口转到另一模块内部一个模块不通过正常入口转到另一模块内部; (3) 两个模块有一部分程序代码重迭两个模块有一部分程序代码重迭(只可能出现在只可能

24、出现在 汇编语言中汇编语言中); (4) 一个模块有多个入口。一个模块有多个入口。 第四章软件设计基础 nGoto A 第四章软件设计基础 第四章软件设计基础 第四章软件设计基础 第四章软件设计基础 第四章软件设计基础 第四章软件设计基础 第四章软件设计基础 第四章软件设计基础 4.3软件设计原则软件设计原则 Davis提出了一系列软件设计的原则,下面的提出了一系列软件设计的原则,下面的 内容是在这些原则上的总结和扩充:内容是在这些原则上的总结和扩充: n设计过程应该能够预测和评估。一名好的设计设计过程应该能够预测和评估。一名好的设计 者应该考虑以往开发的经验和数据,并根据问者应该考虑以往开发

25、的经验和数据,并根据问 题的要求、可用的资源和前文提到的设计概念题的要求、可用的资源和前文提到的设计概念 来做出判断。来做出判断。 n设计对于分析模型应该是可跟踪的。因为设计设计对于分析模型应该是可跟踪的。因为设计 模型的单独一个元素经常会跟踪到多个需求上,模型的单独一个元素经常会跟踪到多个需求上, 所以对设计模型进行跟踪是必要的。所以对设计模型进行跟踪是必要的。 第四章软件设计基础 4.3软件设计原则软件设计原则 n设计应该重视资源重用。系统是使用一系列设计应该重视资源重用。系统是使用一系列 设计模式构造的,很多模式很可能在以前就设计模式构造的,很多模式很可能在以前就 遇到过。这些模式应该能

26、够为新的软件设计遇到过。这些模式应该能够为新的软件设计 提供参考和甚至重复使用。设计时间应该投提供参考和甚至重复使用。设计时间应该投 入到表示真正的新思想和集成那些已有模式入到表示真正的新思想和集成那些已有模式 上面去。上面去。 n设计应该使最终软件尽可能和现实世界中问设计应该使最终软件尽可能和现实世界中问 题的题的“相似相似”,也就是说,软件设计的结构,也就是说,软件设计的结构 应该(尽可能)模拟问题域的结构。应该(尽可能)模拟问题域的结构。 第四章软件设计基础 4.3软件设计原则软件设计原则 n设计应该表现出一致性和集成性。开发软件必然会是设计应该表现出一致性和集成性。开发软件必然会是 一

27、个集体活动,会有很多合作者一起进行软件开发。一个集体活动,会有很多合作者一起进行软件开发。 我们要尽可能使一项设计整体上看上去像是一个人完我们要尽可能使一项设计整体上看上去像是一个人完 成的,那么这就要求它是一致的。在设计工作开始之成的,那么这就要求它是一致的。在设计工作开始之 前,设计小组应该定义风格和格式的规则,如果注意前,设计小组应该定义风格和格式的规则,如果注意 了定义设计构件之间的接口,那么,设计就是和谐的。了定义设计构件之间的接口,那么,设计就是和谐的。 n设计应该适应扩展和变更。如果不考虑这一点,那么设计应该适应扩展和变更。如果不考虑这一点,那么 软件设计以及实现的软件就没有修改

28、和适应发展而进软件设计以及实现的软件就没有修改和适应发展而进 行扩展的机会。行扩展的机会。 第四章软件设计基础 4.3软件设计原则软件设计原则 n设计应该考虑软件的容错性和处理错误、异常的能力。设计应该考虑软件的容错性和处理错误、异常的能力。 设计应该被构造以使得即使遇到异常的数据、事件或设计应该被构造以使得即使遇到异常的数据、事件或 操作条件时也能够平滑、轻巧地降级。设计良好的计操作条件时也能够平滑、轻巧地降级。设计良好的计 算机程序应该从不算机程序应该从不“彻底崩溃彻底崩溃”,它应该设计为适应,它应该设计为适应 异常的条件,并且即使它必须中止处理时,也要采用异常的条件,并且即使它必须中止处

29、理时,也要采用 优雅的方式。优雅的方式。 n设计不是编码,编码也不是设计。即使在为程序构件设计不是编码,编码也不是设计。即使在为程序构件 构造详细的过程性设计时,设计模型的抽象级别也比构造详细的过程性设计时,设计模型的抽象级别也比 源代码更高,在编码级别上做出的唯一设计决策是描源代码更高,在编码级别上做出的唯一设计决策是描 述能使过程性设计能被编码实现。述能使过程性设计能被编码实现。 第四章软件设计基础 4.3软件设计原则软件设计原则 n在创建设计时就应该能够评估质量,而不是在创建设计时就应该能够评估质量,而不是 在事情完成之后。有许多设计概念和设计方在事情完成之后。有许多设计概念和设计方 法

30、可以帮助设计者评估质量。法可以帮助设计者评估质量。 n应该评审设计以减少概念性(语义性)错误。应该评审设计以减少概念性(语义性)错误。 有时人们在评审设计时,倾向于注重细节,有时人们在评审设计时,倾向于注重细节, 只见树木不见森林。在关注设计模型的语法只见树木不见森林。在关注设计模型的语法 之前,设计小组应该确保已经检查过设计的之前,设计小组应该确保已经检查过设计的 主要概念性元素(疏忽、歧义性、不一致主要概念性元素(疏忽、歧义性、不一致 性)。性)。 第四章软件设计基础 4.4软件程序结构的启发式设计准软件程序结构的启发式设计准 则与优化则与优化 n1改进软件结构,降低耦合并提高内聚,以改进

31、软件结构,降低耦合并提高内聚,以 提高模块独立性提高模块独立性 n设计出软件的初步结构以后,应该审查分析这设计出软件的初步结构以后,应该审查分析这 个结构,通过对模块进行分割、合并和变动调个结构,通过对模块进行分割、合并和变动调 用关系,力求降低耦合、提高内聚,简化模块用关系,力求降低耦合、提高内聚,简化模块 接口,以及少用全局性数据和控制型信息等。接口,以及少用全局性数据和控制型信息等。 第四章软件设计基础 4.4软件程序结构的启发式设计准则与优化 n2 2模块规模应该适中模块规模应该适中 n经验表明,一个模块的规模不应过大,模块的经验表明,一个模块的规模不应过大,模块的 总行数应控制在总行

32、数应控制在10到到100行的范围内,最好为行的范围内,最好为 30至至60行,能在一张打印纸内容纳下,这样行,能在一张打印纸内容纳下,这样 理解和阅读都较方便。当一个模块包含的语句理解和阅读都较方便。当一个模块包含的语句 数超过数超过30以后,模块的可理解程度迅速下降。以后,模块的可理解程度迅速下降。 第四章软件设计基础 4.4软件程序结构的启发式设计准则与优化 n3 3保持适当的扇入和扇出保持适当的扇入和扇出 n一个模块的扇入数表明有多少个上级模块直接调用它一个模块的扇入数表明有多少个上级模块直接调用它 扇入数越大则共享该模块的上级模块数目越多,能够扇入数越大则共享该模块的上级模块数目越多,

33、能够 增加模块的利用率,但是,不能违背模块独立原理单增加模块的利用率,但是,不能违背模块独立原理单 纯追求高扇入数。纯追求高扇入数。 n扇出数衡量的是被一个模块直接控制的其他模块的数扇出数衡量的是被一个模块直接控制的其他模块的数 量,扇出数过大意味着模块过分复杂,需要控制和协量,扇出数过大意味着模块过分复杂,需要控制和协 调过多的下级模块;扇出数过小也不好。调过多的下级模块;扇出数过小也不好。 n通常扇出数通常扇出数34为宜,最好不超过为宜,最好不超过57。 第四章软件设计基础 4.4软件程序结构的启发式设计准则与优化 n4 4模块的作用域应该在控制域内模块的作用域应该在控制域内 n一个模块的

34、控制域,是模块本身及其所有从属一个模块的控制域,是模块本身及其所有从属 以及最终的从属模块(即所有可供它调用的下以及最终的从属模块(即所有可供它调用的下 级模块)。级模块)。 n一个模块的作用域,是受这个模块中决策影响一个模块的作用域,是受这个模块中决策影响 的其他模块。只要模块中含有一些依赖于这个的其他模块。只要模块中含有一些依赖于这个 判定的操作,这个模块就在这个判定的作用范判定的操作,这个模块就在这个判定的作用范 围之内。围之内。 第四章软件设计基础 4.4软件程序结构的启发式设计准则与优化 n图图4.23 判定位置违反了作用域判定位置违反了作用域/控制域原则控制域原则 TOP XY A

35、B B1 B2 第四章软件设计基础 4.4软件程序结构的启发式设计准则与优化 n图图4.24 满足作用域满足作用域/控制域规则的控制域规则的3种方案种方案 Top XY AB B1B2 Top XY AB B1B2 Top X Y B AB1B2 第四章软件设计基础 4.4软件程序结构的启发式设计准则与优化 n5. 5.降低模块接口的复杂程度冗余并提高一致性降低模块接口的复杂程度冗余并提高一致性。 n模块接口复杂性是软件出现错误的首要原因,接口应该设计成简模块接口复杂性是软件出现错误的首要原因,接口应该设计成简 单地传递信息并且应该同模块的功能保持一致。单地传递信息并且应该同模块的功能保持一致

36、。 例如,一个求一元二次方程的根的模块定义为:例如,一个求一元二次方程的根的模块定义为: nQUAD_ROOT(TBL,X) 其中数组其中数组TBL表示方程中的系数,数组表示方程中的系数,数组X回送求得的根。这种传递回送求得的根。这种传递 信息的方式不便于理解,容易产生错误。可以改为:信息的方式不便于理解,容易产生错误。可以改为: nQUAD_ROOT(A,B,C,ROOT1,ROOT2) 其中其中A,B,C表示方程的系数,表示方程的系数,ROOT1,ROOT2是算出的根。是算出的根。 这样的接口既简单,又与模块这样的接口既简单,又与模块QUAD_ROOT的功能一致。的功能一致。 第四章软件设

37、计基础 4.4软件程序结构的启发式设计准则与优化 n6. 6.定义功能可以预测的模块,但要避免过分限定义功能可以预测的模块,但要避免过分限 制性的模块制性的模块。 n当模块可以作为黑盒对待时就是可预测的;也当模块可以作为黑盒对待时就是可预测的;也 就是说,同样的外部数据可以在不考虑内部处就是说,同样的外部数据可以在不考虑内部处 理细节的情况下生成。理细节的情况下生成。 第四章软件设计基础 4.4软件程序结构的启发式设计准则与优化 n7. 7.设计单入口单出口的模块设计单入口单出口的模块 n这条启发式规则警告软件设计师不要使模块间这条启发式规则警告软件设计师不要使模块间 出现内容耦合。当从顶部进

38、入模块并且从底部出现内容耦合。当从顶部进入模块并且从底部 退出来时,软件是比较容易理解的,因此也是退出来时,软件是比较容易理解的,因此也是 比较容易维护的。比较容易维护的。 第四章软件设计基础 4.5设计规格说明书与评审 n4.5.1 软件设计规格说明书 n在设计阶段,设计人员要完成的文档是软件设在设计阶段,设计人员要完成的文档是软件设 计说明书,它是软件设计的最终成果,它既可计说明书,它是软件设计的最终成果,它既可 作为软件设计阶段编码人员书写源程序的依据,作为软件设计阶段编码人员书写源程序的依据, 也可作为软件测试阶段及维护阶段的一个指南。也可作为软件测试阶段及维护阶段的一个指南。 第四章软件设计基础 4.5设计规格说明书与评审 n软件设计说明书通常包括以下内容:软件设计说明书通常包括以下内容: n作用范围:描述设计工作的整体范围,其大部作用范围:描述设计工作的整体范围,其大部 分内容来自软件需求说明书。分内容来自软件需求说明书。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论