第13131313章设计的概念和原则软软件件工工程程第第1313131313131313章章设计的概念和原则设计的概念和原则13.13.11软件设计和软件工程软件设计和软件工程13.213.2设计过程设计过程13.213.2.1.1设计和软件质量设计和软件质量13.213.2..22软件设计的演化软件设计的演化13.13.33设计原则设计原则13.413.4.1.1抽象抽象13.413.4.2.2求精求精13.413.4.3.3模块化模块化13.413.4.4.4软件体系结构软件体系结构第第1313131313131313章章设计的概念和原则设计的概念和原则13.13.44.5.5控制层次控制层次13.13.44.6.6结构划分结构划分13.13.44.7.7数据结构数据结构13.13.44.8.8软件过程软件过程13.13.44.9.9信息隐蔽信息隐蔽13.413.4设计概念设计概念13.513.513.513.513.513.513.513.5有效的模块设计有效的模块设计13.513.513.513.513.513.513.513.5........11111111功能独立性功能独立性13.513.513.513.513.513.513.513.5........22222222内聚内聚13.513.513.513.513.513.513.513.5.3.3.3.3.3.3.3.3耦合耦合13.613.613.613.613.613.613.613.6针对有效模块化的设计启发针对有效模块化的设计启发13.713.713.713.713.713.713.713.7设计模型设计模型13.813.813.813.813.813.813.813.8设计文档设计文档13.913.913.913.913.913.913.913.9小结小结第第1313131313131313章章设计的概念和原则设计的概念和原则13.13.13.13.13.13.13.13.11111111软件设计和软件工程软件设计和软件工程设计阶段产生设计阶段产生::••数据设计数据设计:将分析时创建的信息域模型变换成实现软:将分析时创建的信息域模型变换成实现软件所需的数据结构。件所需的数据结构。••体系结构设计体系结构设计:定义了软件的主要结构性元素、可用:定义了软件的主要结构性元素、可用于达成针对系统而定义的需求的于达成针对系统而定义的需求的““““““““设计模式设计模式””””””””以及影响以及影响体系结构设计模式被应用方式的约束之间的关系。体系结构设计模式被应用方式的约束之间的关系。••接口设计接口设计:描述了软件内部、软件和协作系统之间以:描述了软件内部、软件和协作系统之间以及软件同人之间如何通信。及软件同人之间如何通信。••构件级设计构件级设计:将软件体系结构的结构性元素变换为对:将软件体系结构的结构性元素变换为对软件构件的过程性描述。软件构件的过程性描述。13.213.213.213.213.213.213.213.2设计过程设计过程��软件设计软件设计是一个迭代的过程,通过它是一个迭代的过程,通过它需求被变换为用于构造软件的需求被变换为用于构造软件的““““““““蓝图蓝图””””””””良好设计演化的三个良好设计演化的三个特征特征::��设计必须实现所有包含在分析模型中设计必须实现所有包含在分析模型中的明显需求的明显需求��设计必须是可读的,可理解的。设计必须是可读的,可理解的。��设计应该提供软件的完整面貌设计应该提供软件的完整面貌13.2.113.2.113.2.113.2.113.2.113.2.113.2.113.2.1设计和软件质量设计和软件质量设计质量标准:设计质量标准:1.1.1.1.1.1.1.1.展示一种层次性结构展示一种层次性结构2.2.2.2.2.2.2.2.模块化模块化3.3.3.3.3.3.3.3.包含数据、体系结构、接口和构件包含数据、体系结构、接口和构件((((((((模块模块))))))))的的表示表示4.4.4.4.4.4.4.4.适合数据模块导出数据结构适合数据模块导出数据结构5.5.5.5.5.5.5.5.具有独立功能特征的构件具有独立功能特征的构件6.6.6.6.6.6.6.6.导出降低模块和外部环境间复杂连接的接口导出降低模块和外部环境间复杂连接的接口7.7.7.7.7.7.7.7.通过使用由软件需求分析过程中获得的信息所驱通过使用由软件需求分析过程中获得的信息所驱动的可重复的方法导出动的可重复的方法导出13.2.13.2.13.2.13.2.13.2.13.2.13.2.13.2.22222222软件设计的演化软件设计的演化软件设计方法共同特性:软件设计方法共同特性:��一种用于将分析模型变换到设计表示的机制一种用于将分析模型变换到设计表示的机制��用于表示功能性构件及其接口的符号体系用于表示功能性构件及其接口的符号体系��用于求精和划分的启发信息用于求精和划分的启发信息��质量评价的指导原则质量评价的指导原则13.13.13.13.13.13.13.13.33333333设计原则设计原则软件设计的原则:软件设计的原则:•不应该受““““隧道视野””””的限制•对于分析模型应该是可跟踪的•不应该从头做起•应该缩短软件和现实世界中问题的““““智力距离””””•应该表现出一致性和集成性•应该构造以适应变更软件设计的原则:软件设计的原则:•应该构造以使得即使遇到异常的数据、事件或操作条件时也能够平滑、轻巧地降级•不是编码,编码也不是设计•在创建设计时就应该能够评估质量,而不是在事情完成之后•应该复审设计以减少概念性(语义性)错误概念设计问题:概念设计问题:��能使用什么标准将软件划分为单个构件?能使用什么标准将软件划分为单个构件?��如何将功能或数据结构与软件的概念性表示如何将功能或数据结构与软件的概念性表示分离开?分离开?��是否存在定义软件设计的技术质量的统一标是否存在定义软件设计的技术质量的统一标准?准?13.413.413.413.413.413.413.413.4设计概念设计概念13.4.13.4.13.4.13.4.13.4.13.4.13.4.13.4.11111111抽象抽象�过程抽象:一个命名的指令序列,它具有特定和有限的功能。�数据抽象:命名的数据集合,它描述一个数据对象。�控制抽象:隐含了不刻画内部细节的程序控制机制。��逐步求精是自顶向下设计策略逐步求精是自顶向下设计策略��求精实际上是一个详细描述的过程求精实际上是一个详细描述的过程��抽象和求精是互补的概念抽象和求精是互补的概念13.4.213.4.213.4.213.4.213.4.213.4.213.4.213.4.2求精求精13.4.13.4.13.4.13.4.13.4.13.4.13.4.13.4.33333333模块化模块化设C(x)是描述问题x复杂性的函数,E(x)是定义解决问题x所需工作量(按时间计算)的函数,两个问题p1和p2,如果C(p1)>C(p2)那么E(p1)>E(p2)。另一特性:C(p1+p2)>C(p1)+C(p2)。可得出:E(p1+p2)>E(p1)+E(p2)。结论:““““分而治之””””,将复杂问题分解成可以管理的片断会更容易。��模块可分解性模块可分解性��模块可组装性模块可组装性��模块可理解性模块可理解性��模块连续性模块连续性��模块保护模块保护根据定义有效的模块化系统的能力评价设计方法根据定义有效的模块化系统的能力评价设计方法::��软件体系结构软件体系结构意指意指““““““““软件的整体结构和软件的整体结构和这种结构提供给系统在概念上的整体性这种结构提供给系统在概念上的整体性的方式的方式””””””””13.4.13.4.13.4.13.4.13.4.13.4.13.4.13.4.44444444软件体系结构软件体系结构13.4.13.4.13.4.13.4.13.4.13.4.13.4.13.4.44444444软件体系结构软件体系结构��简单来看简单来看,体系结构是程序构件,体系结构是程序构件((模块模块))的层的层次结构、构件间交互的方式、以及构件使用次结构、构件间交互的方式、以及构件使用的数据的结构的数据的结构��广泛上讲广泛上讲,,““““““““构件构件””””””””可以被推广来代表主要的可以被推广来代表主要的系统元素和它们的相互交互系统元素和它们的相互交互体系结构设计中的性质:体系结构设计中的性质:结构性质、结构性质、附加的功能性附加的功能性质、质、相关系统族相关系统族给定这些性质的规约,体系结构设计可用不同模型来给定这些性质的规约,体系结构设计可用不同模型来表示。表示。结构模型结构模型将体系结构作为程序构件的有组织的将体系结构作为程序构件的有组织的集合来表示;集合来表示;框架模型框架模型通过试图标识类似应用中遇到通过试图标识类似应用中遇到的可复用的体系结构设计框架而提高设计抽象级别;的可复用的体系结构设计框架而提高设计抽象级别;动态模型动态模型强调程序体系结构的行为侧面,指明结构或强调程序体系结构的行为侧面,指明结构或系统配置作为外部事件的函数将如何变化;系统配置作为外部事件的函数将如何变化;过程模型过程模型注重系统必须适应的业务的或技术的过程;注重系统必须适应的业务的或技术的过程;功能模型功能模型可用来表示系统的功能层次结构。可用来表示系统的功能层次结构。控制层次控制层次,也称作程序结构,也称作程序结构代表了程序构件代表了程序构件((模块模块))的组织的组织((常常是结构化的常常是结构化的)),并,并暗示了控制的层次结构。暗示了控制的层次结构。在图在图13.4.513.4.5中,中,宽度宽度和和深度深度分别提供了对控制级别的分别提供了对控制级别的数量和整体控制跨度的指示,数量和整体控制跨度的指示,扇出扇出衡量的是被一个模衡量的是被一个模块直接控制的其他模块的数量,块直接控制的其他模块的数量,扇入扇入指明有多少模块指明有多少模块直接控制一个给定模块。直接控制一个给定模块。13.4.13.4.55控制层次控制层次13.4.513.4.5控制层次控制层次图13.4.513.4.513.4.513.4.5调用和返回体系机构的结构术语控制层次两种软件控制层次两种软件体系结构特征体系结构特征::��可见性可见性:指明可以被调用或被给定构件用:指明可以被调用或被给定构件用作数据的一组程序构件,即使是通过间接作数据的一组程序构件,即使是通过间接方式实现的。方式实现的。��连接性连接性:指明被给定构件直接调用或用作:指明被给定构件直接调用或用作数据的一组构件。数据的一组构件。13.4.13.4.66结构划分结构划分 若系统的体系结构风格是层次式的,则程序结若系统的体系结构风格是层次式的,则程序结构可被构可被水平划分水平划分和和垂直划分垂直划分。。水平划分为每个主要程序功能定义了分离的模水平划分为每个主要程序功能定义了分离的模块结构分支,定义了三个部分:块结构分支,定义了三个部分:输入、数据变输入、数据变换和输出换和输出。。水平划分的优点:水平划分的优点:��软件易于测试软件易于测试��软件易于维护软件易于维护��更少的副作用传播更少的副作用传播��软件易于扩展软件易于扩展缺点在于:水平划分常通过模块接口传递更多的数缺点在于:水平划分常通过模块接口传递更多的数据,可能会使程序流的整体控制复杂化。据,可能会使程序流的整体控制复杂化。垂直划分(因子化)垂直划分(因子化)��要求发生在程序体系结构中要求发生在程序体系结构中((决策决策)),且工,且工作应该自顶向下分布,顶层模块应该执行作应该自顶向下分布,顶层模块应该执行控制功能,而少作实际处理工作,在层次控制功能,而少作实际处理工作,在层次结构中位于低层的模块应该是工作者,它结构中位于低层的模块应该是工作者,它们完成所有的输入、计算和输出任务。们完成所有的输入、计算和输出任务。��程序体系结构的变化的性质验证了