总体设计概要设计

上传人:宝路 文档编号:47957517 上传时间:2018-07-07 格式:PPT 页数:109 大小:606.72KB
返回 下载 相关 举报
总体设计概要设计_第1页
第1页 / 共109页
总体设计概要设计_第2页
第2页 / 共109页
总体设计概要设计_第3页
第3页 / 共109页
总体设计概要设计_第4页
第4页 / 共109页
总体设计概要设计_第5页
第5页 / 共109页
点击查看更多>>
资源描述

《总体设计概要设计》由会员分享,可在线阅读,更多相关《总体设计概要设计(109页珍藏版)》请在金锄头文库上搜索。

1、第5章 总体设计5.1 设计过程 5.2 设计原理 5.3 启发规则 5.4 描绘软件结构的图形工具 5.5 面向数据流的设计方法 5.6 小结 习题总体设计的基本目的就是回答“概括地说,系统 应该如何实现?”这个问题,因此,总体设计又称为 概要设计或初步设计。通过这个阶段的工作将划分 出组成系统的物理元素程序、文件、数据库、 人工过程和文档等等,但是每个物理元素仍然处于 黑盒子级,这些黑盒子里的具体内容将在以后仔细 设计。总体设计阶段的另一项重要任务是设计软件 的结构,也就是要确定系统中每个程序是由哪些模 块组成的,以及这些模块相互间的关系。总体设计过程首先寻找实现目标系统的各种不同 的方案

2、,需求分析阶段得到的数据流图是设想各种 可能方案的基础。然后分析员从这些供选择的方案 中选取若干个合理的方案,为每个合理的方案都准 备一份系统流程图,列出组成系统的所有物理元素 ,进行成本/效益分析,并且制定实现这个方案的 进度计划。分析员应该综合分析比较这些合理的方 案,从中选出一个最佳方案向用户和使用部门负责 人推荐。如果用户和使用部门的负责人接受了推荐 的方案,分析员应该进一步为这个最佳方案设计软 件结构,通常,设计出初步的软件结构后还要多方 改进,从而得到更合理的结构,进行必要的数据库 设计,确定测试要求并且制定测试计划。从上面的叙述中不难看出,在详细设计之前先进 行总体设计的必要性:

3、可以站在全局高度上,花较 少成本,从较抽象的层次上分析对比多种可能的系 统实现方案和软件结构,从中选出最佳方案和最合 理的软件结构,从而用较低成本开发出较高质量的 软件系统。总体设计过程通常由两个主要阶段组成:系统设 计阶段,确定系统的具体实现方案;结构设计阶段 ,确定软件结构。典型的总体设计过程包括下述9 个步骤: 1. 设想供选择的方案在总体设计阶段分析员应该考虑各种可能的实现 方案,并且力求从中选出最佳方案。在总体设计阶 段开始时只有系统的逻辑模型,分析员有充分的自 由分析比较不同的物理实现方案,一旦选出了最佳 的方案,将能大大提高系统的性能/价格比。5.1 设计过程需求分析阶段得出的数

4、据流图是总体设计的极好 的出发点。 设想供选择的方案的一种常用的方法是,设想把 数据流图中的处理分组的各种可能的方法,抛弃在 技术上行不通的分组方法(例如,组内不同处理的 执行时间不相容),余下的分组方法代表可能的实 现策略,并且可以启示供选择的物理系统。2. 选取合理的方案应该从前一步得到的一系列供选择的方案中选取 若干个合理的方案,通常至少选取低成本、中等成 本和高成本的三种方案。在判断哪些方案合理时应 该考虑在问题定义和可行性研究阶段确定的工程规 模和目标,有时可能还需要进一步征求用户的意见 。 对每个合理的方案分析员都应该准备下列4份资 料: (1) 系统流程图; (2) 组成系统的物

