您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 设计及方案 > 软件工程电子教案--第4章
山西大学商务学院教案2009—2010学年第二学期课程名称软件工程授课对象07信息与计算科学B1班授课教师刘忠宝教材版本软件工程导论张海藩著第1页第五章总体设计教学目标与要求1、掌握概要设计的基本概念与原理,理解软件结构设计的优化准则2.熟练使用概要设计阶段常用的几种图形工具3.理解面向数据的设计方法教学重点与难点重点:1、概要设计的基本概念与原理2、关注概要设计说明书的编写难点:面向数据的设计方法教学过程设计新课导入、案例教学、课堂讨论、课堂练习、作业讲评。教学方法以多媒体讲授为主,任务驱动+提问、讨论、指导、练习等方法。5.1软件设计基本概念一、软件设计过程:1、软件设计方法的内容软件开发阶段由设计、编码和测试三个基本活动组成,其中“设计”活动是获取高质量、低耗费、易维护软件的一个最重要环节。需求分析阶段获得的需求规格说明书包括对将要实现的系统在信息、功能和行为等各个方面的描述,这是软件设计的基础。对此不论采用何种软件设计方法都将产生:系统的总体结构设计(architecturaldesign);系统的数据设计(datadesign);系统的过程设计(proceduraldesign)。软件设计也可看作将需求规格说明逐步转换为软件源代码的过程。2、从工程管理的角度理解软件设计软件设计可分概要(preliminary)设计和详细(detail)设计两大步骤。概要设计是根据需求确定软件和数据的总体框架,详细设计是将其进一步精化成软件的算法表示和数据结构。而在技术上,概要设计和详细设计又由若干活动组成,除总体结构设计、数据结构设计和过程设计外,许多现代应用软件,还包括一个独立的界面设计活动。二、抽象与逐步求精1、抽象抽象是控制复杂性的基本策略。“抽象”要求人们将注意力集中在某一层次上考虑问题,而忽略那些低层次的细节。软件设计过程应当是在不同抽象级别上考虑和处理问题的过程。最初,应在最高抽象级别上,用面向问题域的语言叙述“问题”,概括“问题解”的形式,而后不断地具体化,不断地用面向过程通过总体设计的目标引出软件设计过程英语序列化要求第2页的语言描述问题,最后,在最低的抽象级别上给出可直接实现的“问题解”,即程序。软件工程过程的每一步都是对较高一级抽象的解作一次进一步具体化的描述。在上述由高级抽象到低级抽象的转换过程中,伴随着一连串的过程抽象和数据抽象。2.逐步求精关于“逐步求精”,N.Wirth曾经做过如下说明:“我们对付复杂问题的重要办法是抽象,因此,对一个复杂的问题不应该立即用计算机指令、数字和逻辑符号来表示,而应该用较自然的抽象语言来表示,从而得出抽象程序。抽象程序对抽象的数据进行某些特定的运算并用某些合适的记号(可能是自然语言)来表示。对抽象程序做进一步分解,进入下一个抽象层次,重复这一精化过程直到程序能被计算机接受为止。这时的程序可能是用某种高级语言或机器指令书写的。”(1)过程求精因为求精的每一步都是用更为详细的描述替代上一层次的抽象描述,所以在整个设计过程中产生的,具有不同详细程度的各种描述,组成了系统的层次结构。层次结构的上一层是下一层的抽象,下一层是上一层的求精。(2)与数据求精在过程求精的同时自然伴随着数据的求精,无论是过程还是数据,每一步细化都蕴涵着某些设计决策,因此设计人员必须掌握一些基本的准则,比较各种可能的候选方案。补充例子:学习辅导P59习题第1题:用逐步求精方法解决下述更新顺序主文件的问题三.模块化与信息隐藏1.模块化把软件划分为可独立命名和编制的部件,每个部件称为一个模块,当把所有模块组装到一起时,便可获得满足问题需要的一个解。假设:函数C(X)——问题X的复杂性;函数E(X)——求解问题X需要花费的工作量(时间);对于问题P1和P2,如果:C(P1)C(P2)则有:E(P1)E(P2)结论:解决一个复杂问题总比解决一个简单问题耗费更多的工作量。同时有:C(P1+P2)C(P1)+C(P2)结论:由P1、P2组合而成的问题的复杂性往往比考虑单个问题复杂性的通过实际事例引入"分而治之"的思想第3页和更大。于是有:E(P1+P2)E(P1)+E(P2)"分而治之":把复杂的问题分解成许多容易解决的小问题,原来的问题也就容易解决了。2.信息隐藏信息隐蔽原理告诉我们,模块应该设计得使其所含信息(过程和数据)对于那些不需要这些信息的模块不可访问;每个模块只完成一个相对独立的特定功能;模块之间仅仅交换那些为完成系统功能必须交换的信息,即模块应该独立。3.内聚度(cohesion)内聚度是前述信息隐蔽和局部化概念的自然扩展,它标志一个模块内部各成分彼此结合的紧密程度。内聚度按其高低程度可分为七级,内聚度越高越好。(1)偶然性内聚(coincidentalcohesion)。(2)逻辑性内聚(3)时间性内聚(4)过程性内聚(5)通信性内聚度(6)顺序性内聚(7)功能性内聚补充例子:学习辅导P59第2题:给出一层次图,确定每个模块的内聚类型4.耦合度耦合度是对软件结构中模块间关联程度的一种度量。耦合的强弱取决于模块间接口的复杂性、进入或调用模块的位置以及通过界面传送数据的多少等。耦合度也可以分为七级(1)非直接耦合(nodirectcoupling)(2)数据耦合(datacoupling)(3)特征耦合(stampcoupling)(4)控制耦合(controlcoupling)(5)外部耦合(externalcoupling)(6)公共耦合(commoncoupling)(7)内容耦合(contentcoupling)补充例子:学习辅导P59第3题:给出模块互连图,确定模块的耦合类型四.软件总体结构设计软件总体结构(softwarearchitecture)应该包括两方面内容:给出每种内聚的概念并举说明例给出每种耦合的概念并举说明例设计软件时应尽量使用数据耦合,减少控制耦合,限制外部环境耦合和公共数据耦合,杜绝内容耦合。第4页1)由系统中所有过程性部件(即模块)构成的层次结构,即程序结构;2)对应于程序结构的输入输出数据结构。软件总体结构设计的目标就是产生一个模块化的程序结构并明确各模块之间的控制关系,此外还要通过定义界面,说明程序的输入输出数据流,进一步协调程序结构和数据结构。1.结构演变2.同一个“问题”的多种软件解3.表示程序结构的工具类树图(tree-likediagram)Warnier-Orr图Jackson图4.有关程序结构的术语一个软件的深度(depth)—控制的层数;一个软件的宽度(width)—其控制的层数和跨度;一个模块的“扇出数”(fan-out)—该模块直接控制的其他模块数;一个模块的“扇入数”(fan-in)指能直接控制该模块的模块数。五.数据结构设计数据结构描述各数据分量之间的逻辑关系,数据结构一经确定,数据的组织形式、访问方法、组合程度及处理策略等随之而定,所以数据结构是影响软件总体结构的重要因素。数据结构与程序结构一样,也可以在不同的抽象级别上表示。六.设计过程总体设计过程通常由两个主要阶段组成:系统设计阶段,确定系统的具体实现方案;结构没计阶段,确定软件结构。典型的总体设计过程包括下述9个步骤:1.设想供选择的方案2.选取合理的方案3.推荐最佳方案4.功能分解5.设计软件结构6.设计数据库7.制定测试计划8.书写文档9.审查和复审5.2设计原理一.模块化由类树图引出有关程序结构的术语给出每个步骤的详细解释第5页二.抽象三.逐步求精四.信息隐藏和局部化5.3启发规则1.改进软件结构提高模块独立性2.模块规模应该适中3.深度、宽度、扇出和扇入都应适当4.模块的作用域应该在控制域之内5.力争降低模块接口的复杂程度6.设计单入口单出口的模块7.模块功能应该可以预测5.4描绘软件结构的图形工具一.层次图二.HIPO图三.结构图补充两个例子讲解结构图的画法例1:火车售票系统的数据流程图例2:已知某定货系统的需求分析DFD图如下,请按SD方法的设计步骤画出结构图在第1节讲过,在此强调一下结合事例对每条规则进行阐述让学生根据流程图试着画出结构图第6页产生最佳解结构图5.5面向数据流的设计方法面向数据流的设计方法,即通常所说的结构设计法(StructureDesign,简称SD方法),由Yourdon和Constantine等人于1974年提出的,与结构化分析(SA)相衔接,根据对数据流的分析设计软件结构。一.SD方法的设计过程和有关概念1.SD方法能方便地将数据流图转换为软件结构的步骤:(1).确定信息流的类型;(2).划定流界;(3).将数据流图映射为程序结构;(4).提取层次控制结构;本章重点内容层次图带编号的层次图第7页(5).通过设计复审和使用启发式策略进一步精化所得到的结构。2.变换流变换流—在基本系统模型(即顶级数据流图)中信息通常以“外部世界”所具有的形式进入系统,经过处理后又以这种形式离开系统。3.事务流——单个数据项称为事务(transaction)沿传入路径(也称接受通道)进入系统,由外部形式变换为内部形式后到达事务中心,事务中心根据数据项计值结果从若干动作路径中选定一条继续执行。4.设计过程面向数据流的设计过程二.变换分析变换分析是一系列设计步骤的总称,经过这些步骤把具有变换流特点的数据流图按预先确定的模式映射成软件结构。下面通过一个汽车数字仪表板的设计来介绍变换分析的过程。1、复查基本系统模型2、复查并精化数据流图确保数据流图给出目标系统的正确的逻辑模型,且使数据流图中每个处理都代表一个规模适中相对独立的子功能3、确定数据流图的类型确定数据流图是变换型数据流图还是事务型数据流图。4、确定输入流和输出流的边界,从而孤立出变换中心对面向数据流的设计过程进行详细讲解结合实例对变换分析的每一步骤进行详细阐述第8页5、进行“第一级分解”软件结构代表对控制的自顶向下的分配,所谓分解就是分配控制的过程。对于变换流的情况,数据流图被映射成一个特殊的软件结构,这个结构控制输入、变换和输出等信息处理过程。6、进行“第二级分解”第二级分解就是把数据流图中的每个处理映射成软件结构中一个适当的模块。完成第二级分解的方法是,从变换中心的边界开始沿着输入通路向外移动,把输入通路中每个处理映射成软件结构中Ca控制下的一个低层模块;然后沿输出通路向外移动,把输出通路中每个处理映射成直接或间接受模块Ce控制的一个低层模块;最后把变换中心内的每个处理映射成受Ct控制的一个模块。7、使用设计度量和启发式规则对第一次分割得到的软件结构进一步精化对第一次分割得到的软件结构,总可以根据模块独立原理进行精化。为了产生合理的分解,得到尽可能高的内聚、尽可能松散的耦合,最重要的是,为了得到一个易于实现、易于测试和易于维护的软件结构,应该对初步分割得到的模块进行再分解或合并。补充:以”家庭保安系统”为例,进一步对变换分析的各步骤进行讲述.三.事务分析当数据流具有明显的事务特征时,即能找到一个事务(亦称触发数据项)和一个事务中心,采用事务分析法更为适宜。事务分析法可概括为七个步骤:步骤一、复审基本系统模型;步骤二、复审并精化软件数据流图;步骤三、确定数据流图的特征;步骤四、指出事务中心,确定接收部分和发送部分的流界;步骤五、映射出系统上层模块结构;步骤六、分解并精化事务结构以及每条动作路径所对应的结构。步骤七、使用启发式设计策略,精化所得程序结构雏形,改良软件质量。这一步骤与变换分析法相同。四、设计优化原则我们努力追求的设计应该是既满足功能和性能的要求,又符合一般软件设计原理和上述种种启发式设计原则。对软件结构的修改越早越好。必要时,可以并行地开发若干个软件结构,通过评比,求得“最佳”结果。简洁的程序结构容易测试、容易维护,应该使用尽可能少的模块;只要满足信息要求,应该使用尽可能简单的数据结构。根据前面的基础,让学生自己的对补充的”家庭保安系统”进行变换分析以”家庭保安系统”进行事务分析第9页结构优化是一个精益求精的过程。优化过程可以在设计的早期,甚至要延续到详细设计乃至编码阶段。对时间有特殊要求
本文标题:软件工程电子教案--第4章
链接地址:https://www.777doc.com/doc-4841244 .html