1、设计的目标、任务原则设计过程(过程、技术、方法和工具)设计的产品设计的评审l软件设计是把软件需求规格说明转为软件过程性的表示,它决定了将要如何构造软件。解决“怎么做”的问题软件设计的目标将需求分析模型转换为软件设计模型 数据词典 数 据 流 图 实实 体 关 系 图 状态转换图 加 工 控 制 规 规 格 格 说 说 明 明 数 据 对 象 描 述 过程设计 接口设计 体系结构设计 数据设计 软件设计过程从工程管理的角度来看,软件设计分两步完成。概要设计,将软件需求转化为数据结构和软件的系统结构。详细设计,即过程设计。通过对结构表示进行细化,得到软件的详细的数据结构和算法设计过程的一般模型需求
2、描述需求描述体系结构设计体系结构设计抽象描述抽象描述接口设计接口设计组件设计组件设计数据结构数据结构设计设计系统体系结构系统体系结构软件描述软件描述接口描述接口描述组件描述组件描述数据结构数据结构描述描述算法描述算法描述算法设计算法设计设计依赖的三种方法抽象、分解和投影设计一个系统有许多方法,具体的设计方法取决于下列因素:系统所要求的结构或数据设计者自已的爱好和习惯 每一种设计方法都应采用某种分解方法:自顶向下,逐层分解,不断细化从系统关键元素的顶层图开始,逐步建立较低层次元素分解的层次Top levelFirst level of decompositionSecond level of d
3、ecomposition模块分解(Modular decomposition)将功能分配给模块;高层描述系统功能,低层描述模块组织及相互联系.面向数据分解(Data-oriented decomposition)基于外部数据结构;高层描述总体数据结构,低层描述数据元素细节及其联系.面向事件分解(Event-oriented decomposition)事件如何改变系统状态;高层描述各种状态列表,低层描述状态转换.由外向内设计(Outside-in design)基于黑盒方法Black box;高层列出全部用户输入,低层处理对输入的响应.面向对象设计(Object-oriented design
4、)确定对象的类及其交互关系;高层描述每个对象的类型,低层描述对象属性及动作.面向构件设计识别可选的构件设计软件架构以容纳这些构件基于体系架构的设计重点关注构成系统的组件及组件连接方式,考虑系统高层特性的实现面向方面的(AOP)设计使系统的功能需求、非功能需求、平台特性等诸多不同的关注点相互独立,实现更好 的模块化,来构建出易于理解、易于扩展、高复用性、高质量的软件系统。2 理解设计要素理解设计要素设计考虑要素网络的设计与集成应用程序体系结构的设计用户界面的设计系统接口的设计数据库系统的设计与集成细节设计原型系统的建立系统控制的设计与集成在设计阶段应达到的目标是:提高可靠性;提高可维护性;提高效
5、率。衡量该目标的准则设计实现所有包含在分析模型中的明示需求,并且必须满足客户希望的所有潜在需求软件实体有明显的层次结构,利于软件元素间控制。软件实体应该是模块化的,模块具有独立功能。软件实体与环境的界面清晰。设计规格说明清晰、简洁、完整和无二义性。设计结果易于扩充和适应变化规划阶段设想供选择的方案选择合理的方案推荐最佳方案设计阶段制定规范软件系统的结构设计处理方式设计数据结构设计可靠性设计编写概要设计阶段的文档制定测试计划概要设计评审详细设计1.设想供选择的方案任务:分析中考虑各种可能的实现方案分析中考虑各种可能的实现方案,从中选择最佳从中选择最佳方案方案.设计的方法:从从DFD出发出发,设想
6、把设想把DFD中的处理分解成各种不中的处理分解成各种不同的实现方案同的实现方案;抛弃技术上行不通的方案抛弃技术上行不通的方案.2.选择合理的方案任务:从设想的可供选择的方案中选择若干个合理的方案从设想的可供选择的方案中选择若干个合理的方案;选择实现方案时,至少要选择:低成本方案低成本方案中等成本方案中等成本方案高成本方案高成本方案对每个合理的方案,准备下列资料:系统流程图系统流程图组成系统的物理元素清单组成系统的物理元素清单成本成本/效益分析效益分析实现该系统的进度计划实现该系统的进度计划3.推荐最佳方案任务:综合分析对比各种合理方案的利弊综合分析对比各种合理方案的利弊,推荐一个最推荐一个最佳
7、方案佳方案;为该方案制定详细的实现计划为该方案制定详细的实现计划.用户和有关技术专家审查该方案:是否确实符合用户的需要是否确实符合用户的需要?是否能在现有的条件下实现是否能在现有的条件下实现?投资人或使用部门负责人审批.获得批准后获得批准后,进行结构设计进行结构设计.1 制定规范确定设计的目标,及优先顺序。确定合适的设计方法规定设计文档的编制标准规定编码的信息形式接口规约,命名规则阅读和理解软件需求说明书,确认用户要求能否实现,明确实现的条件,从而确定设计的目标,以及它们的优先顺序2 软件系统的结构设计体系结构设计 组成系统的结构元素和界面;元素中协作的特定行为;大的子系统中这些结构和行为的复
8、合将系统按功能划分成模块的层次结构。确定每个模块的功能 建立与已确定的软件需求的对应关系 确定模块间的调用关系 确定模块间的接口 评估模块划分的质量3 处理方式设计确定为实现系统的功能需求所必需的算法评估算法的性能确定为满足系统的性能需求所必需的算法和模块间的控制方式 周转时间 响应时间 吞吐量 精度确定外部信号的接收发送形式4 数据结构设计确定文件系统的结构以及数据库的模式、子模式确定输入,输出文件的数据结构确定算法所必需的逻辑数据结构及其操作确定对逻辑数据结构所必需的程序模块限制和确定各个数据设计决策的影响范围确定其详细的数据结构和使用规则数据的完整性、安全性、一致性、冗余性设计(5)可靠
9、性设计也叫质量设计软件可靠性是在给定的时间内,程序按照规定的条件成功运行的概率。容错技术、冗余技术6编写概要设计阶段的文档设计说明数据库设计说明接口说明用户手册制定初步的测试计划7 制定测试计划8 概要设计评审可追溯性 接口 风险 实用性 可维护性 可测试性 技术清晰度 质量保证 各种选择方案 限制 文档 9详细设计确定软件各模块的算法,以及内部数据组织、描述算法 数据的组织和输入设计 输出信息设计 文件/数据库设计 编码设计 消息传递机制设计 接口设计 系统的安全保密设计 系统的性能设计.进行详细设计的评审设计的指南1 设计应该展示一种层次化结构2 设计应该模块化,即逻辑地划分成完成特定功能
10、和子功能的构件3 设计应该包括对数据、结构、界面和部件的清楚表述4 设计应该导出适于实现目的和由公认的数据模式导出的数据结构5 设计应该导出具有独立功能特征的模块6 设计应该导出降低模块和外部环境间连接复杂度的接口7 设计应该通过使用可重复的方法来得到,这些方法被来源于软件需求分析的信息所驱动8 设计应该可以持续改进抽象体系结构模式模块化信息隐藏求精重构抽象是人类处理复杂问题的基本方法之一Grady Broach抽象是抽出事务的本质特性,暂时忽略细节,分层理解问题,自顶向下层层细化;抽象有助于分层次认识和分析问题,改善设计质量。抽象的级别:每个模块都具有某种级别的抽象.每一层次的抽象都在一定程
11、度上细化了上一层模块的内容 顶层模块描述系统最高层次功能的抽象 下层模块描述上层模块功能的更详细的处理方法 最下层模块描述某一具体功能的最详细的处理方法抽象的例子:第一层抽象第一层抽象第三层抽象第三层抽象第二层抽象第二层抽象电器设备空气传感器水传感器传感器各类具体传感器各类具体传感器抽象为传感器抽象为传感器抽象为电器设备抽象为电器设备软件设计的目标之一是导出系统的体系结构透视图。体系结构是软件构成的抽象表示,它反映了软件的整体结构以及这种结构为系统提供实现及运行上完整性表达的方式。设计模式是一种软件问题的解决方案。它描述了在某个特定场景,针对特定设计问题(系统需求)的一种软件实现结构。应用成熟
12、的模式可以降低项目开发的风险、提高软件开发的质量。“模块”,又称“构件”,一般指用一个名字可调用的一段程序。它一般具有如下三个基本属性:功能 即指该模块实现什么功能,做什么事情。必须注意:模块功能,应是该模块本身的功能加上它所调用的所有子模块的功能。逻辑 即描述模块内部怎么做。状态 即该模块使用时的环境和条件。模块化程序分成若干个模块,且:每一个模块完成一个相对独立的子功能 每个模块定义了输入和输出的功能。若干个模块集成,构成一个整体,完成一个大功能。模块的例子:面向过程设计:子系统,过程,函数,子程序,宏面向对象设计:子系统,包,对象,对象内的方法软件总成本 模块化与软件成本的关系成本模块数
13、目模块成本接口成本最小成本区M令:令:C C(X X)表示问题)表示问题 X X 的复杂度函数;的复杂度函数;E E(X X)解决问题)解决问题 X X 所需工作量的复所需工作量的复杂度函数;杂度函数;若:有问题若:有问题 P1P1,P2 P2;C C(P1P1)C C(P2P2););显然:显然:E E(P1P1)E E(P2P2)由经验:由经验:C C(P1+P2P1+P2)C C(P1P1)+C+C(P2P2)于是:于是:E E(P1+P2P1+P2)E E(P1P1)+E+E(P2P2)将问题(将问题(P1+P2P1+P2)划分为两个问题)划分为两个问题P1P1和和P2P2后,其工作量
14、和复杂度都降低。后,其工作量和复杂度都降低。并非模块分得越小越好,因为模块之间接口的复杂度和工作量增加。并非模块分得越小越好,因为模块之间接口的复杂度和工作量增加。显然,每个软件系统都有一个最佳模块数显然,每个软件系统都有一个最佳模块数M M。注意选择分解的最佳模块数。注意选择分解的最佳模块数。右上图描述了模块化与软件成本的关系。右上图描述了模块化与软件成本的关系。每个模块对其他所有模块都应隐蔽自己的设计决策。设计模块时使得一个模块内包含的信息(过程和数据)对于不需要这些信息的模块来说是不能访问的.信息隐蔽是模块化和抽象的结果,隐藏了模块内部的细节,使其他模块不能访问该模块的内部细节和过程。信
15、息隐藏提高了软件的可维护性。逐步求精(Stepwise refinement)逐步求精是人类解决复杂问题时采用的基本方法,也是许多软件工程技术的基础.抽象与逐步求精是一对互补的概念.模块分解中的上层是下层的抽象,下层是上层的求精过程重构是一种重新设计的技术,可以优化构件的设计(代码)而无须改变系统的功能或行为。模块设计的关键:每个模块完成一个相对独立的子功能,并且与其它模块间的接口简单,即功能专一,模块之间无过多的相互作用的模块。模块独立的好处有效的模块化的软件开发相对较容易 接口简单 便于多人合作开发(并行开发)独立的模块容易测试和维护 测试和修改只是在一个模块中 扩充只是填加一些新模块模块
16、独立性的度量标准是两个定性准则:耦合性(Coupling):用于描述模块之间联系的紧密程度。内聚性(Cohesion):用于描述模块内部联系的紧密程度。耦合的概念:两个模块之间联系的紧密程度.高度耦合:模块之间依赖性很强高度耦合:模块之间依赖性很强.松散耦合:模块之间虽然有联系松散耦合:模块之间虽然有联系,但依赖程度较弱但依赖程度较弱.无耦合:模块间没有任何联系无耦合:模块间没有任何联系,互相完全独立互相完全独立.Great deal of dependenceIndependent Highly coupledLoosely coupledUncoupled Goal:as loose as
17、 possible=as independent as possible耦合耦合(Coupling)决定耦合程度的几种情况:一个模块对另一个模块的访问一个模块对另一个模块的访问.例:模块A调用模块B完成其功能.模块间传递的数据模块间传递的数据.例:一个参数、一个数组、一个数据块.一个模块给另一个模块传递控制信息一个模块给另一个模块传递控制信息.例:模块A将一个控制标志传送给模块B.该标志的值通知模块B调用哪个处理过程.ABBAarrayBAflag耦合耦合(Coupling)直接耦合与间接耦合:不可能有一个系统是由完全无耦合的模块组成的不可能有一个系统是由完全无耦合的模块组成的.理想的耦合:n
18、模块之间的耦合程度越低(松散)越好.n耦合度低:修改一个模块时,改动涉及的模块少,改动量小.n耦合度高:修改一个模块时,改动涉及的模块多,改动量大.ABA与与B是直接耦合是直接耦合ZYXX与与Z是间接耦合是间接耦合耦合耦合(Coupling)独立性由弱到强排列为:内容耦合(Content Coupling):公共耦合(Common coupling):控制耦合(Control coupling):特征耦合(Stamp coupling)数据耦合(Data coupling):例1:A访问C的内部数据或不通过正常入口而转入C的内部。ABCDA:goto C1C:C1:内容耦合内容耦合(Conte
19、nt Coupling):一个模块可能修改另一个模块内部的数据一个模块可能修改另一个模块内部的数据.耦合(Coupling)例2:部分代码重叠(常出现在汇编程序中)B A例例3:一个:一个模块有多个模块有多个入口(功能)入口(功能)A:entry 1:entry 2:The least desirable耦合(Coupling)公共耦合(Common coupling):通过一个公共数据存储区来减少耦合程度.模块间仍然存在依赖关系,公共数据的修改可能对访问该公共数据存储区的模块都有影响.Global:V1,V2A:A1=V1+V2B:V1=B1Global:V1,V2A:V1+B:V2=B1+
20、V1耦合(Coupling)(3)控制耦合(Control Coupling)一个模块对另一个模块传递控制参数,控制该模块.没有第一个模块的指示没有第一个模块的指示,受控模块就不可能完成其功能。受控模块就不可能完成其功能。如果一个模块依赖另一个模块的返回值决定流向。如果一个模块依赖另一个模块的返回值决定流向。控制耦合系统的优点:每一个模块只完成一个功能或只执行一个过程每一个模块只完成一个功能或只执行一个过程.模块间传递的控制信息量最少模块间传递的控制信息量最少,控制局部化控制局部化.Component AComponent BControl data耦合耦合(Coupling)A A计算平均分
21、计算平均分或最高分或最高分B B平均平均/最高最高(控制信号控制信号)成绩成绩读入分数读入分数输出结果输出结果计算平均分计算平均分计算最高分计算最高分平均平均/最高最高?B B(4)特征耦合(Stamp Coupling)模块之间传递信息是数据结构,但被调用的只需要使用其中一部分数据元素时,就出现了特征耦合。将标记耦合修改为数据耦合Component AComponent BData Structure耦合耦合(Coupling)特征耦合举例“住户情况住户情况”是一个数据结构是一个数据结构,图中模块都与此图中模块都与此数据结构有关。数据结构有关。“计算水费计算水费”和和“计算电费计算电费”本无
22、关本无关,由于引用由于引用了此数据结构产生依赖关系了此数据结构产生依赖关系,它们之间也是特征它们之间也是特征偶合。偶合。计算水电费计算水电费计算水费计算水费计算电费计算电费住户情况住户情况水费水费电费电费住户情况住户情况(5)数据耦合(Data Coupling)两个模块之间只传递数据.数据耦合最简单数据耦合最简单,耦合度最低耦合度最低.Component AComponent B data耦合耦合(Coupling)计算顾客帐单计算顾客帐单计算借还金额计算借还金额借款数借款数利息利息时间时间借借 金金还还 额额内聚的概念:一个模块内部的各部分之间的紧密程度.内聚程度越高,模块内部元素互相联系
23、就越紧密.模块设计的原则:尽可能提高内聚.如果一个模块内的所有元素都是为了完成同一任务而设计的,则该模块的内聚高.内聚的程度取决于概要设计的模块分解方法.在进行功能分解时,应考虑到如何分解使一个模块只完成一个单一的功能,以提高模块有内聚.(1)偶然内聚(Coincidental Cohesion)一个模块完成几个彼此无必须联系的功能.可理解性差,难以解释该模块的作用,可修改性差、无法复用.Function DFunction EFunction CFunction BFunction ACoincidentalParts unrelatedBCDEDBAECA内聚内聚(Cohesion)(2)
24、逻辑内聚(Logical Cohesion)将几个在逻辑上具有似功能的功能段做成一个模块,通过传送数据决定执行哪个功能段.修改困难,增大了与其他模块的耦合度,浪费内存,效率低.Function A”Function AFunction ALogicalSimilar functionsFunction AFunction A”Function A内聚内聚(Cohesion)例如,一个函数同时实现了向文件输出、打印机输出、网络输出等,具体一次的输出需要例如,一个函数同时实现了向文件输出、打印机输出、网络输出等,具体一次的输出需要根据调用者的传递参数来决定。根据调用者的传递参数来决定。(3)时间性
25、内聚(Temporal Cohesion)几个功能经常在同一时间段内完成.例:将几个模块的初始化部分放在一个公共模块中执行.该模块的初值和文件要涉及到多个模块,加大了模块间的耦合度.Time to+2xTime to+xTime to TemporalRelated by time时间内聚和逻辑内聚模块都很难修改时间内聚和逻辑内聚模块都很难修改,因为这种模块同时要完成几个不同因为这种模块同时要完成几个不同的功能的功能,当修改其中一个功能时当修改其中一个功能时,必须必须检查所有的模块检查所有的模块,修改与该功能相关修改与该功能相关的部分的部分.内聚内聚(Cohesion)(4)过程内聚(Proc
26、edural Cohesion)一个模块内的处理元素是相关的,必须按特定顺序执行.一个功能通常是按一个确定的顺序执行的.当一个模块中的几个功能被分组的时候,就保证能按这个顺序执行.内聚内聚(Cohesion)读读 入入成绩单成绩单审审 查查成绩单成绩单读入并审读入并审 查查成成 绩绩 单单统计统计 成成 绩绩打打 印印成成 绩绩统计并打印统计并打印成成 绩绩 单单(5)通信内聚(Communicational Cohesion)模块中的所有功能都对相同的数据集合进行操作,产生相同的结果.通讯内聚经常破坏设计的模块化和功能的独立性.Function BFunction BFunction ACo
27、mmunicationalAccess same dataData内聚内聚(Cohesion)读文件读文件 合并合并修改修改文件文件计算计算B计算计算A打印检打印检验结果验结果读卡读卡 片文件片文件新新文文件件加工记录加工记录 使用使用A/B数数 据据A结结 果果B 结结 果果 A/B 数数 据据 A/B卡卡 片片 文件文件(6)功能内聚(Functional Cohesion)模块中所有处理元素都是为了完成同一个单一功能,所有必需的元素都包含在该模块中.Function A-part3Function A-part2Function A-part1FunctionalSequential w
28、ith complete,related functional内聚内聚(Cohesion)(7)信息性内聚如果模块有很多操作,每个操作都有自己的入口点和独立的代码,并且都对相同的数据结构执行操作,那么这个模块具有信息性内聚。典型的如对象。算多个地点的算多个地点的每日平均温度每日平均温度初始化求和初始化求和并打开文件并打开文件创建新的创建新的温度记录温度记录存储温存储温度记录度记录关闭文件并关闭文件并打印平均温度打印平均温度功能性内聚功能性内聚 偶然内聚偶然内聚 偶然内聚偶然内聚功能性内聚功能性内聚读取地点、读取地点、时间和温度时间和温度存储特定存储特定地点温度地点温度编辑地点、时间编辑地点、时间或温度字段或温度字段功能性内聚功能性内聚功能性内聚功能性内聚功能性内聚功能性内聚逻辑内聚逻辑内聚每个内聚的模块互联每个内聚的模块互联