5、理元素清单; (3) 成本/效益分析; (4) 实现这个系统的进度计划。3. 推荐最佳方案分析员应该综合分析对比各种合理方案的利弊, 推荐一个最佳的方案,并且为推荐的方案制定详细 的实现计划。制定详细实现计划的关键技术是本书 第13章中将要介绍的工程网络。用户和有关的技术专家应该认真审查分析员所推 荐的最佳系统,如果该系统确实符合用户的需要, 并且是在现有条件下完全能够实现的,则应该提请 使用部门负责人进一步审批。在使用部门的负责人 也接受了分析员所推荐的方案之后,将进入总体设 计过程的下一个重要阶段结构设计。4. 功能分解为了最终实现目标系统,必须设计出组成这个系 统的所有程序和文件(或数据

6、库)。对程序(特别是复 杂的大型程序)的设计,通常分为两个阶段完成: 首先进行结构设计,然后进行过程设计。结构设计 确定程序由哪些模块组成,以及这些模块之间的关 系;过程设计确定每个模块的处理过程。结构设计 是总体设计阶段的任务,过程设计是详细设计阶段 的任务。为确定软件结构,首先需要从实现角度把复杂的 功能进一步分解。分析员结合算法描述仔细分析数 据流图中的每个处理,如果一个处理的功能过分复 杂,必须把它的功能适当地分解成一系列比较简单 的功能。一般说来,经过分解之后应该使每个功能 对大多数程序员而言都是明显易懂的。功能分解导 致数据流图的进一步细化,同时还应该用IPO图或 其他适当的工具简

7、要描述细化后每个处理的算法。5. 设计软件结构通常程序中的一个模块完成一个适当的子功能。 应该把模块组织成良好的层次系统,顶层模块调用 它的下层模块以实现程序的完整功能,每个下层模 块再调用更下层的模块,从而完成程序的一个子功 能,最下层的模块完成最具体的功能。软件结构( 即由模块组成的层次系统)可以用层次图或结构图 来描绘,第5.4节将介绍这些图形工具。如果数据流图已经细化到适当的层次,则可以直 接从数据流图映射出软件结构,这就是第5.5节中 将要讲述的面向数据流的设计方法。6. 设计数据库对于需要使用数据库的那些应用系统,软件工程 师应该在需求分析阶段所确定的系统数据需求的基 础上,进一步

8、设计数据库。 在数据库课中已经详细讲述了设计数据库的方法 ,本书不再赘述。 7. 制定测试计划在软件开发的早期阶段考虑测试问题,能促使软 件设计人员在设计时注意提高软件的可测试性。本 书第7章将仔细讨论软件测试的目的和设计测试方 案的各种技术方法。8. 书写文档应该用正式的文档记录总体设计的结果,在这个 阶段应该完成的文档通常有下述几种: (1) 系统说明主要内容包括用系统流程图描绘的系 统构成方案,组成系统的物理元素清单,成本/效 益分析;对最佳方案的概括描述,精化的数据流图 ,用层次图或结构图描绘的软件结构,用IPO图或 其他工具(例如,PDL语言)简要描述的各个模块的 算法,模块间的接口

9、关系,以及需求、功能和模块 三者之间的交叉参照关系等等。 (2) 用户手册根据总体设计阶段的结果,修改更正 在需求分析阶段产生的初步的用户手册。(3) 测试计划包括测试策略,测试方案,预期的测 试结果,测试进度计划等等。 (4) 详细的实现计划 (5) 数据库设计结果 9. 审查和复审最后应该对总体设计的结果进行严格的技术审查 ,在技术审查通过之后再由使用部门的负责人从管 理角度进行复审。模块是由边界元素限定的相邻程序元素(例如, 数据说明,可执行的语句)的序列,而且有一个总 体标识符代表它。按照模块的定义,过程、函数、 子程序和宏等,都可作为模块。面向对象方法学中 的对象是模块,对象内的方法

10、(或称为服务)也是 模块。模块是构成程序的基本构件。5.2 设计原理5.2.1 模块化模块化就是把程序划分成独立命名且可独立访问 的模块,每个模块完成一个子功能,把这些模块集 成起来构成一个整体,可以完成指定的功能满足用 户的需求。 有人说,模块化是为了使一个复杂的大型程序能 被人的智力所管理,软件应该具备的惟一属性。如 果一个大型程序仅由一个模块组成,它将很难被人 所理解。下面根据人类解决问题的一般规律,论证 上面的结论。 设函数C(x)定义问题x的复杂程度,函数E(x)确定 解决问题x需要的工作量(时间)。对于两个问题P1 和P2,如果C(P1)C(P2)显然E(P1)E(P2)根据人类解

11、决一般问题的经验,另一个有趣的规 律是C(P1+P2)C(P1)+C(P2) 也就是说,如果一个问题由P1和P2两个问题组合 而成,那么它的复杂程度大于分别考虑每个问题时 的复杂程度之和。 综上所述,得到下面的不等式 E(P1+P2)E(P1)+E(P2) 这个不等式导致“各个击破”的结论把复杂的 问题分解成许多容易解决的小问题,原来的问题也 就容易解决了。这就是模块化的根据。由上面的不等式似乎还能得出下述结论:如果无 限地分割软件,最后为了开发软件而需要的工作量 也就小得可以忽略了。事实上,还有另一个因素在 起作用,从而使得上述结论不能成立。参看图5.1 ,当模块数目增加时每个模块的规模将减

