软件工程总体设计.ppt
《软件工程总体设计.ppt》由会员分享,可在线阅读,更多相关《软件工程总体设计.ppt(80页珍藏版)》请在课桌文档上搜索。
1、1,第二部分、开发阶段,系统设计总体设计体系结构设计模块设计详细设计用户界面设计数据结构与算法设计系统实现编码和单元测试综合测试,体系结构就如同人的骨架。如果某个家伙的骨架是猴子,那么无论怎样喂养和美容,他始终都是猴子,不会成为人。,模块就如同人的器官,具有特定的功能。人体中最出色的模块设计之一是手,手只有几种动作,却能做无限多的事情。人体中最糟糕的模块设计之一是嘴巴,嘴巴将最有价值但毫无相干的几种功能如吃饭、说话混为一体,使之无法并行处理,真乃人类之不幸。,用户界面就如同人的外表,最容易让人一见钟情或一见恶心。象人类追求心灵美和外表美那样,软件系统也追求(内在的)功能强大和(外表的)界面友好
2、。但随着生活节奏的加快,人们已少有兴趣去品味深藏不露的内在美。如果把Unix系统比作是健壮的汉子和妇人,那么Windows系统就象妩媚的小白脸和狐狸精。想不到Windows系统竟然能兴风作浪,占去大半市场。,数据结构与算法就如同人的血脉和神经,它让器官具有生命并能发挥功能。数据结构与算法分布在体系结构和模块中,它将协调系统的各个功能。人的耳朵和嘴巴虽然是相对独立的器官,但如果耳朵失聪了,嘴巴就只能发出“啊”“呜”的声音,等于丧失了说话的功能,可人们却又能用手势代替说话。人体的数据结构与算法设计真是十分神奇并且十分可笑。,第5章 总体设计,本章主要内容:软件设计的概念与原则;总体设计的步骤和方法
3、;面向数据流的设计方法;总体设计的文档与评审。本章重点:总体设计的步骤和方法;面向数据流的设计方法 本章难点:软件设计的原则,内聚和耦合,系统结构图。,2,第五章 总体设计,5.1 设计过程5.2 设计原理5.3 启发规则5.4 描绘软件结构的图形工具5.5 面向数据流的设计方法,4,总体设计的基本目的总体设计的基本目的就是回答“概括地说,系统应该如何实现?”这个问题。总体设计又称为概要设计或初步设计。总体设计阶段的任务通过这个阶段的工作将划分出组成系统的物理元素程序、文件、数据库、人工过程和文档等等,但是每个物理元素仍然处于黑盒子级,这些黑盒子里的具体内容将在以后仔细设计。总体设计阶段的另一
4、项重要任务是设计软件的结构,也就是要确定系统中每个程序是由哪些模块组成的,以及这些模块相互间的关系。总体设计的意义在详细设计之前进行总体设计可以站在全局高度上,花较少成本,从较抽象的层次上分析对比多种可能的系统实现方案和软件结构,从中选出最佳方案和最合理的软件结构,从而用较低成本开发出较高质量的软件系统。,把对象当作一个黑盒子,不需要知道里面是怎么处理的。,5,5.1 总体设计的过程,总体设计过程通常由两个主要阶段组成:系统设计:确定系统的具体实现方案。结构设计:确定软件结构。9个步骤:设想供选择的方案选取合理的方案推荐最佳方案功能分解设计软件结构设计数据库制定测试计划书写文档审查和复审,6,
5、5.1.1 设想供选择的方案,在总体设计阶段分析员应该考虑各种可能的实现方案,并且力求从中选出最佳方案。需求分析阶段得出的数据流图是总体设计的极好的出发点。数据流图中的某些处理可以逻辑地归并在一个自动化边界内作为一组,另一些处理可以放在另一个自动化边界内作为另一组。这些自动化边界通常意味着某种实现策略。设想把数据流图中的处理分组的各种可能的方法,抛弃在技术上行不通的分组方法(例如,组内不同处理的执行时间不相容),余下的分组方法代表可能的实现策略,并且可以启示供选择的物理系统。在总体设计的该步骤中分析员仅仅一个边界一个边界地设想并且列出供选择的方案,并不评价这些方案。,5.1 总体设计的过程,7
6、,8,5.1.2 选取若干个合理的方案,至少选取低成本、中等成本和高成本三种方案。每种方案准备四份资料:系统流程图;组成系统的物理元素清单;成本/效益分析;实现这个系统的进度计划。,5.1 总体设计的过程,9,5.1.3 推荐最佳方案,分析员应该综合分析对比各种合理方案的利弊,推荐一个最佳的方案,并且为推荐的方案制定详细的实现计划。在使用部门的负责人接受了分析员所推荐的方案之后,将进入总体设计过程的下一个重要阶段结构设计。,5.1 总体设计的过程,10,5.1.4 功能分解,程序(特别是复杂的大型程序)的设计,通常分为两个阶段完成:结构设计:结构设计是总体设计阶段的任务。结构设计确定程序由哪些
7、模块组成,以及这些模块之间的关系。过程设计:过程设计是详细设计阶段的任务。过程设计确定每个模块的处理过程。为确定软件结构,首先需要从实现角度把复杂的功能进一步分解。一般说来,经过分解之后应该使每个功能对大多数程序员而言都是明显易懂的。功能分解导致数据流图的进一步细化,同时还应该用IPO图或其他适当的工具简要描述细化后每个处理的算法,5.1 总体设计的过程,11,5.1.5 设计软件结构,通常程序中的一个模块完成一个适当的子功能。应该把模块组织成良好的层次系统,顶层模块调用它的下层模块以实现程序的完整功能,每个下层模块再调用更下层的模块,从而完成程序的一个子功能,最下层的模块完成最具体的功能。软
8、件结构(即由模块组成的层次系统)可以用层次图或结构图来描绘。(5.4节),5.1 总体设计的过程,12,5.1.6 数据库设计,如需使用数据库,分析员应该在需求分析阶段对系统数据要求所做的分析的基础上进一步设计数据库。包括下述四个步骤:模式设计:模式设计的目的是确定物理数据库结构。子模式设计:子模式是用户使用的数据视图。完整性和安全性设计。优化:主要目的是改进模式和子模式以优化数据的存取。,5.1 总体设计的过程,13,5.1.7 制定测试计划,在软件开发的早期阶段考虑测试问题,能促使软件设计人员在设计时注意提高软件的可测试性。,5.1 总体设计的过程,14,5.1.8 书写文档,系统说明用系
9、统流程图描绘的系统构成方案;组成系统的物理元素清单;成本效益分析;对最佳方案的概括描述;精化的数据流图;用层次图或结构图描绘的软件结构;用IPO图或其他工具(例如,PDL语言)简要描述的各个模块的算法;模块间的接口关系;需求、功能和模块三者之间的交叉参照关系等等。用户手册修改更正在需求分析阶段产生的初步的用户手册。测试计划包括测试策略,测试方案,预期的测试结果,测试进度计划等等。详细的实现计划数据库设计结果,5.1 总体设计的过程,15,5.1.9 审查和复审,最后应该对总体设计的结果进行严格的技术审查,在技术审查通过之后再由使用部门的负责人从管理角度进行复审。,5.1 总体设计的过程,16,
10、5.2 软件设计原理*,在软件设计过程中应该遵循的基本原理和相关概念模块化抽象 逐步求精信息隐蔽和局部化模块独立,17,5.2.1 模块化,模块是数据说明、可执行语句等程序对象的集合,它是单独命名的而且可通过名字来访问,例如,过程、函数、子程序、宏等等都可作为模块。模块化就是把程序划分成若干个模块,每个模块完成一个子功能,把这些模块集中起来组成一个整体,可以完成指定的功能,满足问题的要求。模块化的根据不等式C(P1P2)C(P1)C(P2)E(P1P2)E(P1)E(P2)“各个击破”的结论把复杂的问题分解成许多容易解决的小问题,原来的问题也就容易解决了,5.2 软件设计原理*,18,最适当的
11、模块数目,5.2 软件设计原理*,19,模块化的优点,可以使软件结构清晰,不仅容易设计也容易阅读和理解;可以使软件容易测试和调试,因而有助于提高软件的可靠性;能够提高软件的可修改性;有助于软件开发工程的组织管理。,5.2 软件设计原理*,20,5.2.2 抽象,抽象就是抽出事物的本质特性而暂时不考虑它们的细节。处理复杂系统的唯一有效的方法是用层次的方式构造和分析它。一个复杂的动态系统首先可以用一些高级的抽象概念构造和理解,这些高级概念又可以用一些较低级的概念构造和理解,如此进行下去,直至最低层次的具体元素。,5.2 软件设计原理*,上下级关系的层次结构 顺序相邻关系的层次结构,21,5.2.3
12、 逐步求精,逐步求精是许多软件工程技术(如规格说明技术、设计和实现技术)的基础为了能集中精力解决主要问题而尽量延迟对问题细节的考虑抽象和求精是一对互补的概念抽象使得设计者能够说明过程和数据、同时却忽略底层细节可以把抽象看成一种通过忽略多余的细节同时强调有关的细节,而实现逐步求精的方法,5.2 软件设计原理*,22,5.2.4 信息隐蔽和局部化,信息隐蔽原理:应该这样设计和确定模块,使得一个模块内包含的信息(过程和数据)对于不需要这些信息的模块来说,是不能访问的。“隐蔽”意味着模块彼此间仅仅交换那些为了完成系统功能而必须交换的信息。“局部化”是指把一些关系密切的软件元素物理地放得彼此靠近。局部化
13、有助于实现信息隐蔽。信息隐蔽和局部化的优点测试期间和软件维护期间需要修改软件,使用信息隐蔽原理作为模块化系统设计的标准就会带来极大好处。因为绝大多数数据和过程对于软件的其他部分而言是隐蔽的(也就是“看”不见的),在修改期间由于疏忽而引入的错误就很少可能传播到软件的其他部分。,5.2 软件设计原理*,23,5.2.5 模块独立,模块独立的概念是模块化、抽象、信息隐蔽和局部化概念的直接结果。为什么模块的独立性很重要呢?有效的模块化(即具有独立的模块)的软件比较容易开发出来。独立的模块比较容易测试和维护。模块的独立程度可以由两个定性标准度量,这两个标准分别称为耦合和内聚。,5.2 软件设计原理*,2
14、4,耦合性(Coupling),耦合性是对一个软件结构中不同模块之间互连程度的度量。模块间的耦合程度强烈影响系统的可理解性、可测试性、可靠性和可维护性。,5.2 软件设计原理*,25,(1)非直接耦合,如果两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的,这就是非直接耦合。这种耦合的模块独立性最强。,5.2 软件设计原理*,26,(2)数据耦合,如果一个模块访问另一个模块时,彼此之间是通过数据参数(不是控制参数、公共数据结构或外部变量)来交换输入、输出信息的,则称这种耦合为数据耦合。按数据耦合开发的程序界面简单、安全可靠。数据耦合是松散的耦合,模块之间的独立性比较强
15、。在软件程序结构中至少必须有这类耦合。,5.2 软件设计原理*,27,(3)标记耦合,如果一组模块通过参数表传递记录信息,就是标记耦合。事实上,这组模块共享了这个记录,它是某一数据结构的子结构,而不是简单变量。这要求这些模块都必须清楚该记录的结构,并按结构要求对此记录进行操作。如果采取“信息隐蔽”的方法,把在数据结构上的操作全部集中在一个模块中,就可以消除这种耦合。,5.2 软件设计原理*,28,(4)控制耦合,如果一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能,就是控制耦合。这种耦合的实质是在单一接口上选择多功能模块中的某项功能。对所控制模块的任何修改,都会影响控制
16、模块。另外,控制耦合也意味着控制模块必须知道所控制模块内部的一些逻辑关系,这些都会降低模块的独立性。,5.2 软件设计原理*,29,(5)外部耦合,一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息,则称之为外部耦合。外部耦合引起的问题类似于公共耦合,区别在于在外部耦合中不存在依赖于一个数据结构内部各项的物理安排。,5.2 软件设计原理*,30,(6)公共耦合,若一组模块都访问同一个公共数据环境,则它们之间的耦合就称为公共耦合。公共的数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等。这种耦合会引起下列问题:所有公共耦合模块都与某一个公共数据
17、环境内部各项的物理安排有关,若修改某个数据的大小,将会影响到所有的模块。无法控制各个模块对公共数据的存取,严重影响软件模块的可靠性和适应性。公共数据名的使用,明显降低了程序的可读性。,5.2 软件设计原理*,31,(7)内容耦合,如果出现以下情形,两个模块之间就发生了内容耦合:一个模块访问另一个模块的内部数据。一个模块不通过正常入口转到另一个模块的内部。两个模块有一部分代码重叠(只可能出现在汇编程序中)。一个模块有多个入口(这意味着一个模块有几种功能)。模块化的原则模块化设计的最终目标,是希望建立模块间耦合尽可能松散的系统。在这样一个系统中,我们设计、编码、测试和维护其中任何一个模块,就不需要
18、对系统中其他模块有很多的了解。此外,由于模块间联系简单,发生在某一处的错误传播到整个系统的可能性很小。,5.2 软件设计原理*,32,内聚性(Cohesion),内聚性标志一个模块内各个元素彼此结合的紧密程度。模块内的高内聚往往意味着模块间的松耦合。内聚和耦合都是模块化设计的有力工具,但是实践表明内聚更重要,应该把更多注意力集中到提高模块的内聚程度上。,5.2 软件设计原理*,33,(1)巧合内聚,巧合内聚又称为偶然内聚。当模块内各部分之间没有联系,或者即使有联系,这种联系也很松散,则称这种模块为巧合内聚模块,它是内聚程度最低的模块。这种模块的缺点首先是不易修改和维护。其次是这种模块的内容不易
19、理解,很难描述它所完成的功能,增加了程序的模糊性。,5.2 软件设计原理*,34,(2)逻辑内聚,这种模块把几种相关的功能组合在一起,每次调用时,由传送给模块的判定参数来确定该模块应执行哪一种功能。这种模块是单入口多功能模块。类似的有错误处理模块。它接收出错信号,对不同类型的错误打印出不同的出错信息。逻辑内聚模块比巧合内聚模块的内聚程度要高。逻辑内聚的缺点它所执行的不是一种功能,而是执行若干功能中的一种,因此它不易修改。另外,当调用时需要进行控制参数的传递,这就增加了模块间的耦合程度。而将未用的部分也调入内存,这就降低了系统的效率。,5.2 软件设计原理*,35,(3)时间内聚,时间内聚又称为
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件工程 总体 设计
链接地址:https://www.desk33.com/p-235675.html