【文档说明】软件概要设计课件.ppt,共(74)页,1.547 MB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-45335.html
以下为本文档部分文字说明:
第4章软件概要设计第四章软件概要设计4.1概要设计的任务和过程4.2概要设计的基本原理4.3软件模块化的优化原则4.4概要设计的方法小结思考与练习返回章目录第4章软件概要设计24.1概要设计的任务和过程软件概要设计的任务就是将软件的需求分析转化为软件的系统结构和数据结构。软件的概要设计一般包含数
据设计、体系结构设计、接口设计和过程设计,具体的的信息流如图所示:第4章软件概要设计3数据词典数据流图实体关系图状态转换图加工控制规规格格说说明明数据对象描述过程设计接口设计体系结构设计数据设计第4章软件概要设计4软件概要设计过程可以划分为两个主要阶段:系统设计和结构设计
。系统设计的任务是确定整个系统的具体实现方案。结构设计的任务则是确定软件的整体体系结构。一般来说,其过程可以分为如下几个步骤:1、设计系统的实现方案2、选取最佳、合理的设计方案3、任务分解4、确定软件结构5、系统数据结构设计
6、制定测试计划7、编写概要设计阶段的有关设计文档8、概要设计评审与复审第4章软件概要设计5在概要设计文档一般包含以下几个方面:1)概要设计说明书:给出系统目标、总体设计、数据设计、处理方式设计、运行设计以
及出错设计等。2)数据库设计说明书:给出本系统所使用的数据库的有关说明及其它相关的内容。3)用户手册:根据系统概要设计的结果修改和更正在需求分析阶段得到的初步的使用手册。4)初步的系统测试计划:给出系统
测试的基本策略、方法和测试步骤的明确要求。5)详细设计的实现计划:给出系统各个模块实现的详细的设计思路。返回节目录第4章软件概要设计64.2概要设计的基本原理4.2.1模块与模块独立性4.2.2抽象、信息隐蔽与局部化返回节目录第4章软件概要设计74.2.1模块与模块独立性所谓模块是
指可以单独命名且可以通过名字来访问的数据说明、可执行语句等程序对象的集合。将这些模块组装起来以满足整个问题的需求。将一个大的复杂问题分解为若干个小的易于理解的问题之后,实际的解决过程则变的简单了。这就是模块化的依据。当然,模块的划分不能够太随意和无限制。事实上,有时候模块的
划分过于细化反而会增加系统的整体工作量。模块化合软件的成本可以用下图来表示。第4章软件概要设计8第4章软件概要设计9模块的独立性是指模块和其它模块之间没有过多的相互作用,也就是说每一个模块都完成一个相对独立的特定的子功能。为
什么模块要具有独立性呢?一般有以下两个主要原因:1)一个相对独立的模块的功能较为单一,接口简单,易于开发。2)一个相对独立的模块比较容易测试和维护。模块的独立程度可以用两个定性的标准来度量,即模块的内聚性和耦合性。第4章软件
概要设计101.内聚性(cohesion)内聚是模块功能强度的度量,它标志一个模块内部各个元素彼此结合的紧密程度。一个理想的内聚程度高的模块应该只完成一种功能。一般模块的内聚性分为7种类型,它们的关系如下图所示。第4章软件概要设计11偶
然内聚(巧合内聚)ABCMMOVEOTORREADFILEFMOVESTOT模块M中的三个语句没有任何联系缺点:可理解性差,可修改性差例:第4章软件概要设计12逻辑内聚把几种相关功能(逻辑上相似的功能)组合在一模块内,每次调用由传给模块
的参数确定执行哪种功能。第4章软件概要设计13逻辑内聚模块ABCEFGABCEFGA1B1C1EFG模块内部逻辑E、F、G逻辑功能相似,组成新模块EFG缺点:增强了耦合程度(控制耦合)不易修改,效率低公用代码段公用代码段第4章软件概要设计14时间内聚(经典内聚)模块完成的功能必须在同一时间内执行
,这些功能只因时间因素关联在一起。例如:初始化系统模块、系统结束模块、紧急故障处理模块等均是时间性聚合模块.第4章软件概要设计15过程内聚(顺序性组合)模块内各处理成分相关,且必须以特定次序执行第4章软件概要设计16过程内聚模块读入
成绩单审查成绩单统计成绩打印成绩读入并审查成绩单统计并打印成绩单第4章软件概要设计17通信内聚模块内各部分使用相同的输入数据,或产生相同的输出结果第4章软件概要设计18通信内聚模块例产生工资报表计算平均工资职工工资记录职工工资报表平均工资产生职
工工资报表并计算平均工资模块第4章软件概要设计19信息内聚模块完成多个功能,各功能都在同一数据结构上操作,每一功能有唯一入口。第4章软件概要设计20信息内聚模块符号表查找登录删除修改几个加工同时引用一个共同的数据第4章软件概要设计21功能内聚
模块仅包括为完成某个功能所必须的所有成分。模块所有成分共同完成一个功能,缺一不可内聚性最强第4章软件概要设计22在软件的设计过程中,我们应该尽量使模块的内聚性强一些。为了做到这一点,一般遵循以下内聚性原则:(1)定量
使用信息内聚(2)少用通信内聚和过程内聚(3)限用时间内聚(4)禁用逻辑内聚第4章软件概要设计232.耦合性(coupling)耦合性是软件结构内不同模块之间相互关联程度的度量。耦合的强弱取决于模块之间接口的复杂程度、模块的调用方式以及通过接口的数据。和内聚性一样,我们通常也把模块的
耦合性分成7种类型,如下图所示。第4章软件概要设计24(1)无直接耦合两个模块没有直接关系(模块1和模块2),模块独立性最强。模块1模块2模块3模块4第4章软件概要设计25(2)数据耦合一模块调用另一模块时,被调
用模块的输入、输出都是简单的数据(若干参数)。属松散耦合。第4章软件概要设计26数据耦合举例开发票计算水费单价数量金额第4章软件概要设计27(3)标记耦合(复合型耦合)如两个模块通过传递数据结构(不是简单数据,而是记录、数
组等)加以联系,或都与一个数据结构有关系,则称这两个模块间存在标记偶合。第4章软件概要设计28标记耦合举例计算水电费计算水费计算电费住户情况水费电费住户情况“住户情况”是一个数据结构,图中模块都与此数据结构有关.“计算水费”和“计算电费”本无关,由于引用了此数据结构产生
依赖关系,它们之间也是标记偶合.第4章软件概要设计29将标记耦合修改为数据耦合举例计算水电费计算水费计算电费本月用水量本月用电量水费电费第4章软件概要设计30(4)控制耦合一模块向下属模块传递的信息(开关量、标志等控制被调用模块决策的变量)控制了被调用模块的内部逻辑。第4章软件概要设计3
1控制耦合举例A计算平均分或最高分B平均/最高(控制信号)成绩读入分数输出结果计算平均分计算最高分平均/最高?B第4章软件概要设计32控制耦合增加了理解和编程的复杂性,调用模块必须知道被调模块的内部逻辑,增加了相互依赖
(1)将被调用模块内的判定上移到调用模块中进行(2)被调用模块分解成若干单一功能模块去除模块间控制耦合的方法第4章软件概要设计33改控制耦合为数据耦合举例A计算平均分B1平均成绩最高成绩计算最高分B2第4章软件概要设计34(5)外部耦合一组模块均与同
一外部环境关联(例如,I/O模块与特定的设备、格式和通信协议相关联),它们之间便存在外部耦合。外部偶合必不可少,但这种模块数目应尽量少。第4章软件概要设计35(6)公共耦合(公共数据区耦合)一组模块引用同一个公用数据区(也称全局数据区、
公共数据环境)。公共数据区指:全局数据结构共享通讯区内存公共覆盖区等第4章软件概要设计36公共耦合举例A公共数据区CB模块A、B、C间存在错综复杂的联系第4章软件概要设计37(1)软件可理解性降低(2)诊断错误困难(3)软件可维护性差,(4)软
件可靠性差(公共数据区及全程变量无保护措施)慎用公共数据区和全程变量!!!公共耦合存在的问题第4章软件概要设计38(7)内容耦合一模块直接访问另一模块的内部信息(程序代码或数据)最不好的耦合形式!!!ABAB模块代码重叠Entry1……Entry1……多入
口模块第4章软件概要设计39耦合是影响软件复杂程度的一个重要因素,在软件设计过程中我们应该尽量降低模块的耦合性,一般采取如下的耦合性原则:(1)尽量使用数据耦合。(2)少用控制耦合。(3)限制使用公共耦合。(4)禁止使用内容耦合。第4章软
件概要设计404.2.2抽象、信息隐蔽与局部化1.抽象(abstract)所谓抽象就是是抽出事物的本质特性而暂时部考虑它们的细节。2.信息隐蔽(informationhiding)和局部化(localize)通常有效的模块化可以通过一组相互独立的模块来实现,这些模块的具体实现细
节对于其它模块来说是隐蔽的,也就是说对于不需要这些信息的模块来说,是不能访问的。这种设计思想叫信息隐蔽。局部化的概念和信息隐蔽概念是密切相关的。所谓局部化是指把一些关系密切的软件元素物理地放得彼此靠近。第4章软件概要设计414.3软件模块化的优化原则返回节目录1.改进软件的结构,提高模块独立性2.
模块大小应该适中3.软件的层次结构要合理4.模块的作用领域应该在控制领域之内5.力争降低模块接口的复杂程度6.设计单入单出的模块7.模块的内部功能应该可以预测第4章软件概要设计424.4概要设计的方法从系统设计的角度来看,常见的概要设计方法有3大类:(1)以数据流图为基础构造模块的结构化
程序设计方法(SD,structureddesign)。(2)以数据结构为基础构造模块结构的jackson方法和LCP(logicalconstructionofprograms)(wanier)逻辑构造方法。(3)以对象、类、继承和通信为基础的面向对象设计方法(OOD,object-
orienteddesign)。第4章软件概要设计43本节内容总结1、软件概要设计的任务就是将软件的需求分析转化为软件的系统结构和数据结构。2、模块的独立性7种内聚7种耦合第4章软件概要设计44作业复习本
章已讲内容,尤其是模块的独立性,内聚与耦合。课本84页2、6第4章软件概要设计45上节课内容回顾一概要设计的任务和内容:软件概要设计的任务就是将软件的需求分析转化为软件的系统结构和数据结构。软件的概要设计一般包含数据设计、体系结构设计、接口设计和过程设计。二概要设计的原理模块化、抽象化、信息隐
藏第4章软件概要设计46模块独立性的两个度量标准1.内聚性(cohesion)内聚是模块功能强度的度量,它标志一个模块内部各个元素彼此结合的紧密程度。第4章软件概要设计472.耦合性(coupling)耦
合性是软件结构内不同模块之间相互关联程度的度量。耦合的强弱取决于模块之间接口的复杂程度、模块的调用方式以及通过接口的数据。第4章软件概要设计48返回节目录试判断下列叙述是哪一种内聚?1)一组语句在程序中多处出现,为了节省内存空间把这些
语句放在一个模块中,该模块的内聚性是。2)将几个逻辑上相似的成分放在同一模块中,通过模块入口处的一个判断决定执行哪一种功能,该模块的内聚性是。逻辑内聚偶然内聚第4章软件概要设计493)模块中所有成分引用共同的数据,该模块的内聚性是。4)模块内
的某成分的输出是另外一些成分的输入,该模块的内聚性是。5)模块中所有成分结合起来完成一项任务,该模块的内聚性是。信息内聚过程内聚功能内聚第4章软件概要设计50请按照模块独立性由高到低排列下列耦合性:内容耦合、非直接耦合、标记耦合、外部耦合、数据耦合、公共耦合。非直接耦合外部耦合数据耦合公共耦合标记
耦合内容耦合模块独立性:由高到低第4章软件概要设计514.3软件模块化的优化原则返回节目录1.改进软件的结构,提高模块独立性2.模块大小应该适中3.软件的层次结构要合理4.模块的作用领域应该在控制领域之内5.力争降
低模块接口的复杂程度6.设计单入单出的模块7.模块的内部功能应该可以预测第4章软件概要设计52设计出软件的初步结构以后,应该审查分析这个结构,通过对模块的分解或合并,力求降低耦合提高内聚。例如,多个模块公有的一个子功能可以独立成一个模块,由这些模
块调用;有时可以通过分解或合并模块以减少控制信息的传递及对全程数据的引用,并且降低接口的复杂程度。第4章软件概要设计53模块过小则开销大于有效操作,而且模块数目过多将使系统接口复杂。因此过小的模块有时不值得单独存在,特别当只有一个模块调要
它时,通常可以把它合并到上级模块中去而不必单独存在。一般根据经验,模块的大小划分有如下经验标准:(1)按语句数划分语句数在50条左右的叫小型模块语句数在50~150条的叫中型模块语句数在250条左右的
叫大型模块,但最多不要超过500条语句。第4章软件概要设计54(2)按打印纸的张数划分小型模块:1页A4纸;中型模块:2~3页A4纸大型模块:3页以上A4纸第4章软件概要设计55所谓软件的层次结构是指软件中模块的深度、宽度、扇出和扇入都应适当。模块深度表示
软件结构中控制的层数,它往往能粗略地标志一个系统大小和复杂程度。模块的宽度是软件结构内同一个层次上的模块总数的最大值。一般来说,宽度越大系统越复杂。第4章软件概要设计56扇出是指一个模块调用模块的个数,扇出过大意味
着模块过分复杂,扇出过小会大大增加模块的深度,降低系统工作效率。扇入是指有多少个上级模块直接调用它,扇入越大则共享该模块的上级摸模块数目越多。第4章软件概要设计57模块的作用领域是指受该模块内一个判定影响的所有模块的集
合。模块的控制是这个模块本身以及所有直接或间接从属于它的模块的集合。模块的作用域应该包含该模块的控制域中。通常优化模块的作用域和控制域的方法是:(1)把进行条件判定的模块和它的上级模块进行合并。第4章软件概要设计58(2)受判定影响的模块和它的上级模块
合并。(3)把判定上移到足够高的层次。模块接口复杂是软件发生错误的一个主要原因。应该仔细设计模块接口,使得信息传递简单并且和模块的功能一致。第4章软件概要设计59模块的设计应该尽量避免使模块间出现内容耦合。如果一个模块的执行是从顶部进入模块并且从底部退出
来时,软件是比较容易理解的,因此也是比较容易维护的。第4章软件概要设计60模块的功能应该能够预测,如果一个模块只要输入的数据相同就产生同样的输出,这个模块的功能就是可以预测的。带有内部“存储器”的模块的功能可能是不可预测的,因为
它的输出可能取决于内部存储器的状态。由于内部存储器对于上级模块而言是不可见的,所以这样的模块既不易理解又难于测试和维护。第4章软件概要设计614.4概要设计的方法从系统设计的角度来看,常见的概要设计方法有3大
类:(1)以数据流图为基础构造模块的结构化程序设计方法(SD,structureddesign)。(2)以数据结构为基础构造模块结构的jackson方法和LCP(logicalconstructionofprograms)(wanier)逻辑构造方法。(3)以对象、
类、继承和通信为基础的面向对象设计方法(OOD,object-orienteddesign)。第4章软件概要设计621.结构图结构图是由yourdon提出来的进行软件结构设计的一种常用的图形工具。其基本图形符号有:第4章软件概要设计63如果两个或多个模块之间是选择调用关系则使用菱形符号表示
,如果多个模块之间是循环调用关系则使用带有箭头的弧线表示。如图:第4章软件概要设计642.面向数据流的结构化程序设计SD面向数据流的结构化设计过程一般遵循下列步骤:需求分析数据流图SD系统结构一般来说,各种系统的特征可以归纳为两种,即变换型数据流和事务型数据流。1)变换型结构变换型结构的系统
由三部分组成:传入路径、变换中心和传出路径。第4章软件概要设计65第4章软件概要设计662)事务型结构事务型结构的系统一般包含至少一条接受路径,一个事务中心和若干条活动路径。3)变换分析当由变换型数据流映射出软件的初始结构时,对变换型的数据流图进行分析要经过如下几
步:①识别系统的输入、输出以及变换中心。(把变换中心作为系统的主控模块)②进入下层模块的设计。③对系统进行改进和优化。第4章软件概要设计67例如有如下系统(图4-12):第4章软件概要设计68按上述分析方法对该系统进行分析得到系统结构图
如下(图4-13):第4章软件概要设计694)事务分析和变换型分析一样,由事务型数据流映射软件系统的初始化结构的过程也要经过几个步骤,它们是:①由数据流图确定事务和事务中心。②由事务流来映射软件的初始结构(
以事务中心为主控模块)。③细化下层模块。例如有如下系统(图4-14):第4章软件概要设计70则按上述方法得到的系统结构图为图4-15:第4章软件概要设计715)结构化设计方法的基本流程基于数据流的结构化设计过
程的首要任务是对数据流图进行分析,然后在此基础上判断系统是变换型还是事务型数据流,并根据系统的类型进行事务分析或变换分析,最后对系统的结构进行优化后得到系统的初始结构图。这个过程可以用右图来表示。返回节目录第4章软件概要
设计72第4章软件概要设计73小结软件的概要设计是整个系统开发阶段的第一步,其任务是在系统需求分析的基础上去着手实现软件需求,也就是解决“怎么做”的问题。软件概要设计的目的是使用比较抽象概括的方式确定系统如何实现软件需求,并确定组
成系统的每程序的结构。概要设计阶段应该遵循的基本原理是模块的独立性原理,应该使系统各个组成模块之间的接口尽可能的简单,即使模块具有高内聚、低耦合的特性。此外,在软件设计过程中,应该采用抽象的方法去分析系统的主要问题,从抽象到具体,自上而下逐步构造出系统的层次结构。返回节目录第4
章软件概要设计74作业:84页2.6