05软件设计.ppt

上传人:s****8 文档编号:67334743 上传时间:2022-12-24 格式:PPT 页数:105 大小:485.50KB
返回 下载 相关 举报
05软件设计.ppt_第1页
第1页 / 共105页
05软件设计.ppt_第2页
第2页 / 共105页
点击查看更多>>
资源描述

《05软件设计.ppt》由会员分享,可在线阅读,更多相关《05软件设计.ppt(105页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、第五章第五章 软件内部设计软件内部设计 n n在任何工程化产品或系统的开发阶段中,设计是在任何工程化产品或系统的开发阶段中,设计是第一步。它可以定义为第一步。它可以定义为“为了能够足够详细地定为了能够足够详细地定义一种设备、一个处理或一个系统,以便保证其义一种设备、一个处理或一个系统,以便保证其物理实现,而应用各种技术和原则的过程。物理实现,而应用各种技术和原则的过程。”n n设计者的目标是生成一个随后要构造的实体的一设计者的目标是生成一个随后要构造的实体的一种模型或表示。开发模型的过程综合了基于构造种模型或表示。开发模型的过程综合了基于构造类似实体的经验的直觉和判断、一系列指导模型类似实体的

2、经验的直觉和判断、一系列指导模型演化路径的原则和直观推断、一系列判断质量的演化路径的原则和直观推断、一系列判断质量的标准以及导出最终设计表示的迭代过程标准以及导出最终设计表示的迭代过程本章主要包括:本章主要包括:n n1.1.结构化设计与结构化分析的关系结构化设计与结构化分析的关系 n n2.2.设计过程设计过程n n3.3.设计原则设计原则 n n4.4.设计概念设计概念 n n5.5.有效的模块设计有效的模块设计 n n6.6.结构化设计方法结构化设计方法 n n7.7.接口设计接口设计 n n8.8.详细设计描述工具详细设计描述工具 n n9.9.编写软件设计文档编写软件设计文档 5.1

3、 结构化设计与结构化分析的关系结构化设计与结构化分析的关系n n软件设计处于软件工程过程中的技术核心位置,并且它的应用不软件设计处于软件工程过程中的技术核心位置,并且它的应用不考虑考虑所使用的软件过程模型。软件设计开始于对软件需求进行分析所使用的软件过程模型。软件设计开始于对软件需求进行分析和规约之后,它是构造和验证软件所需的三项技术活动和规约之后,它是构造和验证软件所需的三项技术活动设计、设计、代码生成和测试代码生成和测试之一,每一项活动都最终导致经过验证的计之一,每一项活动都最终导致经过验证的计算机软件的方式变换信息。算机软件的方式变换信息。n n分析模型分析模型(第第3 3章章)的每一个

4、元素均提供了创建设计模型所需的信的每一个元素均提供了创建设计模型所需的信息。软件设计必须依据对软件的需求来进行,结构化分析的结息。软件设计必须依据对软件的需求来进行,结构化分析的结果为结构化设计提供了最基本的输入信息。果为结构化设计提供了最基本的输入信息。n n分析模型的每个元素都提供了创建设计模型时所需要的信息。分析模型的每个元素都提供了创建设计模型时所需要的信息。图图5-15-1描绘了软件设计过程中的信息流。描绘了软件设计过程中的信息流。n n由数据模型、功能模型和行为模型表示的软件需求被传送给软由数据模型、功能模型和行为模型表示的软件需求被传送给软件设计者,他们使用适当的设计方法完成数据

5、设计、体系结构件设计者,他们使用适当的设计方法完成数据设计、体系结构设计、接口设计和过程设计。设计、接口设计和过程设计。n n在软件设计期间我们所做出的决策,将最终决定软件开发能否在软件设计期间我们所做出的决策,将最终决定软件开发能否成功,更重要的是,这些设计决策将决定软件维护的难易程度。成功,更重要的是,这些设计决策将决定软件维护的难易程度。n n数据设计将分析时创建的信息域模型变换成实现软件所需的数数据设计将分析时创建的信息域模型变换成实现软件所需的数据结构。在实体据结构。在实体关系图中定义的数据对象和关系以及数据字关系图中定义的数据对象和关系以及数据字典中描述的详细数据内容为数据设计活动

6、奠定了基础。典中描述的详细数据内容为数据设计活动奠定了基础。n n 结构设计定义了程序的主要结构元素之间的关系。这种设计表示结构设计定义了程序的主要结构元素之间的关系。这种设计表示计算机程序的模块框架计算机程序的模块框架可以从分析模型和分析模型中定义的子系可以从分析模型和分析模型中定义的子系统的交互导出。统的交互导出。n n 接口设计描述了软件内部、软件和协作系统之间以及软件同人之接口设计描述了软件内部、软件和协作系统之间以及软件同人之间如何通信。一个接口意味着信息流间如何通信。一个接口意味着信息流(如数据和如数据和/或控制流或控制流),因此,因此,数据和控制流图数据和控制流图提供了接口设计所

7、需的信息。提供了接口设计所需的信息。n n 过程设计将程序体系结构的结构元素变换为对软件构件的过程设计将程序体系结构的结构元素变换为对软件构件的过程性描述。过程性描述。n n 我们在设计时作出的决策最终将会影响软件构造是否成功,我们在设计时作出的决策最终将会影响软件构造是否成功,更重要的是会决定,软件维护的难易程度,但是,为什么设计更重要的是会决定,软件维护的难易程度,但是,为什么设计如此重要呢?如此重要呢?n n 软件设计的重要性可以用一个词来表达软件设计的重要性可以用一个词来表达质量。设计是质量。设计是在软件开发中形成质量的地方,设计为我们提供了可以用于质在软件开发中形成质量的地方,设计为

8、我们提供了可以用于质量评估的软件表示,设计是我们能将用户需求准确地转化为完量评估的软件表示,设计是我们能将用户需求准确地转化为完整的软件产品或系统的唯一方法。软件设计作为所有软件工程整的软件产品或系统的唯一方法。软件设计作为所有软件工程和软件维护步骤的基础,没有设计,我们将要构造出不稳定系和软件维护步骤的基础,没有设计,我们将要构造出不稳定系统的风险统的风险稍作改动就会失败;难于测试的系统;直到软件工稍作改动就会失败;难于测试的系统;直到软件工程过程后期才能评估系统的质量,到那时时间已不够并且已经程过程后期才能评估系统的质量,到那时时间已不够并且已经花销很多经费。花销很多经费。PSPEC CF

9、D DFDE-R DD CSPEC数据对象描述过程设计 接口设计体系结构设计数据设计5.2 设计过程设计过程n软件设计是一个迭代的过程,通过它需求被变换为用于构造软件的“蓝图”。初始时,蓝图描述了软件的整体视图,也就是说,设计在高的抽象层次上表示在该层次可以直接追踪到特定数据、功能和行为需求。随着数据迭代的开始,后续的精化将导致更低抽象级别的设计表示,这些表示仍然能够追踪到需求,但是连接更微妙了。n n5.2.1 5.2.1 设计和软件质量设计和软件质量设计和软件质量设计和软件质量n在整个设计过程中,演化的设计的质量可以通过在一系列正式技术复审或设计追踪审查来评估。良好设计演化具有以下三个特征

10、:n n(1 1)设计必须实现所有包含在分析模型中的明显需求,并且必)设计必须实现所有包含在分析模型中的明显需求,并且必须满足客户希望的所有隐式需求。须满足客户希望的所有隐式需求。n n(2 2)对于那些生成代码和那些进行测试并随后维护软件的人而)对于那些生成代码和那些进行测试并随后维护软件的人而言,设计必须是可读的,可理解的。言,设计必须是可读的,可理解的。n n(3 3)设计应该提供软件的完整面貌,这与从某个实现视角看到)设计应该提供软件的完整面貌,这与从某个实现视角看到的数据、功能、和行为域有关。的数据、功能、和行为域有关。n n为评价一项设计表示的质量,我们必须建立良好的设计技术标为评

