1、软件工程软件工程第八章第八章 设计工程设计工程8 8.1 1 软件设计的概念软件设计的概念8 8.2.2 设设计模型计模型8 8.3 3 基基于模式的软件设计于模式的软件设计1 1软件工程软件工程8.1 8.1 软件设计的概念软件设计的概念n软软件件设设计计的的基基本本目目标标是是用用比比较较抽抽象象概概括括的的方方式式确确定定目目标标系系统统如如何何完完成成预预定定的的任任务务,即即软软件件设设计是确定系统的物理模型。计是确定系统的物理模型。n从从技技术术观观点点来来看看,软软件件设设计计包包括括数数据据设设计计、体体系结构设计系结构设计、接口设计接口设计、构件设计构件设计。n数据设计数据设
2、计将实体关系图中描述的对象和关系,将实体关系图中描述的对象和关系,以及数据字典中描述的详细数据内容转化为数以及数据字典中描述的详细数据内容转化为数据结构的定义。据结构的定义。2 2软件工程软件工程体系结构设计体系结构设计定义软件系统各主要成份之间的定义软件系统各主要成份之间的关系。关系。接口设计接口设计根据信息流图定义软件内部各成份之根据信息流图定义软件内部各成份之间、软件与其它协同系统之间及软件与用户之间、软件与其它协同系统之间及软件与用户之间的交互机制。间的交互机制。构件设计构件设计则是把结构成份转换成软件构件的过则是把结构成份转换成软件构件的过程性描述。程性描述。3 3软件工程软件工程将
3、分析模型转换为设计将分析模型转换为设计4 4软件工程软件工程n从工程管理角度来看,软件设计分两步完成:从工程管理角度来看,软件设计分两步完成:概要设计和详细设计。概要设计和详细设计。n概要设计概要设计将软件需求将软件需求转化为软件体系结构转化为软件体系结构确定系统级接口确定系统级接口全局数据结构或数据库模式。全局数据结构或数据库模式。n详细设计详细设计确立每个模块的实现算法和局部数据结构确立每个模块的实现算法和局部数据结构用适当方法表示算法和数据结构的细节用适当方法表示算法和数据结构的细节5 5软件工程软件工程n软件设计是后续开发步骤及软件维护工作的基软件设计是后续开发步骤及软件维护工作的基础
4、。如果没有设计,只能建立一个不稳定的系础。如果没有设计,只能建立一个不稳定的系统结构。统结构。设计设计编码编码测试测试维护维护测试测试编码编码维护维护有软件设计有软件设计 没有软件设计没有软件设计6 6软件工程软件工程n软件设计既是过程又是模型。软件设计既是过程又是模型。n设计过程设计过程是一系列的迭代步骤,使设计人员能够是一系列的迭代步骤,使设计人员能够描述目标系统的各个侧面。描述目标系统的各个侧面。n设计模型设计模型首先描述目标系统的整体架构,然后逐首先描述目标系统的整体架构,然后逐步细化架构得到构造每个细节的指导原则,从而步细化架构得到构造每个细节的指导原则,从而得到系统的一系列不同的视
5、图。得到系统的一系列不同的视图。n良好的设计原则可为设计过程导航。良好的设计原则可为设计过程导航。n衡量衡量设计过程设计过程的技术原则:的技术原则:设计必须实现分析模型中描述的所有显式需设计必须实现分析模型中描述的所有显式需求,必须满足用户希望的所有隐式需求。求,必须满足用户希望的所有隐式需求。衡量软件设计的原则衡量软件设计的原则7 7软件工程软件工程对于开发者和未来的维护者而言,对于开发者和未来的维护者而言,设计必须设计必须是可读的、可理解的,使得将来易于编程、是可读的、可理解的,使得将来易于编程、易于测试、易于维护。易于测试、易于维护。设计应该给出软件的全貌,包括从实现角度设计应该给出软件
6、的全貌,包括从实现角度可看到的数据、功能、行为。可看到的数据、功能、行为。n衡量衡量设计模型设计模型的技术原则的技术原则设计模型应该是一个分层结构。该结构:设计模型应该是一个分层结构。该结构:使用可识别的使用可识别的设计模式设计模式搭建系统结构。搭建系统结构。用显示良好设计特征的用显示良好设计特征的构件构件构成。构成。可以用可以用演化的方式演化的方式实现。实现。设计应当模块化。设计应当模块化。8 8软件工程软件工程设计应当包含数据、体系结构、接口和构件设计应当包含数据、体系结构、接口和构件(模块)的清晰的视图。(模块)的清晰的视图。设计应当根据将要实现的对象和数据模式导出设计应当根据将要实现的
7、对象和数据模式导出合适的数据结构。合适的数据结构。设计应当建立具有独立功能特征的构件。设计应当建立具有独立功能特征的构件。设计应当建立能够降低模块与外部环境之间复设计应当建立能够降低模块与外部环境之间复杂连接的接口。杂连接的接口。设计模型应当通过使用软件需求信息所驱动的设计模型应当通过使用软件需求信息所驱动的可重复的方法导出。可重复的方法导出。nDavis的软件设计原则的软件设计原则设计应具有设计应具有可跟踪性可跟踪性,能回溯到软件需求,能回溯到软件需求;9 9软件工程软件工程设计不必每次都从头做起,可以复用已有的设计不必每次都从头做起,可以复用已有的设计模式和数据模式。设计模式和数据模式。设
8、计应当缩小软件与现实世界中问题的设计应当缩小软件与现实世界中问题的“智智力距离力距离”,尽量逼近问题领域的结构,尽量逼近问题领域的结构;设计应具有一致性和集成性。整个系统应具设计应具有一致性和集成性。整个系统应具有统一的风格和格式,具有良好的接口。有统一的风格和格式,具有良好的接口。设计结果应能适应未来可能的变更设计结果应能适应未来可能的变更;设计不是编码,编码也不是设计。设计模型设计不是编码,编码也不是设计。设计模型的抽象级别比源代码高。在编码级别上唯一的抽象级别比源代码高。在编码级别上唯一的设计决策是补充一些实现细节。的设计决策是补充一些实现细节。1010软件工程软件工程设计应具有容错性和
9、异常处理能力。对于异设计应具有容错性和异常处理能力。对于异常数据、事件、操作条件等能够平滑处理。常数据、事件、操作条件等能够平滑处理。在建立设计方案时就应能评估设计质量,而在建立设计方案时就应能评估设计质量,而不是在系统编码之后。不是在系统编码之后。应坚持设计评审,减少概念性(语义性)的应坚持设计评审,减少概念性(语义性)的错误。错误。1)设计应遵循设计应遵循抽象化抽象化的原则,的原则,包含包含包含包含数据抽象数据抽象和和和和过过过过程抽象程抽象程抽象程抽象。软件设计的主要手段软件设计的主要手段11 11软件工程软件工程过程抽象过程抽象 是指在软件设计中将处理过程的实是指在软件设计中将处理过程
10、的实现细节隐藏在过程抽象中,可以直接通过模现细节隐藏在过程抽象中,可以直接通过模块接口使用这些处理操作块接口使用这些处理操作。数据抽象数据抽象 是指采用抽象数据类型表示数据,是指采用抽象数据类型表示数据,实现数据封装,使得使用者可通过接口使用实现数据封装,使得使用者可通过接口使用数据而不必关心数据结构的实现。数据而不必关心数据结构的实现。1212软件工程软件工程 抽象案例 1993年,美国微软公司推出了它的90年代操作系统Windows NT。在它的许多特色中,有一个特点是它的一体化的“输入/输出系统”的设计。设计者们利用抽象原则,把操作系统的文件管理、网络管理、设备管理和高速缓冲存储器这四个
11、十分不同的事物进行分析,抽取其共性,最后将其统一为“对虚拟文件的字节流,虚拟文件可以为任何设备和实体”,从而设计出具有统一外貌、统一处理模式和规范一体化的输入/输出系统,获得极大成功。1313软件工程软件工程2)设计应遵循设计应遵循自顶向下自顶向下、逐步细化逐步细化的原则,建立的原则,建立一个层次的结构。一个层次的结构。将软件体系结构自顶向下,对过程细节和数将软件体系结构自顶向下,对过程细节和数据细节从抽象到具体,逐层细化,直到用编据细节从抽象到具体,逐层细化,直到用编程语言的语句能够实现为止。程语言的语句能够实现为止。3)设计设计模式模式描述了在某个特定场景中解决某个特描述了在某个特定场景中
12、解决某个特定问题的设计结构。定问题的设计结构。模式是否适合当前的工作模式是否适合当前的工作模式是否能够复用模式是否能够复用模式是否能够用于指导开发一个类似但是功模式是否能够用于指导开发一个类似但是功能或结构不同的模式能或结构不同的模式1414软件工程软件工程4)设计应当遵循设计应当遵循模块化模块化的原则的原则。每每个个模模块块可可独独立立地地开开发发、测测试试,最最后后组组装装成成完整的程序。完整的程序。其其出出发发点点是是本本着着将将一一种种复复杂杂问问题题“分分而而治治之之”的的原原则则。其其目目的的是是使使程程序序的的结结构构清清晰晰,容容易阅读、理解、测试、修改。易阅读、理解、测试、修
13、改。Meyer的的良好模块设计方法的标准良好模块设计方法的标准a)模模块块可可分分解解性性 可可将将系系统统按按问问题题子子问问题题分解的原则分解成系统的模块层次结构分解的原则分解成系统的模块层次结构;b)模模块块可可组组装装性性 可可利利用用已已有有的的设设计计构构件件组组装成新系统,不必一切从头开始。装成新系统,不必一切从头开始。1515软件工程软件工程 模块化的依据 规律一:如果问题P1的复杂性大于问题P2,则解决问题P1需要的工作量大于解决问题P2需要的工作量。C(P1)C(P2)显然 E(P1)E(P2)这个不等式导致“各个击破”的结论把复杂的问题分解成许多容易解决的小问题,原来的问
14、题也就容易解决了。这就是模块化的根据。规律二:如果一个问题Q分别由P1和P2组成而成,那么它的复杂程度大于分别考虑每个问题时的复杂程度之和。由此可以得出,解决问题Q需要的工作量大于分别解决问题P1和P2需要的工作量之和。C(P1+P2)C(P1)+C(P2)也就是说,如果一个问题由和两个问题组合而成,那么它的复杂程序大于分别考虑每个问题时的复杂程度之和。综上所述,得到下面的不等式 E(P1+P2)E(P1)+E(P2)1616软件工程软件工程c)模模块块可可理理解解性性 一一个个模模块块可可不不参参考考其其他他模模块而被理解;块而被理解;d)模模块块连连续续性性 对对软软件件需需求求的的一一些
15、些微微小小变变更更只只导导致致对对某某个个模模块块的的修修改改而而整整个个系系统统不不用用大动大动;e)模模块块保保护护 将将模模块块内内出出现现异异常常情情况况的的影影响响范围限制在模块内部;范围限制在模块内部;5)设计应遵循设计应遵循信息隐蔽信息隐蔽的原则的原则。Patnas主主张张在在开开发发时时,将将每每个个程程序序的的成成分分隐隐藏藏在在模模块块内内,定定义义每每一一个个模模块块时时尽尽可可能能少少地地显露其内部的处理。显露其内部的处理。1717软件工程软件工程每每个个模模块块的的实实现现细细节节对对于于其其它它模模块块是是隐隐蔽蔽的的,将将来来修修改改软软件件时时偶偶然然引引入入错
16、错误误所所造造成成的的影影响响就就可可以以局局限限在在一一个个或或几几个个模模块块内内部部,不不致致波波及到软件的其它部分。及到软件的其它部分。在在可可预预见见将将来来可可能能修修改改的的场场合合,信信息息隐隐蔽蔽可可以以提提高高软软件件的的可可修修改改性性、可可测测试试性性和和可可移移植植性。性。6)功功能能独独立立性性是是抽抽象象、模模块块化化和和信信息息隐隐蔽蔽的的直直接接产产物物。如如果果一一个个模模块块能能够够独独立立于于其其他他模模块块被被编编程、测试和修改,则该模块具有功能独立性。程、测试和修改,则该模块具有功能独立性。1818软件工程软件工程19781978年年MyersMyers提出用两个准则来度量功能独提出用两个准则来度量功能独立性,即模块间的耦合和模块的内聚。立性,即模块间的耦合和模块的内聚。内聚性内聚性:内聚是一个模块内部各个元素彼此:内聚是一个模块内部各个元素彼此结合的紧密程度的度量。结合的紧密程度的度量。耦合性耦合性:耦合是模块间互相连接的紧密程度耦合是模块间互相连接的紧密程度的度量,它取决于各个模块之间接口的复杂的度量,它取决于各个模块之间接口的复杂度、调
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1