软件设计概述(精)

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

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

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

资源描述

第五章软件设计概述讨论要点如何将分析模型转换成软件设计?作为软件工程师在软件设计方面应使用哪些基本原则和概念?§5.1软件设计的目标和任务§5.2软件设计基本概念§5.3模块化设计§5.4其他设计问题的处理§5.5设计文档及其复审教学内容:教学目的及要求:深刻理解软件设计阶段的概念和任务;掌握模块化设计的思想;§5.1软件设计的任务软件需求:解决“做什么”软件设计:解决“怎么做”软件设计的任务问题结构(软件需求)软件结构;从软件需求规格说明书出发,形成软件的具体设计方案。映射1.软件的总体结构主要回答的问题软件的组成部分软件的层次关系模块的内部处理逻辑模块之间的界面2.软件设计的问题工具—如何描述软件的总体结构方法—用什么方法有问题结构导出软件结构评估准则—什么样的软件结构是“最优的”3.软件设计方法结构化设计方法(SD)面向数据结构的设计方法(JSD方法)面向对象的设计方法(OOD)4.软件设计分为两个阶段:(1)概要设计(总体设计)确定软件的结构以及各组成成分(子系统或模块)之间的相互关系。(2)详细设计确定模块内部的算法和数据结构,产生描述各模块程序过程的详细文档。结构化设计方法模块设计体系结构设计软件设计的任务----确定系统怎么做•结构化设计活动划分为两个阶段:确定系统的整体体系结构----总体设计确定各模块的具体实现----详细设计界面设计构件级程序设计•表示工具:总体设计详细设计层次图(Hierarchy)IPO图(Input-Process-Output)模块说明程序框图盒图(N-S图)决策表PDL语言§5.2软件设计的基本概念1.模块与构件2.抽象与细化3.信息隐蔽4.软件复用1.模块与构件模块化:把程序划分成若干个模块,每个模块完成一个子功能,把这些模块集总起来组成一个整体,可以完成指定的功能,满足问题的功能。模块:一个拥有明确定义的输入、输出和特性的程序实体。1.模块与构件构件:可重复使用的软件组件。经过适当设计和实现的类也可以称为构件,他们在某个领域中具有一定的通用性,可以在不同的计算机软件系统中复用。将这些构件储存起来变成一个构件库,就为基于构件的软件开发模型提供了技术基础。模块模块是具有一定功能的可以用名词调用的程序语句集合,如:独立的汇编程序COBOL的段和节Pascal过程FORTRAN的子程序结构化设计的适用范围尤其适用于采用结构化程序设计实现的系统;结构化设计并不是一种广泛适用的系统设计技术;结构化设计的结果。SA与SD的关系结构化分析的结果结构化设计的工具数据流图初始结构图数据字典设计数据字典伪码实现方面伪码实体关系图数据库设计事务框图分层、细化事务模型SD来源于SA来源:结构化分析来源:结构化分析来源:结构化分析数据流图字典项伪码实体关系图事务框图环境的限制质量的标准转化分析细化设计进入实现阶段初始结构框图概要设计的基本概念将系统划分成模块决定每个模块的功能决定模块的调用关系决定模块的界面,即模块间传递的数据结构化设计(SD方法)概要相对独立、单一功能的模块块间联系和块内联系描述方法步骤2.抽象(Abstraction)与细化抽象:解决问题时只考虑与问题有关的方面,不考虑与问题无关的方面。即抽出事物的本质特性而不考虑细节。抽象(Abstraction)抽象原则应用举例WindowsNT一体化的I/O系统设计文件管理网络管理设备管理高速缓冲存储器OS对虚拟文件的字节流,虚拟文件可为任何设备和实体抽象细化:即分解。在逐步细化中,特别强调这种分解的“逐步”性质,即每一部分仅较其前一部增加“少量”的细节。这样,在相邻两部之间就只有微小的变化,不难验证它们的内容是否等效。3.信息隐蔽(InformationHiding)信息隐蔽的含义:有效的模块化可以通过定义一组独立模块来实现,这些模块相互之间只交流软件功能必需的信息。换句话说:模块所包含的信息,不允许其它不需要这些信息的模块访问,独立的模块间仅仅交换为完成系统功能而必须交换的信息。信息隐蔽:对模块内部信息访问的约束信息隐蔽的基本原则:功能独立,高内聚且低耦合高可复用性的期望:•功能复用是代码级的,它基于必要的功能理解,而功能的语义是不一致的、多理解的。•希望软件复用是全方位的,不但是代码级的复用,还应该有源程序级的复用。面向对象方法的高可复用性:对象的语义表示是唯一的,这使得代码级的复用简单且自然。类的继承性是源程序级的复用机制,它允许用已有的程序构架来简单地构造新的应用。并且仍保持高维护性,这种技术带来复用概念的新突破。4.软件复用:利用已有的现成构件,不必一切都从头做起。§5.3模块化设计1.分解2.模块独立性内聚耦合自顶向下与自底向上设计模块化(Modularity)模块化是好的软件设计的一个基本准则从整体上把握问题,隐蔽细节复杂问题较小问题分解可减小解题所需的总的工作分解C(p1)C(p2)则E(p1)E(p2)其中:p1和p2是两个问题C(x)是由x问题决定的复杂性E(x)是解决x问题所需要的工作量C(p1+p2)C(p1)+C(p2)E(p1+p2)E(p1)+E(p2)试验发现模块划分得越小成本越低,但是集成成本却随着模块划分得越小成本越高。如何确定模块化分的最小成本区,并保证模块的最佳性能,是设计活动中的主要任务之一。1.分解"各个击破"理论模块数与开发工作量的关系成本或工作量模块数量软件总成本集成成本成本/模块M最小成本区域2.模块的独立性①模块独立性的概念模块完成独立的功能符合信息隐蔽和信息局部化原则模块间关连和依赖程度尽量小②模块独立性的度量模块独立性取决于模块的内部和外部特征。SD方法提出的定性的度量标准:模块自身的内聚性模块之间的耦合性•偶然内聚:各成分之间并没有关系,只是把分散在多处的功能合在一起•逻辑内聚:仅仅是逻辑功能相关成分合在一起•时间内聚:必须在同一时间执行,并无功能逻辑的成分合在一起•过程内聚:过程顺序相关的功能成分合在一起•通讯内聚:需要对相同的外部数据进行操作的成分合在一起•顺序内聚:一个内部成分的输出是另一个内部成分的输入,将它们合起来•功能内聚:只完成单一的功能低高•内容耦合:一个模块直接修改另一个模块的内容•公共耦合:两个以上的模块共同引用一个全局数据•外部耦合:若允许一组模块访问同一个全局变量•控制耦合:接收模块的动作依赖于控制信号•标记耦合:两个模块接口的参数包含相同的内部结构•数据耦合:仅是模块之间的数据传递•非直接耦合:模块之间没有消息传递低高内聚----模块内部各成分之间的关联程度耦合----模块之间的依赖程度2.模块独立性的度量之一:内聚性一个模块内部各成分之间相互关联的强度设计目标:高内聚(一模块的所有成分都直接参与并且对于完成同一功能来说都是最基本的)软件设计的概念和原理内聚:一个模块内各个元素彼此结合的紧密程度。偶然内聚:一个模块完成一组任务,任务之间的关系很松散。公共语句。逻辑内聚:若干个逻辑功能类似的任务组成一个模块。时间内聚:若干个任务必须在同一段时间内执行。如初始化工作。低内聚中内聚高内聚过程内聚:模块内的处理元素是相关的,且必须以特定次序执行。通信内聚:模块中所有元素都使用同一个输入数据,和/或产生同一个输出数据。顺序内聚:模块中所有处理元素和同一个功能密切相关,且这些处理必须顺序执行。功能内聚:所有处理元素属于一个整体,完成一个单一的功能。模块A模块B模块CS1;S2;模块A模块B模块C模块A模块B模块C模块D模块的内聚性类型:低巧合内聚内逻辑内聚聚时间内聚性过程内聚通信内聚信息内聚高功能内聚模块独立性弱(功能分散)强(功能单一)(1)巧合内聚(偶然内聚)模块内各部分间无联系ABCMMOVEOTORREADFILEFMOVESTOT模块M中的三个语句没有任何联系缺点:可理解性差,可修改性差。例:(2)逻辑内聚把几种相关功能(逻辑上相似的功能)组合在一模块内,每次调用由传给模块的参数确定执行哪种功能。逻辑内聚模块ABCEFGABCEFGA1B1C1EFG模块内部逻辑E、F、G逻辑功能相似,组成新模块EFG公用代码段公用代码段缺点:增强了耦合程度(控制耦合)不易修改,效率低。(3)时间内聚模块完成的功能必须在同一时间内执行,这些功能只因时间因素关联在一起。例如:初始化系统模块、系统结束模块、紧急故障处理模块等。(4)过程内聚模块内各处理成分相关,且必须以特定次序执行。过程内聚模块建立方程组系数矩阵全部任务纳入一个模块,得到一过程性模块高斯消去法回代高斯消去法解题流程过程内聚模块读入成绩单读入并审查成绩单审查成绩单统计成绩打印成绩统计并打印成绩(5)通信内聚模块内各部分使用相同的输入数据,或产生相同的输出结果。通信内聚模块例产生工资报表计算平均工资职工工资记录职工工资报表平均工资产生职工工资报表并计算平均工资模块通信内聚模块例开领书单登记售书发票领书单售书登记表文件删除修改(6)顺序内聚一个内部成分的输出是另一个内部成分的输入,将它们合起来。顺序内聚模块建立方程组系数矩阵高斯消去法回代高斯消去法解题流程(7)功能内聚模块仅包括为完成某个功能所必须的所有成分。(模块所有成分共同完成一个功能,缺一不可)内聚性最强功能内聚模块建立方程组系数矩阵高斯消去法回代高斯消去法解题流程模块独立性的度量之二:耦合性是模块间相互依赖程度的度量,耦合的强弱取决于模块间接口的复杂程度,进入或访问一个模块的点,以及通过接口的数据。耦合性越高,模块独立性越弱内容耦合:一个模块直接修改另一个模块的内容公共耦合:两个以上的模块共同引用一个全局数据外部耦合:若允许一组模块访问同一个全局变量控制耦合:模块之间传递的参数含有控制信息标记耦合:两个模块接口的参数包含相同的内部结构数据耦合:模块之间通过参数交换数据信息。非直接耦合:模块之间没有消息传递低高耦合----模块之间的依赖程度软件设计的概念和原理----耦合1.非直接耦合2.数据耦合3.特征耦合4.控制耦合5.外部耦合6.公共耦合7.内容耦合弱耦合中耦合较强耦合强耦合模块1模块2模块3模块4数据耦合通过简单变量交换数据特征耦合通过数据结构交换数据非直接耦合模块之间没有信息传递模块A模块B模块C模块D模块L模块N全局性数据结构公共耦合Flag=1?S1S2模块1控制耦合模块之间传递的是控制信息TF全局性简单变量外部耦合模块A模块B内容耦合•访问其它模块的内部数据•直接跳到其他模块内部执行无耦合-没有依赖关系松散耦合-有少量依赖关系紧密耦合-有很多依赖关系耦合强度依赖的因素:一模块对另一模块的引用一模块向另一模块传递的数据量一模块施加到另一模块的控制的数量模块间接口的复杂程度模块间耦合的类型:低非直接耦合耦数据耦合合标志耦合性控制耦合外部耦合公共耦合高内容耦合模块独立性弱(低耦合)强(中耦合)(较强耦合)(强耦合)(1)非直接耦合两个模块没有直接关系(模快1和模快2),模块独立性最强。模块1模块2模块3模块4(2)数据耦合一模块调用另一模块时,被调用模块的输入、输出都是简单的数据,属松散耦合。数据耦合举例开发票计算水费单价数量金额数据耦合举例计算水电费计算水费计算电费用水量用电量水费电费(3)标记耦合(特征耦合)如两个模块通过传递数据结构(不是简单数据,而是记录、数组等)加以联系,或都与一个数据结构有关系,则称这两个模块间存在标记偶合。标记耦合举例计算水电费计算水费计算电费住户情况水费电费住户情况“住户情况”是一个数据结构,图中模块都与此数据结构有关。“计算水费”和“计算电费”本无关,由于引用了此数据结构产生依赖关系,它们之间也是标记偶合。将标记耦合修改为数据耦合举例计算水电费计算水费计算电费本月用水量本月用电量水费电费(4)控制耦合一模块通过开关量、标志、名字等控制信息,明显地控制另一模块的功能。控制耦合举例A计算平均分或最高分B平均/最高成绩控制耦合举例读入分数输出结果计算平均分计算最高分平均/最高?

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

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

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

×
保存成功