11、价一项设计表示的质量,我们必须建立良好的设计技术标准,在本章的后面部分,我们将详细讨论设计质量标准,现在,准,在本章的后面部分,我们将详细讨论设计质量标准,现在,我们给出下面的指南:我们给出下面的指南:n n(1 1)设计应该展示一种层次性组织,从而使得可以有指导性地)设计应该展示一种层次性组织,从而使得可以有指导性地使用软件元素间的控制。使用软件元素间的控制。n n(2 2)设计应该模块化,也就是说软件应该逻辑地划分成完成特)设计应该模块化,也就是说软件应该逻辑地划分成完成特定功能和子功能的构件。定功能和子功能的构件。n n(3 3)设计应该既包含数据抽象,也包含过程抽象。)设计应该既包含数

12、据抽象,也包含过程抽象。n n(4 4)设计应该导出具有独立功能特征的模块)设计应该导出具有独立功能特征的模块(例如,子例程或例如,子例程或过程过程)。n n(5 5)设计应该导出降低模块和外部环境间复杂连接的接口。)设计应该导出降低模块和外部环境间复杂连接的接口。n n(6 6)设计应该通过使用由软件需求分析过程中获得的信息导出)设计应该通过使用由软件需求分析过程中获得的信息导出要驱动的可重复的方法。要驱动的可重复的方法。n n5.2.2 5.2.2 软件设计的演化软件设计的演化软件设计的演化软件设计的演化n n软件设计的演化是一个历经以往三十年的连续过程。早期的设软件设计的演化是一个历经以

