第7章软件设计

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1第7章软件设计软件设计概述优秀设计的基本概念数据设计软件体系结构及其设计面向对象的设计实时软件的设计用户界面设计构件级设计27.1软件设计概念1、软件设计模型软件设计是将软件需求转换为软件表示的过程,也是一个建模过程,以一系列迭代的步骤建立不同的视图来描述系统。主要的设计活动包括:数据设计、体系结构设计、接口设计、构件级设计、部署级(Deployment-Level)的设计。下图显示分析模型到设计模型的转换。3Scenario-basedelementsUse-cases-textUse-casediagramsActivitydiagramsSwimlanediagramsFlow-orientedelementsDataflowdiagramsControlflowdiagramsProcessingnarrativesClass-basedelementsClassdiagramsAnalysispackagesCRCmodelsCollaborationdiagramsBehavioralelementsStatediagramsSequencediagramsAnalysisModel前一章讲的分析模型的元素(Pressman,6E)4Analysis模型Design模型5类图分析包CRC模型协作图数据流图控制流图处理描述设计类实现子系统协作图精化:设计类实现子系统协作图分析模型抽象纬度设计模型用例文本用例图活动图泳道图协作图状态图时序图接口设计导航设计GUI设计类图分析包CRC模型协作图数据流图处理描述状态图时序图构件图设计类活动图时序图精化:构件图设计类活动图时序图必要条件:约束协同能力目标和配置设计类实现子系统协作图构件图设计类活动图时序图部署体系结构元素接口元素构件级元素部署级元素过程纬度(过程模型的演化)62、设计目标和指导原则(参考教材1)设计目标:•设计必须实现所有包含在分析模型中的需求。•设计必须是可读、可理解的,便于实现和维护。•设计应该提供软件的完整面貌,包括从不同角度看到的数据、功能、行为域。常用的设计指导原则:(1)设计应该展示这样一种结构:•已经使用可识别的体系结构风格或模式创建;•由展示出良好设计特征的构件组成;•能够以演化的方式实现,从而便于实现与测试。(2)设计应该模块化。即软件应按逻辑划分为元素或子系统。(3)设计应该包括数据、体系结构、接口和模块的清楚表示。7常用的设计指导原则(续):(4)设计应该导出数据结构,这些数据结构适合于要实现的类,并由可识别的数据模式提取。(5)设计应导出显示独立功能特征的构件。(6)设计应导出接口,这些接口降低了构件之间以及与外部环境连接的复杂性。(7)设计的导出应根据软件需求分析过程中获取的信息采用可重复使用的方法进行。(8)应使用能够有效传达其意义的表示法来表达设计。83、通常的设计任务集:(1)检查信息域模型,并为数据对象及其属性设计恰当的数据结构。(2)使用分析模型,选择一个适合于软件的体系结构模式。(3)将分析模型分割为若干个设计子系统,并在体系结构内分配这些子系统。子系统应功能内聚。设计子系统接口。为每个子系统分配分析类或功能。(4)创建一系列的设计类或构件。将每个分析类转化为设计类。根据设计标准检查每个设计类,考虑继承问题。定义与每个设计类相关的方法和消息。评估设计类和子系统并为其选择设计模式。评审设计类,并在需要时修改。9(5)设计外部系统或设备所需的说有接口。(6)设计用户接口评审任务分析的结果。基于用户场景详细说明活动序列。创建接口的行为模型。定义接口对象、控制机制。评审接口设计,并在需要时修改。(7)进行构件级设计在相对较低的抽象层次上详细的说明所有算法。精化每个构件的接口。定义构件级的数据结构。评审每个构件并修改所有已发现的错误。(8)开发部署模型。103、软件设计文档设计阶段的一个重要产品就是描述所构建的系统的文档。主要内容:•前言:系统目标;主要需求•数据设计用一系列图形和符•体系结构设计号描述系统、界面•接口设计(人机交互、外部接口)和构件的结构,包•每个模块(或构件)的详细设计括各级抽象。•集成测试策略•设计约束•需求交叉引用表•参考文献•附录文档中还可以包含描述系统如何运行的操作手册,以及出错后系统的重新配置或特定的安全措施。11计算机软件文档编制规范(GB/T8567-2006)《软件设计说明》模版§1.引言§1.1标识文件状态(草稿/正式发布/正在修改);文件标识;当前版本;作者§1.2系统概述(名称、功能、性能、上下文关系、用户、开发者)§1.3文档概述(类型、描述方法、预期读者)§1.4基线§2.引用文件§3.系统结构§3.1部署图§3.2体系结构图§3.3…§4.运行行为(时序图、活动图、状态图等)/详细设计说明(网页对象设计、实体类、数据库接口设计等)§5.接口设计(如用户界面、硬件接口、子系统接口)§6.系统出错处理§7.系统维护127.2优秀设计的基本概念软件设计中最重要的一个问题就是软件质量问题,如何衡量软件设计的技术质量呢?本节介绍提高软件设计技术应掌握的一些基本概念。1、分解与模块化Wasserman(1995)提出了5种创建设计的方法:(1)模块化分解:功能分配给模块或构件(2)面向数据的分解:基于全局数据结构13(3)面向事件的分解:基于系统必须处理的事件及如何改变系统状态的信息,高层描述状态目录,低层描述转换。(4)由外往内的设计:基于系统的用户输入,高层列出所有输入,低层描述如何处理每个输入。(5)面向对象的设计:系统分解为子系统,子系统分解成包,包分解为类,低层描述所属类的对象的数据和方法以及对象间相互的交互。14通过系统的数据描述、事件、用户输入、高层功能描述或组合,用逐渐增加的细节创建信息层次来得到设计。15模块化是软件解决复杂问题所具备的手段,E(P1+P2)E(P1)+E(P2)162、抽象与求精抽象,即抽出事物本质的共同特性而暂不考虑它的细节。软件过程中的每一阶段都是解决方案抽象级别上的求精。抽象包括•数据抽象:对数据集合命名并描述它的关键属性;•过程抽象:对一系列隐含的过程性步骤命名,关注主要功能而不考虑细节。抽象帮助定义模块实体,建立不同抽象级别的软件体系结构。求精,是详细描述的过程,用于揭示具体实现的低层细节。抽象和求精是对立统一的两个方面,缺一不可的帮助构造出完整的设计模型。173、信息隐蔽指在设计和确定模块时能够隐藏在模块内部的信息(数据、过程)尽量在模块内部存储和定义,尽可能的局部化。接口和模块内部设计应分离。作用:约束我们实现模块内部的过程细节和数据结构的访问,减少因局部数据结构的变动对其他软件的影响,有利于维护。4、模块独立性模块功能的独立性是抽象和信息隐蔽性的直接产物。独立的模块易于复用、易于维护。如何衡量软件的独立性?提出了两个定性的度量标准——耦合性和内聚性。18(1)耦合性(Coupling)软件结构中各构件间相互联系紧密程度的一种度量。•内容耦合•公共耦合•控制耦合•标记耦合•数据耦合19还有:•包含或导入耦合•类型使用耦合•例程调用耦合一个操作调用另一个操作时发生此种耦合。•外部耦合:一个构件和基础实施构件(如操作系统功能、数据库功能)进行协作和通信发生此种耦合。应限制在少量构件或类范围中。尽量降低耦合性!Demeter定律不太严谨的一种解释:“每个单元应该只和它的朋友交谈,而不要和陌生对象交谈。”20(2)内聚性(Cohesion)一个构件内部各个元素彼此结合的紧密程度的度量。较低级别的内聚•顺序内聚:实现一个操作的序列,操作按照前者为后者提供输入的方式组合。•过程内聚:操作依次调用,没有数据传递。•暂时内聚:为了反映某一指定行为的操作。如错误检测时要执行的操作。较高级别的内聚•功能内聚:构件内只完成一种功能就返回结果。•分层内聚:高层访问低层,低层不能访问高层。•通信内聚:所有操作访问相同的数据结构。定义构件时需要强内聚、弱耦合,使得构件易于实现、测试和维护。217.3数据设计数据的结构总是软件设计的一个重要方面。构件级:数据结构和操作它们的相关算法;应用级:数据模型到数据库的转换;业务级:存储在不同数据库并重新组织为“数据仓库”的信息的集合产生了数据挖掘技术。在每一种情况,数据设计均扮演了重要角色。22应用级数据管理设计根据对数据需求和约束的理解,为持久对象的管理进行以下设计:1、识别数据、数据结构以及它们的关系。2、设计服务(操作),以管理数据结构和关系。3、选择数据库管理系统,来实现数据管理任务。4、设计类和类层次以检查数据管理功能。对数据的管理可以使用普通文件、关系型数据库和面向对象数据库。237.4软件体系结构及其设计(参考第11章)1、软件体系结构相关概念(1)什么是软件体系结构随着软件系统越来越大、越来越复杂,软件设计的核心已经转移到新的计算模式,非传统的“程序=算法+数据结构”,新的模式就是系统总体结构的设计和规范。软件体系结构(Architecture)是构造系统的基本框架,为软件系统提供了一个结构、行为和属性的高级抽象。由构成系统的元素(构件)的描述、这些元素的相互作用、指导元素集成的模式以及模式的约束组成。24体系结构设计为什么重要?关心的是为系统建立一个基本架构。包括要识别出系统的主要构件以及这些构件之间的通信。好处:•体系结构是系统的高层表示,有利于项目人员之间沟通。•体系结构的设计决策对系统能否满足关键性需求如系统的性能、可靠性、可维护性等属性的评估有极深的影响。•体系结构能在具有相似需求的系统之间复用。软件体系结构不仅指出了系统的组织结构和拓扑结构,并显示了系统需求和构成系统元素之间的对应关系,提供了软件如何设计的重要决策。25体系结构对性能、鲁棒性、分布能力、可维护性等非功能性需求有以下影响:•性能若性能是关键需求,体系结构的设计就要定位在少数子系统上的一些关键性操作上,尽量减少子系统之间的通信。•保密性体系结构的设计要采用分层结构,把重要资源放在内层,并在每层采用更加严格的安全有效措施。•安全性将安全相关的操作集中在一个或少数几个子系统中,便于安全有效性验证或提供相应的保护措施。•可用性要采用冗余性构件以便能在无需系统停止运行的情况下更新或替换构件。•可维护性使用小粒度的构件以便更换。产生数据和使用数据的部分应该分开。需针对不同需求采用不同的体系结构类型来实现。26(2)软件体系结构设计过程的主要活动体系结构的设计过程主要关心的是为系统建立一个基本架构。它包括识别出系统的主要构件和这些构件之间的交互(通信)。构件有不同的抽象粒度:子系统、模块、包、类等。体系结构设计过程的主要活动:•系统组成(系统结构化):将系统分解为一系列基本的子系统,每一子系统是独立的软件单元,并识别出子系统之间的通信。(结构模型)•控制建模:建立系统各部分之间的控制关系(控制模型)。•模块分解:将每个识别出的子系统进一步分解为模块,确定模块类型及模块之间的关联。(模块化分解模型)以上活动交替进行。在这些过程中,设计人员要通过更详细的设计来发现体系结构设计是否符合要求。27Pressman建议:完成体系结构设计需要以下几步:•系统必须表示在相应的环境中,即应该定义与软件交互的外部实体及交互性质。•环境说明后,应该确定一系列顶层抽象,称之为原始模型(原型),该原始模型可以表示本系统行为或功能的关键因素。•定义完抽象后,设计向实现移动。在支持构件的体系结构环境下标识和描述这些构件。•开发体系结构设计的实例,在现实世界中验证所得设计。28体系结构的设计要基于一些特别的模型或风格。本节将给出一些不同的结构化模型、控制模型和模块化分解模型。设计者不但要了解模型本身,还要了解它们的应用及其各自的优缺点。同时要关注组件间如何交互的大局,关注整体,忽略局部性的细节。多数系统的体系结构不可能由一个模型描述清楚。系统的不同部分可能使用不同的体系结构模型来设计。在某些情况下系统本身可能是一个复合型体系结构,设计

1 / 155
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功