软件工程各章节重点.ppt
《软件工程各章节重点.ppt》由会员分享,可在线阅读,更多相关《软件工程各章节重点.ppt(211页珍藏版)》请在三一办公上搜索。
1、-软件设计,软件工程,内容提要,软件设计基础原理概要设计详细设计,软件设计,软件设计是软件开发的最重要阶段;是保证软件质量的重要步骤;软件设计是把用户需求准确转化为软件系统的唯一途径。,软件设计,软件设计是把软件需求转换为软件表示的过程。它包含两个阶段:概要设计将软件需求转化为数据结构和软件的系统结构。详细设计通过对结构表示进行细化,得到软件详细的数据结构和算法。,软件设计的基础概念,软件结构软件结构包括两部分,一是软件模块的层次结构;二是数据的结构。通常软件的体系结构通过一个划分过程来完成。该划分过程从需求分析确立的目标系统模型出发,对整个问题进行分解,使其每一部分用一个或几个软件成分加以解
2、决,从而解决整个问题。该过程可用下图形象表示:,P1,P2,P3,S1,S2,S3,软件设计的基本原理,抽象模块化逐步求精信息隐藏与局部化模块的独立性,抽象,抽象,即析取出事物的本质特征而不考虑他们的细节。抽象是人类认识复杂问题的重要思维工具之一。抽象的过程是从特殊到一般的过程,上层概念是下层概念的抽象。下层概念是上层概念的精化和细化。,模块化,模块是数据说明、可执行语句等程序对象的集合,它是单独命名的,并且可以通过名字来访问的。例如,过程。函数、子程序、宏等等都可作为模块。模块具有三个基本属性:功能模块实现的功能逻辑描述模块内部怎么做状态模块使用时的环境和条件,模块化,模块的特征:内部特征模
3、块的名字、参数等;外部特征完成模块功能的程序代码和模块内部数据。模块化,即把软件按照规定原则,划分为一个个较小的,相互独立的但又相互关联的部件。模块化实际上是系统分解和抽象的过程。,模块化,理想的模块每个模块只解决一个问题;每个模块的功能应该明确,使人容易理解;模块之间的联结关系简单,具有独立性;用理想模块构建的系统,容易使人理解,易于编程,易于测试,易于修改和维护。对用户来说,其感兴趣的是模块的功能,而不必理解模块内部的结构和原理。,模块化的理论依据,设函数C(x)定义问题x的复杂程度,函数E(x)确定解决问题x需要的工作量。对于两个问题P1和P2,如果有:C(P1)C(P2),则显然有:E
4、(P1)E(P2);根据人类解决一般问题的经验,有:C(P1+P2)C(P1)+C(P2);进而获得:E(P1+P2)E(P1)+E(P2)。,模块化的理论依据,此不等式表明:单独解决问题P1和P2所需的工作量之和,比把P1和P2合起来作为一个问题来解决所需要的工作量要少。这种“分而治之”的思想提供了模块化的理论依据:把复杂问题分解成许多容易解决的小问题,则原来复杂的问题也就容易解决了。,模块化与软件成本,成本或工作量,模块数目,模块成本,接口成本,最小成本区,软件总成本,M,模块化,采用模块化原理使软件结构清晰,不仅容易设计也容易阅读和理解:因为程序错误通常局限在有关的模块及它们之间的接口中
5、,所以模块化使软件容易调试和测试,有助于提高软件的可靠性;因为变动往往只涉及少数几个模块,所以模块化能够提高软件的可修改性;模块化也有助于软件项目的组织管理,一个复杂的大型软件可以有许多程序员分工编写,进而提高了开发效率。,逐步求精,逐步求精是人类解决复杂问题的基本技术之一,它是把问题的求解过程分解成若干步骤或阶段,每步都比上步更精化,更接近问题的解法。为了能集中精力解决主要问题而尽量推迟问题细节的考虑。它可以看作是一项把一个时期必须解决的种种问题按优先级别排序的技术。逐步求精和抽象是一对互补的概念。,信息隐藏和局部化,应用模块化原则,自然会产生一个问题“为了得到一组模块,应该怎样分解软件呢?
6、”信息隐藏原理指出:应该这样设计和确定模块,使得一个模块内包含的信息对不需要这些信息的模块来说是不能访问的。局部化指把一些关系密切的软件元素放得彼此靠近。显然,局部化有助于信息隐藏。,信息隐藏和局部化,实际上应该隐藏的不是模块的一切信息,而是模块的实现细节。因此这条原理也被称作“细节隐藏”。隐藏,意味着有效的模块化可以通过定义一组独立的模块而实现,这些独立的模块彼此间仅仅交换那些为了完成系统功能而必须交换的信息。信息隐藏和局部化有助于软件测试和维护!,模块独立性,模块独立性是模块化、信息隐藏和局部化等概念的直接结果。,为什么模块独立性很重要?有效模块化的软件比较容易开发出来;独立的模块比较容易
7、测试和维护。总之,模块独立是设计好坏的关键!,模块独立的含义:模块完成独立的功能,与其他模块的接口简单;符合信息隐蔽和信息局部化原则;模块间关连和依赖程度尽可能小。,模块独立的度量,模块的独立程度可由两个定性标准来衡量:耦合耦合衡量不同模块彼此间相互依赖的紧密程度;内聚内聚衡量同一模块内部各元素彼此组合的紧密程度;,耦合性,耦合是程序结构内不同模块之间相互关联的度量,是影响软件复杂程度和设计质量的重要因素。耦合强度依赖的因素:一模块对另一模块的引用一模块向另一模块传递的数据量一模块施加到另一模块控制的数量模块间接口的复杂程度,设计目标:低耦合(建立模块间耦合尽可能松散的系统),耦合度,耦合性,
8、模块独立性,数据耦合,控制耦合,公共环境耦合,内容耦合,特征耦合,外部耦合,非直接耦合,非直接耦合(Nodirect Coupling),两个模块没有直接关系(模块1和模块2),它们之间的联系完全是通过主模块的控制和调用来实现,非直接耦合是模块独立性最强的。,数据耦合(Data Coupling),一模块调用另一模块时,彼此之间是通过简单数据参数(不是控制参数、公共数据结构和外部变量)来交换输入、输出信息。属松散耦合。,开发票,计算水费,单价数量,金额,特征耦合(Stamp Coupling),如两个模块之间是通过传递数据结构(不是简单数据,而是记录、数组等)加以联系,或都与一个数据结构有关系
9、,则称这两个模块间存在特征偶合。,计算水电费,计算水费,计算电费,住户情况,水费,电费,住户情况,“住户情况”是一个数据结构,图中模块都与此数据结构有关。“计算水费”和“计算电费”本无关,由于引用了此数据结构产生依赖关系,它们之间就是特征偶合。,特征耦合,将特征耦合改为数据耦合:,计算水电费,计算水费,计算电费,本月用水量,水费,电费,本月用电量,控制耦合(Control Coupling),一模块向下属模块传递的信息控制了被调用模块的内部逻辑。如开关量、标志、名称等控制决策的变量,控制选择了被调用模块的功能。,A,Flag,F1,F2,Fn,Flag,.,B,控制耦合举例-1,控制耦合举例-
10、2,A,B计算平均分或最高分,平均/最高(控制信号),成绩,读入分数,输出结果,计算平均分,计算最高分,平均/最高?,B,控制耦合,控制耦合增加了理解和编程的复杂性,调用模块必须知道被调模块的内部逻辑,增加了模块间的相互依赖关系。去除模块间控制耦合的方法:将被调用模块内的判定上移到调用模块中进行;被调用模块分解成若干单一功能模块。,控制耦合,修改控制耦合为数据耦合:,A,B1计算平均分,平均成绩,B2计算最高分,最高成绩,外部耦合(External Coupling),一组模块均与同一外部环境关联(例如,I/O模块与特定的设备、格式和通信协议相关联),它们之间便存在外部耦合。外部偶合必不可少,
11、但这种模块数目应尽量少。,公共环境耦合,一组模块引用同一个公用数据区(也称全局数据区、公共数据环境)。其中,公共数据区指:全局数据结构共享的通讯区内存的公共覆盖区等,公共环境耦合,公共耦合的复杂程度随耦合模块的个数增多而显著增加。若只有两个模块间存在公共数据环境,则公共耦合有两种情况,松散公共耦合和紧密公共耦合。,A,B,公共数据区,A,B,公共数据区,a.松散公共耦合,b.紧密公共耦合,公共环境耦合存在的问题,软件可理解性降低诊断错误困难软件可维护性差,软件可靠性差公共数据区及全程变量无保护措施 慎用公共数据区和全程变量!,内容耦合(Content Coupling),如果发生下列情形之一,
12、两模块之间就产生了内容耦合:一个模块直接访问另一模块的内部数据;一个模块不通过正常入口转到另一模块的内部;两个模块有部分程序代码重叠;一个模块有多个入口。,一模块直接访问另一模块的内部信息(程序代码或数据),A,B,A,B,模块代码重叠,Entry1 Entry2,多入口模块,如何降低模块间耦合度,尽量使用数据耦合少用控制耦合限制公共环境耦合的范围坚决避免使用内容耦合 降低接口的复杂性,内聚性,内聚指一个模块内部元素在功能上相互关联的强度(彼此结合的紧密程度),它是信息隐藏和局部化概念的扩展。设计目标:高内聚(模块在软件过程中完成单一的任务),内聚性,模块独立性,偶然内聚,逻辑内聚,时间内聚,
13、过程内聚,通信内聚,信息内聚,功能内聚,内聚性,偶然内聚(Concidental Cohesion),含义:模块内各部分之间没有联系,或者即使有联系,这种联系也很松散。如:A、B两个模块含有相同的一段代码C,程序员为了节约内存,而将A、B放在同一模块内,以共享C,模块AB即为偶然内聚。,缺点:可理解性差,可修改性差,A,B,AB,偶然内聚例子,A,B,C,MOVE O TO RREAD FILE FMOVE S TO T,M,模块M中的三个任务没有任何联系,逻辑内聚(Logical Cohesion),把几种相关的功能(逻辑上相似的功能)组合在一模块内,每次调用时,由传给模块的判定参数来确定该
14、模块应执行哪一个功能。,!逻辑内聚导致模块间的控制耦合,调用模块,判定,读一个记录,写一个记录,被调用模块,E、F、G逻辑功能相似,组成新模块EFG,缺点:增强了耦合(控制);不易修改,效率低,逻辑内聚例子,时间内聚(Classical Cohesion),这种模块大多为多功能模块,但模块内的各个功能的执行与时间有关,通常要求所有功能必须在同一时间内执行,这些功能只因时间因素关联在一起。,例如:系统初始化模块、系统结束模块、紧急故障处理模块等均是时间性内聚模块.,过程内聚(Procedural Cohesion),模块内各处理成分相关,且必须以特定次序执行。使用流程图作为工具设计程序时,把流程
15、图中的某一部分划出来组成模块,就得到过程内聚模块。例如,把流程图中的循环部分、判定部分、计算部分分成三个模块,这三个模块都是过程内聚模块。,通信内聚(Communication Cohesion),如果一个模块内各功能部分使用了相同的输入数据,或产生了相同的输出结果,则称之为通信内聚模块。通常,通信内聚模块是通过数据流图来定义的。,打印报告A,打印报告B,打印报告C,计算A,计算B,保存,学生信息,通信内聚例子,产生职工工资报表并计算平均工资模块,产生工资报表,计算平均工资,职工工资记录,职工工资报表,平均工资,通信内聚例子,信息内聚(Informational Cohesion),模块完成多
16、个功能,各功能都在同一数据结构上操作,每一功能有唯一的入口点。这个模块将根据不同的要求,确定该执行哪个功能。由于这个模块的所有功能都基于同一个数据结构(符号表),因此,它是一个信息内聚模块,信息内聚例子,符 号 表,查找,登录,删除,修改,功能内聚(Functional Cohesion),一个模块中各个部分都是完成某一具体功能必不可少的组成部分,或者说该模块中所有部分都是为了完成一项具体功能而协同工作,紧密联系,不可分割。内聚性最强!,耦合与内聚的关系,内聚与耦合密切相关,同其它模块强耦合的模块意味着弱内聚,强内聚模块意味着与其它模块间松散耦合。耦合与内聚都是模块独立性的定性标准,都反映模块
17、独立性的良好程度。但耦合是直接的主导因素,内聚则辅助耦合共同对模块独立性进行衡量。,概要设计,概要设计的基本目的概要设计的基本任务概要设计过程结构化设计方法面向数据流的设计方法概要设计工具层次图和HIPO图结构图,概要设计的基本目的,概要设计的基本目的就是回答“概括的说,系统应该如何实现?”,概要设计的基本任务,确定软件系统的结构和数据库结构划出组成系统的物理元素:程序、文件、数据库、人工过程和文档等等;设计软件结构,即确定系统由哪些模块组成,以及这些模块之间的相互关系(接口)。,概要设计的主要工作是:完成模块分解即每个模块的功能说明!,概要设计过程,设想供选择的方案选择合理的方案推荐最佳方案
18、功能分解设计软件结构数据库设计制订测试计划编写文档审查和复审,设想供选择的方案,在概要设计开始时,只有系统的逻辑模型,分析人员有充分的自由比较分析不同的物理实现方案。设想供选择的方案的一种通常的做法是,设想数据流图中的处理分组的各种可能的方法,抛弃技术上行不通的分组方法,余下的分组方法代表可能的实现策略,并且可以启示供选择的物理系统。,选取合理的方案,在数据流图的基础上,一个边界一个边界设想并列出可供选择的方案。通常,选择的这些方案中至少应包括低成本、中成本和高成本的三种方案;对每个合理方案要提供以下几方面资料:系统流程图;数据字典;成本、效益分析;实现这个系统的进度计划。,推荐最佳方案,分析
19、人员应该在综合分析对比各种合理方案利弊,推荐一个最佳方案,并为推荐的方案拟定详细的实现计划。用户和有关的技术专家应该认真审查分析员所推荐的最佳系统,如果系统符合用户的需求,并且在现有条件下完全能够实现的。则应该提请使用部门负责人进一步审批。在使用部门负责人也接受了分析员的推荐方案之后,才可以进入下一个环节。,对分析结果进一步细化,再进行功能分解。,需要通过软件解决的“问题”,S1,S2,S3,S4,S5,软件的“解决方案”,功能分解,设计软件结构,软件结构反映系统中模块的相互调用关系:顶层模块调用它的下层模块以实现程序的完整功能,每个下层模块再调用更下层的模块,最下层的模块完成最具体的功能;软
20、件结构通过层次图或结构图来描述,可以直接从DFD映射出软件结构。,数据库设计,数据库应用越来越广泛,目前大多数的系统都要用到数据库技术。数据库设计是一项专门的技术,包括模式设计、子模式设计、完整性和安全性设计和优化处理等。,制订测试计划,在软件开发的早期阶段提前考虑软件的测试计划是很有必要的。这样能促使软件设计人员在设计时注意到软件的测试问题,从而有利于提高软件的可测试性。,文档编写,概要设计阶段需要编写的文档包括:系统说明书;用户手册;测试计划;详细的实现计划;数据库设计结果;,审查与复审,最后应该对概要设计的结果进行严格的技术审查,然后再提交使用部门负责人从管理角度进行审查。,概要设计准则
21、,改进软件结构提高模块独立性模块适当的深度、宽度、扇出和扇入模块判断作用范围应在其控制作用范围内力争降低模块接口的复杂度设计单入口单出口的模块模块功能应该是可以预测的,改进软件结构提高模块独立性,设计出软件的初步结构以后,应该审查分析该结构,通过模块分解或合并,力求降低耦合提高内聚。例如,多个模块公有的一个子功能可以独立成一个模块,由这些模块调用;有时也可以通过分解或合并模块以减少信息传递对全局数据的引用,并降低接口的复杂性。模块大小适中,一般一个模块包含的语句在3050条左右较好。,模块适度的宽度、深度、扇出和扇入,深度:软件结构中模块的层数宽度:软件结构内同一层的模块总数的最大值扇出:一个
22、模块所调用(直属下级)的模块个数(控制在7以内)扇入:有多少上级模块调用它经验证明,一个设计好的软件结构,通常顶层扇出比较高,中层扇出比较少,底层有高扇入。,模块适当的深度、宽度、扇出、扇入,M,a,b,c,d,e,l,m,f,g,h,n,o,p,q,i,j,r,Depth,Fan-in,Fan-out,Width,控制作用范围:本身及其所有下级模块判断作用范围:被判断调用的模块对于任何一个内部存在判断调用的模块,它的判断作用范围应该是其控制作用范围的一个子集;,模块G中有一条判断调用模块D的语句。,判断作用范围应在控制作用范围内,存在判断调用的模块所在层次不要与那些属于判断作用范围的模块所在
23、的层次相隔太远。,模块C中有一条判断调用模块G的语句。相隔太远,正确,判断作用范围应在控制作用范围内,力争降低模块接口的复杂性,模块接口的复杂度是软件发生错误的一个主要原因。应该仔细设计模块接口,使得信息传递简单并且和模块的功能一致。接口复杂或不一致(即看起来传递的参数之间没有联系),是高耦合和低内聚的征兆,应该重新分析这个模块的独立性。,设计单入口单出口的模块,即不要使模块间出现内容耦合,模块功能应该是可以预测的,只要输入的数据相同就产生相同的输出数据,这个模块的功能就是可以预测的;模块的功能应该可以预测,但也要防止模块功能过分局限。,概要设计工具,层次图(Hierarchy Chart)输
24、入/处理/输出图(IPO)HIPO图结构图(Structure Chart),层次图,层次图用来描绘软件的层次结构的图形工具。,IPO图,HC图中的每一个模块,均可用一张IPO图来描述。IPO 图由输入、处理和输出三个框组成,需要时还可以增加一个数据文件框。IPO图在需求分析阶段主要用来描述系统的主要算法。,IPO图例子(班务管理系统),IPO图1 财务查询,IPO图1 表示了财务查询系统,它讲述如何查询学生缴费情况,并且验证其是否准确,HIPO图,HIPO图即HC加IPO层次图加上编号称为H图。在层次图的基础上,除最顶层的方框之外,其余每个方框都加了编号。层次图中每一个方框都有一个对应IPO
25、图(表示模块的处理过程)。每张IPO图应增加编号与其表示的(对应的)层次图编号一致。,结构图(SC),结构图是SD方法在概要设计中的主要表达工具,约定:一个方框代表一个模块,框内注明模块的名称或主要功能;方框之间的箭头表示模块的调用关系;尾部带空心圆的短箭头表示数据信息,尾部带实心圆的短箭头表示控制信息。,数据信息,控制信息,结构图,例1:,编辑学生记录,读学生记录,学生数据,无此学生,学号,结构图,例2:,产生最佳解,得到好输入,计算最佳解,输出结果,读输入,编辑输入,结果格式化,显示结果,解,解,解,好输入,原始输入,编辑结果,原始输入,格式化的解,格式化的解,结构图,结构图中还有一些附加
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件工程 各章 重点
链接地址:https://www.31ppt.com/p-6206861.html