13、往三十年的连续过程。早期的设计工作集中在模块化程序的开发标准和自顶向下求精软件结构计工作集中在模块化程序的开发标准和自顶向下求精软件结构的方法,设计定义的过程方面发展成一种称为结构化程序设计的方法,设计定义的过程方面发展成一种称为结构化程序设计的理论,以后的工作提出了将数据流或数据结构,转化为设计的理论,以后的工作提出了将数据流或数据结构,转化为设计定义的方法。近期的设计方法和提出一种面向对象方法导出的定义的方法。近期的设计方法和提出一种面向对象方法导出的设计。设计。n n在上述工作中出现的许多设计方法,正在被整个产业界应用。在上述工作中出现的许多设计方法,正在被整个产业界应用。每一种软件设计

14、方法引入了独特的启发信息和符号体系,以及每一种软件设计方法引入了独特的启发信息和符号体系,以及有些狭隘的关于什么特性会影响设计质量的观点。然而,这些有些狭隘的关于什么特性会影响设计质量的观点。然而,这些方法都具有一些共同特性:方法都具有一些共同特性:(1)(1)一种用于将分析模型变换到设计一种用于将分析模型变换到设计表示的机制,表示的机制,(2)(2)用于表示功能性构件及其接口的符号体系,用于表示功能性构件及其接口的符号体系,(3)(3)用于求精和划分的启发信息,以及用于求精和划分的启发信息,以及(4)(4)质量评价的指南。质量评价的指南。n n不管使用的是什么设计方法,软件工程师应该在数据、

15、体系结不管使用的是什么设计方法,软件工程师应该在数据、体系结构、接口和过程设计方面应用一系列基本原则和概念。构、接口和过程设计方面应用一系列基本原则和概念。5.3 设计原则设计原则n n软件设计既是过程又是模型。设计过程是一系列迭代的步骤,软件设计既是过程又是模型。设计过程是一系列迭代的步骤,它们使设计者能够描述要构造的软件的所有侧面,然而,要注它们使设计者能够描述要构造的软件的所有侧面,然而,要注意的是,设计过程不仅仅是一本菜谱,创造性的技能、以往的意的是,设计过程不仅仅是一本菜谱,创造性的技能、以往的经验、对于什么能形成经验、对于什么能形成“良好良好”软件的感觉、以及对质量的全软件的感觉、

16、以及对质量的全部责任是设计成功的关键因素。部责任是设计成功的关键因素。n n设计模型和建筑师的房屋设计图是类似的,它首先表示出要构设计模型和建筑师的房屋设计图是类似的,它首先表示出要构造的事物的整体造的事物的整体(例如,房屋的三维表示例如,房屋的三维表示),然后逐渐精化事物,然后逐渐精化事物,以提供构造每个细节以提供构造每个细节(例如,管道布置例如,管道布置)的指南,类似地,软件的指南,类似地,软件的设计模型提供了计算机程序的一系列不同视图。的设计模型提供了计算机程序的一系列不同视图。n n基本的设计原则使软件工程师能够为设计过程导航。提出了一基本的设计原则使软件工程师能够为设计过程导航。提出

17、了一系列软件设计的原则。下面对它们作了些修改和扩充:系列软件设计的原则。下面对它们作了些修改和扩充:n n(1 1)设计过程不应该受)设计过程不应该受“隧道视野隧道视野”的限制。一名好的设计者的限制。一名好的设计者应该考虑替代的手段,根据问题的要求,可用应该考虑替代的手段,根据问题的要求,可用5.45.4节提到的设计节提到的设计概念来判断完成工作的资源。概念来判断完成工作的资源。n n(2 2)设计对于分析模型应该是可跟踪的。因为设计模型的单独)设计对于分析模型应该是可跟踪的。因为设计模型的单独一个元素经常会跟踪到多个需求上,所以对设计模型如何满足一个元素经常会跟踪到多个需求上,所以对设计模型

18、如何满足需求进行的追踪是必要的。需求进行的追踪是必要的。n n(3 3)设计不应该从头做起。系统是使用一系列设计模式构造的,)设计不应该从头做起。系统是使用一系列设计模式构造的,很多模式很可能在以前就遇到过。这些模式通常被称为可复用很多模式很可能在以前就遇到过。这些模式通常被称为可复用设计构件,应该总是作为一切都从头开始的方法的一种替代选设计构件,应该总是作为一切都从头开始的方法的一种替代选择。时间短暂而资源有限!设计时间应该投入到表示真正的新择。时间短暂而资源有限!设计时间应该投入到表示真正的新思想和集成那些已有模式上去。思想和集成那些已有模式上去。n n(4 4)设计应该缩短软件和现实世界

