《软件工程导论》第五章总体设计.ppt
《《软件工程导论》第五章总体设计.ppt》由会员分享,可在线阅读,更多相关《《软件工程导论》第五章总体设计.ppt(133页珍藏版)》请在三一办公上搜索。
1、总体设计,第五章,山东师范大学信息科学与工程学院 王化雨,09-10 学 年 第 一 学 期张海藩软件工程导论(第5版),2009年10月,2023/6/1,2,主要内容,概述设计过程设计原理启发规则描述软件结构的图形工具面向数据流的设计方法,2023/6/1,3,将分析模型转换为设计,数据词典,状态转换图,过程设计,接口设计,体系结构设计,数据设计,2023/6/1,4,软件设计是后续开发步骤及软件维护工作的基础。如果没有设计,只能建立一个不稳定的系统结构,软件设计的必要性,2023/6/1,5,软件设计的两个阶段,从工程管理的角度来看,软件设计分两步完成。概要设计,将软件需求转化为数据结构
2、和软件的系统结构。详细设计,即过程设计。通过对结构表示进行细化,得到软件的详细的数据结构和算法。,2023/6/1,6,总体设计的任务,经过需求分析,系统必须“做什么”已经清楚了,现在要决定“怎样做”。总体设计又称为概要设计或初步设计。总体设计的任务:划分出组成系统的物理元素:程序、文件、数据库、人工过程、文档等。设计软件的结构,即确定系统中每个程序是由哪个模块组成,模块间的关系如何。,2023/6/1,7,总体设计的步骤,以需求分析中得到的数据流图为基础,寻找实现目标系统的各种不同方案;为其中每一个合理方案,准备一份系统流程图,列出组成系统的所有物理元素,进行成本/效益分析,并制定实现方案的
3、进度计划;分析员应综合分析比较这些合理的方案,从中选择一个最佳方案向用户推荐;对于用户接受的方案,分析员应多方改进,进行必要的数据库设计,确定测试要求并制定测试计划。,2023/6/1,8,总体设计的必要性,可以站在全局的高度,花较少成本,从较抽象的层次上分析对比多种可能的系统实现方案和软件结构,从中选出最佳方案和最合理的软件结构,从而用较低成本开发出较高质量的软件系统。,2023/6/1,9,主要内容,概述设计过程设计原理启发规则描述软件结构的图形工具面向数据流的设计方法,2023/6/1,10,总体设计的阶段,通常由两个主要阶段组成:系统设计阶段,确定系统的具体设计方案;结构设计阶段,确定
4、软件结构。,2023/6/1,11,总体设计的9个步骤,设想供选择的方案选取合理的方案推荐最佳方案功能分解设计软件结构,设计数据库制定测试计划书写文档审查和复审,2023/6/1,12,1.设想供选择的方案,在总体设计阶段分析员应该考虑各种可能的实现方案,并且力求从中选出最佳方案。开始时只有系统的逻辑模型,分析员有充分的自由分析比较不同的物理实现方案,一旦选出了最佳的方案,将能大大提高系统的性能/价格比。需求分析阶段得出的数据流图是总体设计的极好的出发点。设想供选择的方案的一种常用的方法是:设想把数据流图中的处理分组的各种可能方法,抛弃在技术上行不通的方法;余下的分组方法代表可能的实现策略,并
5、且可以启示供选择的物理系统。,2023/6/1,13,2.选择合理的方案,应该从前一步得到的一系列供选择的方案中选取若干个合理的方案:通常,选取的这些方案中至少应包括低成本、中成本和高成本的三种方案类型。在判断哪些方案合理时应该考虑在前面的问题定义、可行性研究、需求分析阶段确定的工程规模和目标。必要时需要进一步征求用户的意见。对每个合理方案,分析员都要准备4方面资料:系统流程图;组成系统的物理元素清单;成本效益分析;实现这个系统的进度计划。,2023/6/1,14,3.推荐最佳方案,分析员应该:综合分析对比各种合理方案的利弊选择一个最佳方案向用户推荐为推荐的方案制定详细的实现计划对于分析员推荐
6、的最佳方案:用户和有关专家应该认真审查。如果确认该方案确实符合用户的需要,并且在现有条件下完全能够实现,则应该提请使用部门负责人进一步审批。在使用部门负责人也接受了分析员所推荐的方案之后,方可进入总体设计过程的下一步工作,即结构设计阶段。,2023/6/1,15,4.功能分解,为了实现目标系统,必须设计出组成这个系统的所有程序和文件。对于程序(特别是复杂的大型程序)的设计,通常分为两个阶段:结构设计:确定系统由哪些模块组成,以及这些模块之间的相互关系。过程设计:确定每个模块的处理过程。其中,结构设计是总体设计阶段的任务,而过程设计则是详细设计阶段的任务。为确定软件结构:首先需要从实现角度把复杂
7、的功能进一步分解。分析员结合算法描述仔细分析数据流图中的每个过程,如果一个处理的功能过分复杂,必须把它的功能适当地分解。分解后的每个功能对大多数程序员而言都是明显易懂的。功能分解导致数据流图的进一步细化,同时还应该用IPO图或其他适当工具简要描述细化后每个处理的算法。,2023/6/1,16,5.设计软件结构,通常程序中,一个模块完成一个适当的子功能。应该把模块组织成良好的层次系统,顶层模块调用它的下层模块以实现程序的完整功能,每个下层模块再调用更下层的模块,从而完成程序的一个子功能,最下层的模块完成最具体的功能。软件结构(即由模块组成的层次系统)可以用层次图(不是层次方框图)或结构图来描绘。
8、如果数据流图细化到适当层次,则可直接从数据流图映射出软件结构,即面向数据流的设计方法。,2023/6/1,17,6.设计数据库,数据库的应用越来越广泛,目前大多数的系统都要用到数据库技术。数据库设计是一项专门的技术,包括模式设计、子模式设计、完整性和安全性设计和优化处理等。,2023/6/1,18,7.制定测试计划,在软件开发的早期阶段提前考虑软件的测试计划是很有必要的。这样能促使软件设计人员在设计时注意到软件的测试问题,从而有利于提高软件的可测试性。,2023/6/1,19,8.书写文档,应该用正式的文档记录总体设计的结果,在这个阶段应该完成的文档有以下几种:系统说明,即总体设计说明书。主要
9、包括:系统流程图,系统的物理清单,成本/效益分析;对最佳方案的概括描述,精化的数据流图,用层次图或结构图描绘的数据结构,用IPO图或其他工具简要描述的模块算法,模块间的接口关系,需求、功能和模块三者之间的交叉参照关系。其中最重要的是系统实现方案和软件模块结构。用户手册。根据总体设计阶段的结果,编写的初步的用户操作手册。测试计划。包括测试策略、测试方案、预测的测试结果、测试进度计划等。详细的实现计划数据库设计,2023/6/1,20,9.审查和复查,最后应该对总体设计的结果进行严格的技术审查在技术审查通过之后再由使用部门的负责人从管理角度进行复审。,2023/6/1,21,主要内容,概述设计过程
10、设计原理启发规则描述软件结构的图形工具面向数据流的设计方法,2023/6/1,22,“设计原理”主要内容,模块化抽象逐步求精信息隐藏和局部化模块独立,2023/6/1,23,模块与模块化,模块是由边界元素限定的相邻程序元素(例如,数据说明,可执行的语句)的序列,而且有一个总体标识符代表它。传统方法学中的模块是能够单独命名并独立地完成一定功能的程序语句的集合。例如高级语言中的过程、函数、子程序和宏等都可作为模块。面向对象方法学中的对象是模块,对象内的方法(或称为服务)也是模块。模块是构成程序的基本构件。模块化就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构
11、成一个整体,可以完成指定的功能,满足用户的需求。,2023/6/1,24,模块化的依据,依据设函数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合起来作为一个问题来解决时所需的工作量要少。这种“分而治之”的思想提供了模块化的根据:把复杂的问题分解成许多容易解决的小问题,原来的问题也就容易解决了。,2023/6/1,25,合适的模块
12、数目,模块化粒度越小,开发模块的工作量就越小;但模块数目增加,设计模块间接口所需要的工作量将增加。每个系统都相应地有一个最适当的模块数目M,使得系统的开发成本最小。,虽然M不能精确定义,但总成本曲线可以作为分析与设计的指南。如图说明了模块数目和软件成本之间的关系,2023/6/1,26,模块化的优点,软件模块化的优点采用模块化原理可以使软件结构清晰,不仅容易设计也容易阅读和理解。因为程序错误通常局限在有关的模块及它们之间的接口中,所以模块化使软件容易测试和调试,因而有助于提高软件的可靠性。因为变动往往只涉及少数几个模块,所以模块化能够提高软件的可修改性。有助于软件工程的组织管理。模块化是软件的
13、一个重要属性。模块化的特性提供了人们处理复杂的问题的一种方法,同时也使得软件能够被有效地管理。,2023/6/1,27,“设计原理”主要内容,模块化抽象逐步求精信息隐藏和局部化模块独立,2023/6/1,28,抽象的含义,现实世界中一定事物、状态或过程之间总存在着某些相似的方面,即共性。把这些共性集中和概括起来,忽略它们之间的差异,这就是抽象。抽象即抽出事物的本质特性而暂时不考虑它们的细节。它是人类在认识复杂现象的过程中使用的最强有力的思维工具。,2023/6/1,29,抽象的有效方法,抽象的有效方法是用层次的方式构造和分析它。抽象的高层次使用问题环境的语言,以概括的方式叙述问题的解法;在较低
14、层次采用更过程化的方法,把面向问题的术语和面向实现的术语结合起来叙述问题的解法;最后,在最低层次用可直接实现的方式叙述问题的解法。软件工程过程的每一步,都是对软件解法的抽象层次的一次细化。在可行性研究阶段,软件被看作是一个完整的系统部分;在需求分析期间,我们使用在问题环境中熟悉的术语来描述软件的解法;当我们由总体设计阶段转入详细设计阶段时,抽象的程度进一步减少;最后,当源程序写出来时,也就达到了抽象的最低层。,2023/6/1,30,开发一个CAD软件的三层抽象,抽象层次.用问题所处环境的术语来描述这个软件:,该软件包括一个计算机绘图界面,向绘图员显示图形,以及一个数字化仪界面,用以代替绘图板
15、和丁字尺。所有直线、折线、矩形、圆及曲线的描画、所有的几何计算、所有的剖面图和辅助视图都可以用这个CAD软件实现。,2023/6/1,31,抽象层次.任务需求的描述:在这个抽象层次上,未给出“怎样做”的信息,不能直接实现。,开发一个CAD软件的三层抽象,CAD SOFTWARE TASKS user interaction task;2-D drawing creation task;graphics display task;drawing file management task;end.,2023/6/1,32,抽象层次.程序过程表示2-D 绘图生成任务:,开发一个CAD软件的三层抽象,
16、PROCEDURE:2-D drawing creation REPEAT UNTIL(drawing creation task terminates)DO WHILE(digitizer interaction occurs)digitizer interface task;DETERMINE drawing request CASE;line:line drawing task;rectangle:rectangle drawing task;circle:circle drawing task;END DO WHILE(keyboard interaction occurs)keybo
17、ard interaction task;PROCESS analysis/computation CASE view:auxiliary view task;section:cross sectioning task;END;END REPEATEND PROCEDURE,2023/6/1,33,数据抽象的例子,在不同层次上描述数据对象的细节,定义与该数据对象相关的操作。例如,在CAD软件中,定义一个叫做drawing的数据对象。可将drawing规定为一个抽象数据类型,定义它的内部细节为:数据抽象drawing本身由另外一些数据抽象,如geometry、BOM(bill of materi
18、als)构成定义drawing的抽象数据类型之后,可引用它来定义其它数据对象,而不必涉及drawing的内部细节,如定义:blue-print IS INSTANCE OF drawing;或schematic IS INSTANCE OF drawing;,TYPE drawing IS STRUCTURE DEFIND number IS STRING LENGTH(12);geometry DEFIND notes IS STRING LENGTH(256);BOM DEFIND END drawing TYPE;,2023/6/1,34,抽象的意义,我们在考虑问题时,集中考虑和当前问题
19、有关的方面,而忽略和当前问题无关的方面,这就是抽象。或者说抽象就是抽出事物的本质特性而暂时不考虑它们的细节。逐步求精和模块化的概念,与抽象紧密相关。随着软件开发的进展,软件结构每一层中的模块,表示了对软件抽象层次的一次精化。软件结构顶层的模块,控制了系统的主要功能并且影响全局;软件结构底层的模块,完成对数据的一个具体处理。用自顶向下由抽象到具体的方式分配控制,简化了软件的设计和实现,提高了软件的可理解性和可测试性,并且使软件更容易维护。,2023/6/1,35,“设计原理”主要内容,模块化抽象逐步求精信息隐藏和局部化模块独立,2023/6/1,36,逐步求精的含义,逐步求精是人类解决复杂问题时
20、采用的基本方法,也是许多软件工程技术(如规格说明技术,设计和实现技术)的基础。所谓逐步求精即为了能集中精力解决主要问题而尽量推迟对问题细节的考虑。,2023/6/1,37,逐步求精的重要性,逐步求精之所以如此重要,是因为人类的认知过程遵守Miller法则:一个人在任何时候都只能把注意力集中在(72)个知识块上。软件工程师在一段时间内需要考虑的知识块远远多于7,逐步求精能帮助软件工程师将精力集中在与当前开发阶段最相关的那些方面,而忽略对整体解决方案来说虽说是必要的,然而目前还不需要考虑的细节。可以把逐步求精看作是一项把一个时期内必须解决的种种问题按优先级排序的技术。逐步求精方法确保每个问题都将被
21、解决,而且每个问题都将在适当的时候被解决。,2023/6/1,38,逐步求精是一种自顶向下的设计策略,逐步求精是由Niklaus Wirth提出的一种自顶向下的设计策略。按照这种设计策略,程序的体系结构是通过逐步精化处理过程的层次而设计出来的。通过逐步分解对功能的宏观陈述而开发出层次结构,直至最终得出用程序设计语言表达的程序。,2023/6/1,39,Wirth对逐步求精策略的概括说明,我们对付复杂 问题的最重要的办法是抽象:对一个复杂问题不应该立刻用计算机指令、数字和逻辑符号来表示,而应该用较自然的抽象语句来表示,从而得出抽象程序;抽象程序对抽象数据进行某些特定的运算并用某些合适的记号(可能
22、是自然语言)来表示;对抽象程序做进一步的分解,并进入下一个抽象层次,这样的精细化过程一直进行下去,直到程序能被计算机接受为止。这时的程序可能是用某种高级语言或机器语言指令书写的。,2023/6/1,40,逐步求精的实质,求精实际上是细化过程。人们从在高抽象级别定义的功能陈述(或信息描述)开始,也就是说,该陈述仅仅概念性地描述了功能或信息,但是并没有提供功能的内部工作情况或信息的内部结构。求精要求设计者细化原始陈述,随着每个后续求精(即细化)步骤的完成而提供越来越多的细节。,2023/6/1,41,抽象与求精,对付复杂问题常用到抽象,求精实际上是细化过程。抽象与求精是一对互补的概念。抽象使得设计
23、者能够说明过程和数据,同时却忽略了低层细节。可以把抽象看作是一种通过忽略多余细节的同时强调有关的细节,从而实现逐步求精的方法。可以把逐步求精看作是一项把一个时期内必须解决的种种问题按优先级排序的技术。求精则帮助设计者在设计过程中逐步揭示出低层细节。抽象与求精都有助于设计者在设计演化过程中创造出完整的设计模型。,2023/6/1,42,“设计原理”主要内容,模块化抽象逐步求精信息隐藏和局部化模块独立,2023/6/1,43,什么是信息隐藏?,应用模块化原理时,会产生一个问题:“为了得到最好的一组模块,应该怎样分解软件呢?”信息隐藏原理:应该这样设计和确定模块,使得一个模块内包含的信息(过程和数据
24、)对于不需要这些信息的模块来说,是不能访问的,或者说是“不可见”的。,2023/6/1,44,信息隐藏的含义,实际上,应该隐藏的不是有关模块的一切信息,而是模块的实现细节,有人认为应称为细节隐藏。隐藏意味着可以通过定义一组独立的模块来实现有效的模块化,这些独立的模块彼此间仅仅交换那些为了完成系统功能而必须交换的信息。,2023/6/1,45,信息隐藏需要局部化,局部化的概念与信息隐藏的概念密切相关。局部化是指把一些关系密切的软件元素物理地放得彼此靠近。在模块中使用局部数据元素是局部化的一个例子。显然,局部化有助于实现信息隐藏。,2023/6/1,46,信息隐藏的优点,如果在测试期间和以后的软件
25、维护期间需要修改软件,那么使用信息隐蔽原理作为模块化系统设计的标准就会带来极大的好处。对于软件的其它部分来说,绝大部分数据和过程都是隐蔽的,这样,在修改期间由于疏忽而引入的错误所造成的影响就可以局限在一个或几个模块内部,不至波及到软件的其他部分。使用信息隐藏原理设计软件模块,有助于减少修改软件时所犯的错误。,2023/6/1,47,“设计原理”主要内容,模块化抽象逐步求精信息隐藏和局部化模块独立,2023/6/1,48,回顾:模块与模块化,模块是由边界元素限定的相邻程序元素的序列,而且有一个总体标识符代表它。软件系统的模块化是指整个软件被划分成若干单独命名和可编址的部分,即模块。这些模块可以被
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件工程导论 软件工程 导论 第五 总体 设计
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-5064799.html