国防科技大学计算机学院第三讲:软件设计基础董威,文艳军,陈振邦国防科技大学计算机学院《软件设计与体系结构》国防科技大学计算机学院2内容3.1软件设计的基本概念3.2软件设计过程3.3软件设计的质量3.4软件体系结构设计3.5高可信软件设计3.6软件设计规格说明3.7软件设计评审国防科技大学计算机学院3软件设计软件设计主要针对需求分析过程得到的软件需求规格说明,综合考虑各种制约因素,探求切实可行的软件解决方案并最终给出方案的逻辑表示,包括文档、模型等。软件设计基本概念是过去数十年里陆续提出的,软件设计者根据这组概念进行设计决策。国防科技大学计算机学院4(1)抽象与逐步求精“抽象”是一个心理学概念,它要求人们将注意力集中在某一层次上考虑问题,而忽略那些低层次的细节。“逐步求精”可视为一种早期的自顶向下设计策略,其主要思想是,针对某个功能的宏观描述用逐步求精的方法不断地分解,逐步确立过程细节,直至该功能用程序语言描述的算法实现为止。在软件设计过程中,抽象与逐步求精是一般都是结合起来进行应用。国防科技大学计算机学院5抽象与逐步求精OrderOrderOrderHeadOrderItem1*11+SumTotal():float+Print():bool+Number:longOrder+GetName():string+GetAddress():string-CustomerName:string-CustomerAddress:stringOrderHeadOrderNumberSumTotalPrint1*11OrderHeadCustomerNameCustormerAddressGetNameGetAddressOrderItemProductNamePriceQantityGetSubtotal+GetSubtotal():float+ProductName:string+Price:string-Qantity:intOrderItem1*11精化步骤1精化步骤2精化步骤3抽象级别1抽象级别2抽象级别3抽象级别4国防科技大学计算机学院6(2)模块化与信息隐藏把软件划分为可独立命名和访问的部件,每个部件称为一个模块,当把所有模块组装到一起时则获得满足问题需要的一个解。模块化使得开发活动更加简单的一个重要因素是模块的信息隐藏,即一个模块的开发者不必看到其它模块的内部,只需知道其接口即可,这使得每个模块的开发人员所要处理的复杂性显著降低。国防科技大学计算机学院7模块数量与成本模块数目成本或工作量M成本/模块接口开销软件总耗费最小成本区域国防科技大学计算机学院8内聚与耦合内聚是前述信息隐藏和局部化概念的自然扩展,它标志一个模块内部各成分彼此结合的紧密程度。耦合是对软件结构中模块间关联程度的一种度量。耦合的强弱取决于模块间接口的复杂性、进入或调用模块的位置以及通过接口传送数据的多少等。追求高内聚、低耦合。国防科技大学计算机学院9内容3.1软件设计的基本概念3.2软件设计过程3.3软件设计的质量3.4软件体系结构设计3.5高可信软件设计3.6软件设计规格说明3.7软件设计评审国防科技大学计算机学院10(1)软件设计的一般过程软件设计可能是一个多次反复的过程,所以,软件设计一般都可以被看作是迭代的过程。迭代有两层含义:第一层含义是,针对给定的需求模型,通过多次从抽象到具体的设计过程,得出足够精细的设计模型以供软件实现之用。在需求模型发生变化并更新完成后,第一层含义的设计过程再随之展开,直至获得最终的目标软件产品。国防科技大学计算机学院11软件设计的迭代需求单次设计过程原型构造需求变化第一层:针对固定需求的设计精化迭代第二层:针对需求变化进行设计迭代国防科技大学计算机学院12软件设计的一般过程设计活动需求规格说明设计计划体系结构设计界面设计模块/子系统设计过程/算法设计数据模型设计设计规格说明设计评审通过未通过国防科技大学计算机学院13(2)软件设计的主要活动在设计过程中,对设计活动进行计划应该最早进行,然后按照计划实施体系结构设计、界面设计、模块/子系统设计、数据模型设计、过程/算法设计等活动。国防科技大学计算机学院141)软件设计计划软件设计计划的任务是:明确设计过程的输入制品并使其处于就绪状态,定义设计过程的目标、输出制品及其验收准则,确定覆盖设计过程中各个阶段的全局性设计策略,分配设计过程相关人员的职责,针对设计过程中的活动制订工作计划。国防科技大学计算机学院152)体系结构设计软件体系结构设计的目标是建立软件系统的体系结构,有时也称“顶层架构”。这种架构既要明确定义软件各子系统、关键构件、关键类的职责划分及协作关系,同时也要描绘它们在物理运行环境下的部署模型。此外,顶层架构还必须针对软件系统全局性、基础性的技术问题给出技术解决方案,这种方案往往构成目标软件系统的体系结构的技术基础设施。国防科技大学计算机学院16软件结构有关概念ABCDEFGHJI深度宽度扇出扇入国防科技大学计算机学院173)界面设计用户界面设计的目标是,为用户使用目标软件系统以实现其所有业务需求而提供友好的人机交互界面。软件界面设计需要考虑以下因素:适用于软件功能易理解性一致性灵敏性容错性人性化国际化个性化合理的布局和谐的色彩国防科技大学计算机学院184)模块/子系统设计子系统和模块的区别:一个子系统独立构成系统,不依赖其它子系统提供的服务。一个模块通常是一个能提供一个或多个服务的系统部件。它能利用其它模块提供的服务,一般不被看成一个独立的系统。由于模块和子系统都是软件组成部分,它们一般都有层次结构,相互之间存在接口,其设计方法有很多类似的方面,因此我们统一称为模块设计。国防科技大学计算机学院19模块设计的目标模块设计的目标是,确定模块的具体接口定义,并设计模块的内部结构,即,设置包含于其中的(更小粒度的)模块、构件和设计类,明确它们之间的协作关系,确保它们能够协同实现高层模块接口规定的所有功能和行为。在进行模块设计时,要尽量保持模块的功能独立性,遵循“高内聚、低耦合”的设计思想。此外,还要力求将模块的影响限制在模块的控制范围内,使得软件日后的修改和维护工作更加简单。国防科技大学计算机学院205)过程/算法设计过程/算法设计的任务就是对模块内部的工作和执行过程进行描述,给出有关处理的精确说明,例如事件的顺序、确切的决策位置、循环操作以及数据的组成等。软件结构与软件过程相互关联,软件结构中任何模块的所有从属模块必将被引用出现在该模块的过程说明中。因此,软件过程对应的结构设计亦构成一个层次结构。国防科技大学计算机学院216)数据模型设计我们把数据结构设计、数据库设计、甚至数据文件设计等统一称为数据模型设计。在数据模型设计中有一个重要概念:持久数据操作,它包括写入、查询、更新和删除四类基本操作以及由它们复合而成的业务数据操作。在很多软件系统中,数据是其核心,因此,对数据元素的格式、结构、访存、表示等机制进行良好建模和优化,是提高软件设计质量和系统性能的基础,对软件系统的应用具有重要意义。国防科技大学计算机学院22内容3.1软件设计的基本概念3.2软件设计过程3.3软件设计的质量3.4软件体系结构设计3.5高可信软件设计3.6软件设计规格说明3.7软件设计评审国防科技大学计算机学院23软件设计质量的重要性软件设计是软件开发过程中的核心活动,软件设计的质量不但对最终软件产品的质量起着决定性作用,还对软件开发过程以及软件日后在使用过程中维护的难易程度有着重要的影响。高质量的软件设计,能够有效缩短软件开发时间,减少开发成本,提高最终软件产品质量。国防科技大学计算机学院24软件设计的质量要素结构良好充分性可行性简单性实用性灵活性健壮性可移植性可复用性标准化国防科技大学计算机学院25内容3.1软件设计的基本概念3.2软件设计过程3.3软件设计的质量3.4软件体系结构设计3.5高可信软件设计3.6软件设计规格说明3.7软件设计评审国防科技大学计算机学院26(1)软件体系结构设计方法概述软件体系结构的设计方法是指通过一系列的设计活动,获得满足系统功能性需求、并且符合一定非功能性需求约束的软件体系结构模型。目前存在多种体系结构设计方法,它们的侧重点有所不同。在实际应用过程中,这些体系结构设计方法并不是绝对互斥的,根据需要,有可能综合运用不同体系结构设计方法的思想,得到最终所需的设计结果。国防科技大学计算机学院271)多视图建模进程视图物理视图逻辑视图开发视图场景最终用户功能特性开发人员软件管理集成人员性能可扩展性系统工程师拓扑通信国防科技大学计算机学院282)基于评估与转换的设计方法基于功能的体系结构设计质量属性评价体系结构制品需求规格说明体系结构转换质量优化方案不满足满足国防科技大学计算机学院29转换方式使用合适的体系结构风格和模式,或者设计模式来改进体系结构设计。把非功能需求转化为功能性解决方案,该功能性方案可以与问题域无关,但可以满足质量属性的要求。采用“分而治之”的方式,可以把系统级的质量需求分配到子系统或模块中,或者把质量需求分解为多个与功能相关的质量需求,分解后的质量需求能够比较容易得到满足。国防科技大学计算机学院303)模式驱动的设计方法系统特征初步分析需求规格说明搜索可用的体系结构风格对体系结构风格进行改造以体系结构风格为基础进行设计选择合适的体系结构风格自行设计软件体系结构软件体系结构设计模型不存在存在扩展软件体系结构风格库国防科技大学计算机学院31体系结构风格的分类体系结构风格分类独立构件体系结构数据流体系结构数据为中心的体系结构虚拟机体系结构调用与返回体系结构国防科技大学计算机学院324)领域特定的软件体系结构设计领域特定的软件体系结构(DomainSpecificSoftwareArchitecture,DSSA)是领域工程的核心部分,领域工程分析应用领域的共同特征和可变特征,对刻画这些特征的对象和操作进行选择和抽象,形成领域模型,并进一步生成DSSA。领域特定的软件体系结构借鉴领域中已经成熟的软件体系结构,实现解决方案在某个领域内的复用。虽然这些系统实例的细节会有不同,但共同的体系结构在开发新系统时是能够复用的。国防科技大学计算机学院33DSSA与体系结构风格的区别DSSA与软件体系结构风格是从不同角度出发研究问题的两种结果,前者从问题域出发,而后者从解决域出发。DSSA只在某个特定领域中进行经验知识的提取、总结与组织,但可以同时使用多种软件体系结构风格;而一种软件体系结构风格所呈现的公共结构和设计方法可以扩展到多个应用领域。DSSA的体系结构表示和工具一般只适用于一个较小的范围,在其它领域中是不适用并难以复用的。国防科技大学计算机学院345)软件产品线方法软件产品线指一组具有公共的、可管理特征(系统需求)的软件系统,这些系统满足特定的市场需求或者任务领域需求,并且按照预定义的方式基于公共的核心资产(CoreAssets)集合开发得到。软件产品线主要由两部分组成:核心资产库产品集合国防科技大学计算机学院35软件产品线过程模型产品开发核心资产开发管理产品线开发领域工程应用工程国防科技大学计算机学院36新产品形成步骤从公共资产库中选取合适的构件;使用预定义的变化机制进行裁剪,如参数化、继承等;必要时增加新的构件;在整个产品线范围内共同的体系结构指导下,进行构件组装,形成系统。国防科技大学计算机学院376)其它软件体系结构设计方法基于目标图推理的体系结构设计方法基于属性的体系结构设计方法一些常用的软件开发方法学中也包含了软件体系结构的设计,例如:面向数据流的软件开发方法面向对象的软件开发方法面向方面的软件开发方法国防科技大学计算机学院38(2)软件体系结构设计步骤1.开发软件顶层架构2.搜索并选取可用设计资产3.设计技术支撑方案4.确定设计元素5.开发软件部署模型6.设计并发机制7.构建软