19、中问题的)设计应该缩短软件和现实世界中问题的“智力距离智力距离”,也,也就是说,软件设计的结构应该就是说,软件设计的结构应该(尽可能尽可能)模拟问题域的结构。模拟问题域的结构。n n(5 5)设计应该表现出一致性和集成性。如果一项设计整体上看)设计应该表现出一致性和集成性。如果一项设计整体上看上去象是一个人完成的,那它就是一致的。在设计工作开始之上去象是一个人完成的,那它就是一致的。在设计工作开始之前,设计小组应该定义风格和格式的规则,如果注意定义了设前,设计小组应该定义风格和格式的规则,如果注意定义了设计构件之间的接口,那么,设计就是集成的。计构件之间的接口,那么,设计就是集成的。n n(6

20、 6)设计应该构造以适应修改。下一节中讨论的许多概念使设)设计应该构造以适应修改。下一节中讨论的许多概念使设计能实现这项原则。计能实现这项原则。n n(7 7)设计应该构造以使得即使遇到异常的数据、事件或操作条)设计应该构造以使得即使遇到异常的数据、事件或操作条件时也能够平滑、轻巧地降级。设计良好的计算机程序应该从件时也能够平滑、轻巧地降级。设计良好的计算机程序应该从不不“彻底崩溃彻底崩溃”,它应该设计为适应异常的条件,并且即使它,它应该设计为适应异常的条件,并且即使它必须中止处理时,也要采用优雅的方式。必须中止处理时,也要采用优雅的方式。n n(8 8)设计不是编码,编码也不是设计。即使在为

21、程序构件构造)设计不是编码,编码也不是设计。即使在为程序构件构造详细的过程设计时,设计模型的抽象级别也比源代码要高,在详细的过程设计时,设计模型的抽象级别也比源代码要高,在编码级别上作出的唯一设计决策是描述能使过程性设计被编码编码级别上作出的唯一设计决策是描述能使过程性设计被编码的小的实现细节。的小的实现细节。n n(9 9)在创建设计时就应该能够评估质量,而不是在事情完成之)在创建设计时就应该能够评估质量,而不是在事情完成之后。有许多设计概念和设计方法可以帮助设计者评估质量。后。有许多设计概念和设计方法可以帮助设计者评估质量。n n(1010)应该复审设计以减少概念性)应该复审设计以减少概念

22、性(语义性语义性)错误。有时人们在错误。有时人们在复审设计中倾向于注重细节,只见树木不见森林。在关注设计复审设计中倾向于注重细节,只见树木不见森林。在关注设计模型的语法之前,设计者应该确保已经检查过设计的主要概念模型的语法之前,设计者应该确保已经检查过设计的主要概念性元素性元素(忽略、含糊性、不一致性忽略、含糊性、不一致性)。n n正确应用上述设计原则时,软件工程师创建的设计就会展现出正确应用上述设计原则时,软件工程师创建的设计就会展现出外部和内部的质量因素。外部质量因素是那些用户能轻易观察外部和内部的质量因素。外部质量因素是那些用户能轻易观察到的软件特性到的软件特性(例如,速度、可靠性、正确

23、性、可用性例如,速度、可靠性、正确性、可用性);内部;内部质量因素对软件工程师是重要的,它们能导致技术角度上的高质量因素对软件工程师是重要的,它们能导致技术角度上的高质量设计。要取得内部质量因素,设计者必须理解基本的设计质量设计。要取得内部质量因素,设计者必须理解基本的设计概念。概念。5.4 设计概念设计概念n n过去过去30 30 年中发展起来了一套基本的软件设计概念。尽管对于每年中发展起来了一套基本的软件设计概念。尽管对于每一种概念的感兴趣程度在几十年中一直变化着,但它们都经历一种概念的感兴趣程度在几十年中一直变化着,但它们都经历了时间的考验,每一种概念都为设计者提供了应用软件更加复了时间

24、的考验,每一种概念都为设计者提供了应用软件更加复杂的设计方法的基础。它们可以帮助软件工程师回答下述问题:杂的设计方法的基础。它们可以帮助软件工程师回答下述问题:n n(1 1)能使用什么标准将软件划分为单个构件?)能使用什么标准将软件划分为单个构件?n n(2 2)如何将功能或数据结构与软件的概念性表示分离开?)如何将功能或数据结构与软件的概念性表示分离开?n n(3 3)是否存在定义软件设计的技术质量的统一标准?)是否存在定义软件设计的技术质量的统一标准?n n基本的软件设计概念为基本的软件设计概念为“使程序正确使程序正确”提供了必要的框架提供了必要的框架。n n5.4.1 5.4.1 软件

25、设计的观点软件设计的观点软件设计的观点软件设计的观点n1.抽象n当我们考虑任何问题的模块化解决方案时,可以给出许多抽象级别。在最高的抽象级别中,解决方案使用问题环境的语言来进行概括性的术语描述,在低一些的抽象级别中,会有更加面向过程的倾向。为了描述解决方案,要一同使用面向问题的术语和面向实现的术语,最后,在最低的抽象级别中,用能够直接实现的方式描述解决方案。Wasserman提供了一种有用的定义:n“抽象”的心理学观念使人能够集中于某个一般性级别上的问题,而不去考虑无关的低层细节;使用抽象还能使人能用问题环境中熟悉的概念和术语工作,而不必将它们转换成一种不熟悉的结构软件工程过程中的每一个步骤都