12、小,开发 单个模块需要的成本(工作量)确实减少了;但是, 随着模块数目增加,设计模块间接口所需要的工作 量也将增加。根据这两个因素,得出了图中的总成 本曲线。每个程序都相应地有一个最适当的模块数 目M,使得系统的开发成本最小。图5.1 模块化和软件成本虽然目前还不能精确地决定M的数值,但是在考 虑模块化的时候总成本曲线确实是有用的指南。 采用模块化原理可以使软件结构清晰,不仅容易 设计也容易阅读和理解。因为程序错误通常局限在 有关的模块及它们之间的接口中,所以模块化使软 件容易测试和调试,因而有助于提高软件的可靠性 。因为变动往往只涉及少数几个模块,所以模块化 能够提高软件的可修改性。模块化也

13、有助于软件开 发工程的组织管理,一个复杂的大型程序可以由许 多程序员分工编写不同的模块,并且可以进一步分 配技术熟练的程序员编写困难的模块。人类在认识复杂现象的过程中使用的最强有力的 思维工具是抽象。人们在实践中认识到,在现实世 界中一定事物、状态或过程之间总存在着某些相似 的方面(共性)。把这些相似的方面集中和概括起来 ,暂时忽略它们之间的差异,这就是抽象。或者说 抽象就是抽出事物的本质特性而暂时不考虑它们的 细节。5.2.2 抽象由于人类思维能力的限制,如果每次面临的因素 太多,是不可能做出精确思维的。处理复杂系统的 惟一有效的方法是用层次的方式构造和分析它。一 个复杂的动态系统首先可以用

14、一些高级的抽象概念 构造和理解,这些高级概念又可以用一些较低级的 概念构造和理解,如此进行下去,直至最低层次的 具体元素。 这种层次的思维和解题方式必须反映在定义动态 系统的程序结构之中,每级的一个概念将以某种方 式对应于程序的一组成分。考虑对任何问题的模块化解法时,可以提出许多 抽象的层次。在抽象的最高层次使用问题环境的语 言,以概括的方式叙述问题的解法;在较低抽象层 次采用更过程化的方法,把面向问题的术语和面向 实现的术语结合起来叙述问题的解法;最后在最低 的抽象层次用可直接实现的方式叙述问题的解法。 软件工程过程的每一步都是对软件解法的抽象层 次的一次精化。在可行性研究阶段,软件作为系统

15、 的一个完整部件;在需求分析期间,软件解法是使 用在问题环境内熟悉的方式描述的;当由总体设计 向详细设计过渡时,抽象的程度也就随之减少了; 最后,当源程序写出来以后,也就达到了抽象的最 低层。逐步求精和模块化的概念,与抽象是紧密相关的 。随着软件开发工程的进展,在软件结构每一层中 的模块,表示了对软件抽象层次的一次精化。事实 上,软件结构顶层的模块,控制了系统的主要功能 并且影响全局;在软件结构底层的模块,完成对数 据的一个具体处理,用自顶向下由抽象到具体的方 式分配控制,简化了软件的设计和实现,提高了软 件的可理解性和可测试性,并且使软件更容易维护 。逐步求精是人类解决复杂问题时采用的基本方

16、法 ,也是许多软件工程技术(例如,规格说明技术, 设计和实现技术)的基础。可以把逐步求精定义为 :“为了能集中精力解决主要问题而尽量推迟对问 题细节的考虑。”逐步求精之所以如此重要,是因为人类的认知过 程遵守Miller法则:一个人在任何时候都只能把注 意力集中在(72)个知识块上。5.2.3 逐步求精但是,在开发软件的过程中,软件工程师在一段 时间内需要考虑的知识块数远远多于7。例如,一 个程序通常不止使用7个数据,一个用户也往往有 不止7个方面的需求。逐步求精方法的强大作用就 在于,它能帮助软件工程师把精力集中在与当前开 发阶段最相关的那些方面上,而忽略那些对整体解 决方案来说虽然是必要的,然而目前还不需要考虑 的细节,这些细节将留到以后再考虑。Miller法则 是人类智力的基本局限,我们不可能战胜自己的自 然本性,只能接受这个事实,承认自身的局限性, 并在这个前提下尽我们的最大努力工作。事实上,可以把逐步求精看作是一项把一个时期 内必须解决的种种问题按优先级排序的技术。逐步 求精方法确保每个问题都将被解决,而且每个问题 都将在适当的时

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号