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