26、是软件解决方案抽象级别上的求精。在系统工程时,软件划分为基于计算机的系统的一种元素;在软件需求分析时,使用“问题环境中熟悉的”术语来描述软件解决方案;当我们在设计过程中时,降低了抽象级别,最终生成源代码时,就到达了最低的抽象级别。n n2 2求精求精n n逐步求精是由逐步求精是由NiklausNiklaus Wirth Wirth最初提出的一种自顶向下设计策略,程序最初提出的一种自顶向下设计策略,程序的体系结构是通过过程细节的逐步层次精化开发的,层次结构通过逐的体系结构是通过过程细节的逐步层次精化开发的,层次结构通过逐步地分解功能的宏观声明,直至形成程序设计语言的语句而开发出来。步地分解功能的

27、宏观声明,直至形成程序设计语言的语句而开发出来。n nWirthWirth给出了该概念的简要定义:给出了该概念的简要定义:n n在在(求精的求精的)每一步中,给定程序的一条或几条指令被分解成更详细的每一步中,给定程序的一条或几条指令被分解成更详细的指令,这种连续的对规约的分解或求精,直至所有指令都用某种底层指令,这种连续的对规约的分解或求精,直至所有指令都用某种底层的计算机或程序设计语言表达时才中止的计算机或程序设计语言表达时才中止。当任务被精化时,数据可。当任务被精化时,数据可能也要被精化、分解或结构化,而且,并行地精化程序和数据规约是能也要被精化、分解或结构化,而且,并行地精化程序和数据规

28、约是很自然的。很自然的。n n每一步求精都蕴含了某些设计决策,对于程序员而言,注意根本性的每一步求精都蕴含了某些设计决策,对于程序员而言,注意根本性的标准标准(针对设计决策针对设计决策)和可替换的解决方案是重要的。和可替换的解决方案是重要的。Wirth Wirth 提出的程提出的程序精化过程同需求分析时所用的过程精化和划分是类似的,区别在于序精化过程同需求分析时所用的过程精化和划分是类似的,区别在于所考虑的是在实现细节级别上,而不是方法。所考虑的是在实现细节级别上,而不是方法。n n求精实际上是一个推敲的过程。我们从高抽象级别定义的功能描述求精实际上是一个推敲的过程。我们从高抽象级别定义的功能

29、描述(或信息描述或信息描述)开始,也就是说,该描述概念性地说明了功能或信息,开始,也就是说,该描述概念性地说明了功能或信息,但没有提供有关功能内部工作的情况或信息的内部结构。求精使设计但没有提供有关功能内部工作的情况或信息的内部结构。求精使设计者去推敲原始声明,并在后续的求精者去推敲原始声明,并在后续的求精(推敲推敲)活动中提供越来越多的细活动中提供越来越多的细节。节。n n抽象和求精是互补的概念,抽象使得设计者能够刻划过程和数据而同抽象和求精是互补的概念,抽象使得设计者能够刻划过程和数据而同时忽略低层细节,求精有助于设计者在数据过程中揭示低层的细节,时忽略低层细节,求精有助于设计者在数据过程

30、中揭示低层的细节,两个概念均帮助设计者在设计演化中构造出完整的设计模型。两个概念均帮助设计者在设计演化中构造出完整的设计模型。n n3 3模块化模块化n n计算机软件的模块化概念已经被采纳了将近四十年,软件体系计算机软件的模块化概念已经被采纳了将近四十年,软件体系结构体现了模块化;即软件被划分成独立命名和可独立访问的结构体现了模块化;即软件被划分成独立命名和可独立访问的被称作模块的构件,它们集成到一起满足问题需求。被称作模块的构件,它们集成到一起满足问题需求。n n有人提出有人提出“模块化是软件的单个属性,它使程序能被理性地管模块化是软件的单个属性,它使程序能被理性地管理理”。读者无法简单地掌

31、握单块集成电路式的软件。读者无法简单地掌握单块集成电路式的软件(例如,由单例如,由单一模块构成的大程序一模块构成的大程序),控制路径的数量、引用的跨度、变量的,控制路径的数量、引用的跨度、变量的数量和整体的复杂性会使对软件的理解接近于不可能。为说明数量和整体的复杂性会使对软件的理解接近于不可能。为说明这一点,考虑下面的论据,它们是基于对人解决问题的观察而这一点,考虑下面的论据,它们是基于对人解决问题的观察而提出的。提出的。n n设设C(xC(x)是描述问题是描述问题x x复杂性的函数,复杂性的函数,E(xE(x)是定义解决问题是定义解决问题x x 所需工所需工作量作量(按时间计算按时间计算)的

32、函数。对于两个问题的函数。对于两个问题p1 p1 和和p2p2,如果,如果n nC(p1)C(p1)C(p2)(5-1a)C(p2)(5-1a)n n那么那么n nE(p1)E(p1)E(p2)(5-1b)E(p2)(5-1b)n n作为普遍的情况,这个结构直观上是显然的。解决困难问题需作为普遍的情况,这个结构直观上是显然的。解决困难问题需要花费更多时间。要花费更多时间。n n通过对人解决问题的实验又发现了另一个有趣的特性。即,通过对人解决问题的实验又发现了另一个有趣的特性。即,n nC(p1C(p1p2)p2)C(p1)C(p1)C(p2)(5-2)C(p2)(5-2)n n方程式方程式(5

33、-2)(5-2)意味着意味着p1p1和和p2p2组合后的复杂性比单独考虑每个问题组合后的复杂性比单独考虑每个问题时的复杂性要大。考虑方程式时的复杂性要大。考虑方程式(5-2)(5-2)和方程式和方程式(5-1)(5-1)隐含的条件,隐含的条件,可以得出可以得出n nE(p1E(p1p2)E(p1)p2)E(p1)E(p2)(5-3)E(p2)(5-3)n n这引出了这引出了“分而治之分而治之”的结论的结论将复杂问题分解成可以管理的将复杂问题分解成可以管理的片断会更容易。不等式片断会更容易。不等式(5-3)(5-3)表达的结果对模块化和软件有重要表达的结果对模块化和软件有重要意义,事实上,它是模

34、块化的论据。意义,事实上,它是模块化的论据。n n从不等式从不等式(5-3)(5-3)可能得出的结论是:如果我们无限制地划分软件,可能得出的结论是:如果我们无限制地划分软件,那么开发它所需的工作量会变得小到可以忽略!不幸的是,其那么开发它所需的工作量会变得小到可以忽略!不幸的是,其他因素开始起作用,使得这个结论他因素开始起作用,使得这个结论(遗憾地遗憾地)无效了。无效了。n n如图如图5-2 5-2 所示,开发单个软件模块所需的工作量所示,开发单个软件模块所需的工作量(成本成本)的确随着的确随着模块数量的增加而下降,给定同样的需求,更多的模块意味着模块数量的增加而下降,给定同样的需求,更多的模

35、块意味着每个模块的尺寸更小,然而,随着模块数量的增长,集成模块每个模块的尺寸更小,然而,随着模块数量的增长,集成模块所需的工作量所需的工作量(成本成本)也在增长。这些特性形成了图中所示的总也在增长。这些特性形成了图中所示的总成本或工作量曲线。存在一个模块数量成本或工作量曲线。存在一个模块数量MM可以导致最小的可以导致最小的开发成本,但是,我们无法确切地预测开发成本,但是,我们无法确切地预测MM。n n图图5-2 5-2 所示的曲线为考虑模块化提供了有用的指导,我们应该进所示的曲线为考虑模块化提供了有用的指导,我们应该进行模块化,但应注意保持在行模块化,但应注意保持在M M 附近,应该避免过低或

36、过高的模附近,应该避免过低或过高的模块性,但是,我们如何知道块性,但是,我们如何知道“M M 的附近的附近”呢?我们应该怎样将呢?我们应该怎样将软件划分成模块呢?回答这些问题需要理解本章后面提出的其软件划分成模块呢?回答这些问题需要理解本章后面提出的其他设计概念。他设计概念。软件总成本成本模块数目模块成本接口成本最小成本区 M图5-2 模块化和软件成本n n在考虑模块化时,出现了另一个重要问题:我们如何定义给定大小的在考虑模块化时,出现了另一个重要问题:我们如何定义给定大小的一个合适模块?答案在于用来在系统中定义模块的方法。一个合适模块?答案在于用来在系统中定义模块的方法。n nMeyerMe

37、yer定义了五个标准,它们用我们可以根据定义有效的模块化系统的定义了五个标准,它们用我们可以根据定义有效的模块化系统的能力来评价一种设计方法:能力来评价一种设计方法:n n模块可分解性。如果一种设计方法提供了将问题分解成子问题的系统模块可分解性。如果一种设计方法提供了将问题分解成子问题的系统化机制,它就能降低整个系统的复杂性,从而实现一种有效的模块化化机制,它就能降低整个系统的复杂性,从而实现一种有效的模块化解决方案。解决方案。n n模块可组装性。如果一种设计方法使现存的模块可组装性。如果一种设计方法使现存的(可复用的可复用的)设计构件能被设计构件能被组装成新系统,它就能提供一种不一切从头开始

38、的模块化解决方案。组装成新系统,它就能提供一种不一切从头开始的模块化解决方案。n n模块可理解性。如果一个模块可以作为一个独立的单位模块可理解性。如果一个模块可以作为一个独立的单位(不用参考其他不用参考其他模块模块)被理解,那么它就易于构造和修改。被理解,那么它就易于构造和修改。n n模块连续性。如果对系统需求的微小修改只导致对单个模块,而不是模块连续性。如果对系统需求的微小修改只导致对单个模块,而不是整个系统的修改,则修改引起的副作用就会被最小化。整个系统的修改,则修改引起的副作用就会被最小化。n n模块保护。如果模块内出现异常情况,并且它的影响限制在模块内部,模块保护。如果模块内出现异常情

39、况,并且它的影响限制在模块内部,则错误引起的副作用就会被最小化。则错误引起的副作用就会被最小化。n n最后,要注意的是:即使系统的实现必须是最后,要注意的是:即使系统的实现必须是“单块集成电路式的单块集成电路式的”,它也可以采用模块化的设计。有些情况它也可以采用模块化的设计。有些情况(例如,实时软件,嵌入式软件例如,实时软件,嵌入式软件)下,由子程序下,由子程序(例如,子例程,过程例如,子例程,过程)造成的即使是比较小的速度和内造成的即使是比较小的速度和内存开销也是无法接受的。在这种情况下,软件能够而且也应该采用模存开销也是无法接受的。在这种情况下,软件能够而且也应该采用模块化设计作为一种指导

40、思想,可以块化设计作为一种指导思想,可以“内嵌地内嵌地(in(inline)”line)”开发代码。尽管开发代码。尽管程序源代码看上去可能没有模块性,但这种思想依然有效,而且程序程序源代码看上去可能没有模块性,但这种思想依然有效,而且程序对提供模块化系统非常有益。对提供模块化系统非常有益。n n4.4.信息隐蔽信息隐蔽n n模块化的概念将所有软件设计者引向一个问题:模块化的概念将所有软件设计者引向一个问题:“如何分解软件的解如何分解软件的解决方案,以便获得最佳的模块集?决方案,以便获得最佳的模块集?”信息隐藏的原则提出模块的信息隐藏的原则提出模块的“特特征在于每个模块都对其他模块隐蔽的设计决策

41、征在于每个模块都对其他模块隐蔽的设计决策”,换句话说,模块应,换句话说,模块应该设计成其中包含的信息该设计成其中包含的信息(过程和数据过程和数据)对不需要这些信息的其他模块对不需要这些信息的其他模块是不可访问的。是不可访问的。n n隐蔽的含义是:有效的模块化可以通过定义一组独立模块来实现,这隐蔽的含义是:有效的模块化可以通过定义一组独立模块来实现,这些模块相互之间只交流实现软件功能必需的信息。抽象有助于定义组些模块相互之间只交流实现软件功能必需的信息。抽象有助于定义组成软件的过程成软件的过程(或信息或信息)实体。隐蔽定义并加强了对模块内部过程细节实体。隐蔽定义并加强了对模块内部过程细节或模块使

42、用的任何局部数据结构的访问约束。或模块使用的任何局部数据结构的访问约束。n n例如:定义栈(例如:定义栈(stackstack)操作模块,包括:)操作模块,包括:makenullmakenull(置空栈);(置空栈);pushpush(进栈);(进栈);poppop(出栈);(出栈);gettopgettop(取栈顶);(取栈顶);emptyempty(判栈空)等部(判栈空)等部分,其操作均被封装,无需了解模块内部的实现过程,对外实现了信分,其操作均被封装,无需了解模块内部的实现过程,对外实现了信息屏蔽。息屏蔽。n n将信息隐藏用作模块化系统的设计标准为在测试及以后维护中需作修将信息隐藏用作模

43、块化系统的设计标准为在测试及以后维护中需作修改时提供了极大的方便,因为大多数数据和过程对软件其他部分是隐改时提供了极大的方便,因为大多数数据和过程对软件其他部分是隐蔽的,修改时无意中引入的错误就不太可能传播到软件中其他位置。蔽的,修改时无意中引入的错误就不太可能传播到软件中其他位置。n n5.4.2 5.4.2 软件体系结构软件体系结构软件体系结构软件体系结构n n软件体系结构意指软件体系结构意指“软件的整体结构和这种结构提供给系统在概念上软件的整体结构和这种结构提供给系统在概念上的整体性的方式的整体性的方式”。以最简单的形式为例,体系结构是程序构件。以最简单的形式为例,体系结构是程序构件(模

44、模块块)的层次结构、构件间交互的方式、以及构件使用的数据的结构,的层次结构、构件间交互的方式、以及构件使用的数据的结构,然而,在更广泛的意义上讲,然而,在更广泛的意义上讲,“构件构件”可以被推广来代表主要的系统可以被推广来代表主要的系统元素和它们的相互交互。元素和它们的相互交互。n n软件设计的一个目标是导出系统的体系结构表示,这个表示作为一个软件设计的一个目标是导出系统的体系结构表示,这个表示作为一个框架,指导更详细的设计活动,一组体系结构模式使得软件工程师能框架,指导更详细的设计活动,一组体系结构模式使得软件工程师能够复用设计层的内容。够复用设计层的内容。n nShawShaw和和Garl

45、anGarlan描述了一组体系结构设计的性质:描述了一组体系结构设计的性质:n n1.1.结构性质。体系结构设计表示的这一方面定义了系统的构件结构性质。体系结构设计表示的这一方面定义了系统的构件(例如,例如,模块、对象、过滤器模块、对象、过滤器)以及这些构件被打包和相互交互的方式,例如,以及这些构件被打包和相互交互的方式,例如,将对象打包以便封装数据和操纵数据的处理,并且通过方法调用进行将对象打包以便封装数据和操纵数据的处理,并且通过方法调用进行交互。交互。n n2.2.附加的功能性质。体系结构设计描述应该说明设计的体系结构如何附加的功能性质。体系结构设计描述应该说明设计的体系结构如何实现对性

46、能、功能、可靠性、安全性、适应性、和其他系统特征的需实现对性能、功能、可靠性、安全性、适应性、和其他系统特征的需求。求。n n3.3.相关系统族。体系结构设计应该基于可复用的模式进行描述,相关系统族。体系结构设计应该基于可复用的模式进行描述,这些模式通常会在类似系统族的设计中遇到,重要的是,设计这些模式通常会在类似系统族的设计中遇到,重要的是,设计应该能够复用体系结构的构造块。应该能够复用体系结构的构造块。n n如果给定这些性质的规约,体系结构设计可以使用一种或多种如果给定这些性质的规约,体系结构设计可以使用一种或多种不同模型来表示。结构模型将体系结构作为程序构件的有组织不同模型来表示。结构模

47、型将体系结构作为程序构件的有组织的集合来表示;框架模型通过试图标识类似应用软件中遇到的的集合来表示;框架模型通过试图标识类似应用软件中遇到的可复用的体系结构设计框架可复用的体系结构设计框架(模式模式)而提高设计抽象级别;动态而提高设计抽象级别;动态模型强调程序体系结构的行为侧面,指明结构或系统配置作为模型强调程序体系结构的行为侧面,指明结构或系统配置作为外部事件的函数将如何变化;过程模型注重系统必须适应的业外部事件的函数将如何变化;过程模型注重系统必须适应的业务或技术过程;最后,功能模型可以用来表示系统的功能层次务或技术过程;最后,功能模型可以用来表示系统的功能层次结构。结构。n n人们已经开

48、发出一系列不同的体系结构描述语言人们已经开发出一系列不同的体系结构描述语言(ADL)(ADL)来表示上来表示上面提到的模型,尽管已经提出了许多不同的面提到的模型,尽管已经提出了许多不同的ADLADL,大多数都提,大多数都提供了描述系统构件和构件互联方式的机制。供了描述系统构件和构件互联方式的机制。n n5.4.3 5.4.3 控制层次控制层次控制层次控制层次n n控制层次,也称作程序结构,代表了程序构件控制层次,也称作程序结构,代表了程序构件(模块模块)的组织的组织(常常常是结构化的常是结构化的),并表示了控制的层次结构,它并不表示软件的,并表示了控制的层次结构,它并不表示软件的过程性,例如进

49、程序列、事件过程性,例如进程序列、事件/决策的顺序、或重复的操作。决策的顺序、或重复的操作。n n许多不同的标记被用来表示控制层次,最常用的是表示层次结许多不同的标记被用来表示控制层次,最常用的是表示层次结构的树形图。在树状结构中,位于最上层的根部是顶层模块,构的树形图。在树状结构中,位于最上层的根部是顶层模块,它是程序的主模块。与其联系的有若干下属模块,各下属模块它是程序的主模块。与其联系的有若干下属模块,各下属模块还可以进一步引出更下一层的下属模块,如图还可以进一步引出更下一层的下属模块,如图5-35-3所示的树状结所示的树状结构构 ABCDEFGHIJKLMN深度宽度宽度顶层顶层1层层2

50、层层扇扇出出为为33层层4层层扇入为扇入为3图5-3 软件结构示意图n n树状结构的特点是:树状结构的特点是:n n整个结构只有一个顶层模块,而对于任何一个下属模块来说,整个结构只有一个顶层模块,而对于任何一个下属模块来说,它只有一个上级模块,而且同一层模块之间不发生关系。它只有一个上级模块,而且同一层模块之间不发生关系。n n为了有助于后面有关结构的讨论,我们定义一些简单的方法和为了有助于后面有关结构的讨论,我们定义一些简单的方法和术语。术语。n n深度:表示软件结构中从顶层模块到最底层模块的层数。深度:表示软件结构中从顶层模块到最底层模块的层数。n n宽度:表示控制的总分布。宽度:表示控制

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com