软件工程 总体设计

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

5.1
总 体 设 计 的 过 程
着某种实现策略。
设想把数据流图中的处理分组的各种可能的方法,抛
弃在技术上行不通的分组方法(例如,组内不同处理 的执行时间不相容),余下的分组方法代表可能的实 现策略,并且可以启示供选择的物理系统。 在总体设计的该步骤中分析员仅仅一个边界一个边界 地设想并且列出供选择的方案,并不评价这些方案。
19
可以使软件结构清晰,不仅容易设计也容易阅读
和理解; 可以使软件容易测试和调试,因而有助于提高软 件的可靠性; 能够提高软件的可修改性; 有助于软件开发工程的组织管理。
5.2.2 抽象
上下级关系的层次结构 抽象就是抽出事物的本质特性而暂时不考虑它们
5.2 软 件 设 计 原 理 **
第二部分、开发阶段

用户界面设计 数据结构与算法设计
系统实现

编码和单元测试 综合测试
1
第5章 总体设计
本章主要内容:软件设计的概念与原则;
总体设计的步骤和方法;面向数据流的 设计方法;总体设计的文档与评审。 本章重点:总体设计的步骤和方法;面 向数据流的设计方法
本章难点:软件设计的原则,内聚和耦
在详细设计之前进行总体设计可以站在全局高度上,花较
少成本,从较抽象的层次上分析对比多种可能的系统实现 方案和软件结构,从中选出最佳方案和最合理的软件结构, 从而用较低成本开发出较高质量的软件系统。
4
5.1 总 体 设 计 的 过 程
总体设计过程通常由两个主要阶段组成: 系统设计:确定系统的具体实现方案。 结构设计:确定软件结构。 9个步骤: ① 设想供选择的方案 ② 选取合理的方案 ③ 推荐最佳方案 ④ 功能分解 ⑤ 设计软件结构 ⑥ 设计数据库 ⑦ 制定测试计划 ⑧ 书写文档 ⑨ 审查和复审

5
5.1.1 设想供选择的方案
并且力求从中选出最佳方案。 需求分析阶段得出的数据流图是总体设计的极好的出 发点。数据流图中的某些处理可以逻辑地归并在一个 自动化边界内作为一组,另一些处理可以放在另一个 自动化边界内作为另一组。这些自动化边界通常意味
在总体设计阶段分析员应该考虑各种可能的实现方案,
16
5.2.1 模块化
模块是数据说明、可执行语句等程序对象的集合,
5.2 软 件 设 计 原 理 **
它是单独命名的而且可通过名字来访问,例如,过 程、函数、子程序、宏等等都可作为模块。 模块化就是把程序划分成若干个模块,每个模块完 成一个子功能,把这些模块集中起来组成一个整体, 可以完成指定的功能,满足问题的要求。
系完全是通过主模块的控制和调用来实现的,这 就是非直接耦合。
这种耦合的模块独立性最强。
25
(2)数据耦合 5.2 软 件 设 计 原 理 **
26
如果一个模块访问另一个模块时,彼此之间是通
过数据参数(不是控制参数、公共数据结构或外 部变量)来交换输入、输出信息的,则称这种耦 合为数据耦合。 按数据耦合开发的程序界面简单、安全可靠。 数据耦合是松散的耦合,模块之间的独立性比较 强。在软件程序结构中至少必须有这类耦合。
23
耦合性(Coupling)
5.2 软 件 设 计 原 理 **
24
耦合性是对一个软件结构中不同模块之间互连程
度的度量。 模块间的耦合程度强烈影响系统的可理解性、可 测试性、可靠性和可维护性。
(1)非直接耦合
5.2 软 件 设 计 原 理 **
如果两个模块之间没有直接关系,它们之间的联
21
逐步求精是许多软件工程技术(如规格说明技术、
设计和实现技术)的基础--为了能集中精力解 决主要问题而尽量延迟对问题细节的考虑. 抽象和求精是一对互补的概念.抽象使得设计者 能够说明过程和数据、同时却忽略底层细节.可 以把抽象看成一种通过忽略多余的细节同时强调 有关的细节,而实现逐步求精的方法.
5.1
总 体 设 计 的 过 程
弊,推荐一个最佳的方案,并且为推荐的方 案制定详细的实现计划。
在使用部门的负责人接受了分析员所推荐的
方案之后,将进入总体设计过程的下一个重 要阶段——结构设计。
9
5.1.4 功能分解
程序(特别是复杂的大型程序)的设计,通常分为两
5.1
总 体 设 计 的 过 程
黑盒子,不需要 序、文件、数据库、人工过程和文档等等,但是每个物理 知道里面是怎么 元素仍然处于黑盒子级,这些黑盒子里的具体内容将在以 处理的。 后仔细设计。 总体设计阶段的另一项重要任务是设计软件的结构,也就 是要确定系统中每个程序是由哪些模块组成的,以及这些 模块相互间的关系。
总体设计的意义
10
5.1.5 设计软件结构
通常程序中的一个模块完成一个适当的子功能。
Байду номын сангаас
应该把模块组织成良好的层次系统,顶层模块
5.1
调用它的下层模块以实现程序的完整功能,每
个下层模块再调用更下层的模块,从而完成程 序的一个子功能,最下层的模块完成最具体的 功能。 软件结构(即由模块组成的层次系统)可以用 层次图或结构图来描绘。(5.4节)
6
7
5.1.2 选取若干个合理的方案
5.1
至少选取低成本、中等成本和高成本三种方案。
总 体 设 计 的 过 程
每种方案准备四份资料:



系统流程图; 组成系统的物理元素清单; 成本/效益分析; 实现这个系统的进度计划。
8
5.1.3 推荐最佳方案
分析员应该综合分析对比各种合理方案的利
12
5.1.7 制定测试计划
在软件开发的早期阶段考虑测试问题,能促使软
5.1
总 体 设 计 的 过 程
件设计人员在设计时注意提高软件的可测试性。
13
5.1.8 书写文档
系统说明
5.1
总 体 设 计 的 过 程


用系统流程图描绘的系统构成方案;组成系统的物 理元素清单;成本/效益分析;对最佳方案的概括 描述;精化的数据流图;用层次图或结构图描绘的 软件结构;用IPO图或其他工具(例如,PDL语言) 简要描述的各个模块的算法;模块间的接口关系; 需求、功能和模块三者之间的交叉参照关系等等。 用户手册 修改更正在需求分析阶段产生的初步的用户手册。 测试计划 包括测试策略,测试方案,预期的测试结果,测试 进度计划等等。 详细的实现计划 数据库设计结果
5.2.4 信息隐蔽和局部化
信息隐蔽原理:应该这样设计和确定模块,使得一个
5.2 软 件 设 计 原 理 **
模块内包含的信息(过程和数据)对于不需要这些信 息的模块来说,是不能访问的。

“隐蔽”意味着模块彼此间仅仅交换那些为了完成系统功能而 必须交换的信息。 “局部化”是指把一些关系密切的软件元素物理地放得彼此靠 近。局部化有助于实现信息隐蔽。
个阶段完成: 结构设计:结构设计是总体设计阶段的任务。结构 设计确定程序由哪些模块组成,以及这些模块之间 的关系。 过程设计:过程设计是详细设计阶段的任务。过程 设计确定每个模块的处理过程。
为确定软件结构,首先需要从实现角度把复杂的功能
进一步分解。一般说来,经过分解之后应该使每个功 能对大多数程序员而言都是明显易懂的。功能分解导 致数据流图的进一步细化,同时还应该用IPO图或其 他适当的工具简要描述细化后每个处理的算法
5.2 软 件 设 计 原 理 **
模块独立的概念是模块化、抽象、信息隐
蔽和局部化概念的直接结果。 为什么模块的独立性很重要呢?


有效的模块化(即具有独立的模块)的软件 比较容易开发出来。 独立的模块比较容易测试和维护。
模块的独立程度可以由两个定性标准度量,
这两个标准分别称为耦合和内聚。
信息隐蔽和局部化的优点


测试期间和软件维护期间需要修改软件,使用信息 隐蔽原理作为模块化系统设计的标准就会带来极大 好处。 因为绝大多数数据和过程对于软件的其他部分而言 是隐蔽的(也就是“看”不见的),在修改期间由 于疏忽而引入的错误就很少可能传播到软件的其他 部分。
22
5.2.5 模块独立
(3)标记耦合
如果一组模块通过参数表传递记录信息,就是标
5.2 软 件 设 计 原 理 **
记耦合。 事实上,这组模块共享了这个记录,它是某一数 据结构的子结构,而不是简单变量。这要求这些 模块都必须清楚该记录的结构,并按结构要求对 此记录进行操作。 如果采取“信息隐蔽”的方法,把在数据结构上 的操作全部集中在一个模块中,就可以消除这种 耦合。
合,系统结构图 。
2
第五章
5.1 5.2 5.3 5.4 5.5
总体设计
设计过程 设计原理 启发规则 描绘软件结构的图形工具 面向数据流的设计方法
总体设计的基本目的
总体设计的基本目的就是回答“概括地说,系统应该
如何实现?”这个问题。 总体设计又称为概要设计或初步设计。
总体设计阶段的任务
通过这个阶段的工作将划分出组成系统的物理元素——程 把对象当作一个
27
(4)控制耦合
如果一个模块通过传送开关、标志、名字等控制
5.2 软 件 设 计 原 理 **
信息,明显地控制选择另一模块的功能,就是控 制耦合。
这种耦合的实质是在单一接口上选择多功能模
块中的某项功能。
对所控制模块的任何修改,都会影响控制模块。
另外,控制耦合也意味着控制模块必须知道所控 制模块内部的一些逻辑关系,这些都会降低模块 的独立性。
模块化的根据
不等式
C(P1+P2)> C(P1)+ C(P2) E(P1+P2)> E(P1)+ E(P2) “各个击破”的结论——把复杂的问题分解成许多 容易解决的小问题,原来的问题也就容易解决了

17
最适当的模块数目 5.2 软 件 设 计 原 理 **
18
模块化的优点
5.2 软 件 设 计 原 理 **
总 体 设 计 的 过 程
11
5.1.6 数据库设计
如需使用数据库,分析员应该在需求分析阶段对
5.1
总 体 设 计 的 过 程
系统数据要求所做的分析的基础上进一步设计数 据库。包括下述四个步骤: 模式设计: 模式设计的目的是确定物理数据 库结构。 子模式设计:子模式是用户使用的数据视图。 完整性和安全性设计。 优化:主要目的是改进模式和子模式以优化 数据的存取。

用户界面就如同人的外表,最容易让人 一见钟情或一见恶心。象人类追求心灵 美和外表美那样,软件系统也追求(内 数据结构与算法就如同人的血脉和神 在的)功能强大和(外表的)界面友好。 经,它让器官具有生命并能发挥功能。 体系结构就如同人的骨架。 但随着生活节奏的加快,人们已少有兴 数据结构与算法分布在体系结构和模 如果某个家伙的骨架是猴 模块就如同人的器官,具有特定的功 趣去品味深藏不露的内在美。如果把 系统设计 块中,它将协调系统的各个功能。人 子,那么无论怎样喂养和 能。人体中最出色的模块设计之一是 Unix系统比作是健壮的汉子和妇人,那 的耳朵和嘴巴虽然是相对独立的器官, 美容,他始终都是猴子, 手,手只有几种动作,却能做无限多 总体设计 么Windows系统就象妩媚的小白脸和狐 但如果耳朵失聪了,嘴巴就只能发出 不会成为人。 的事情。人体中最糟糕的模块设计之 狸精。想不到Windows系统竟然能兴风 体系结构设计 “啊”“呜”的声音,等于丧失了说 一是嘴巴,嘴巴将最有价值但毫无相 作浪,占去大半市场。 话的功能,可人们却又能用手势代替 模块设计 干的几种功能如吃饭、说话混为一体, 说话。人体的数据结构与算法设计真 使之无法并行处理,真乃人类之不幸。 详细设计 是十分神奇并且十分可笑。
顺序相邻关系的层次结构 的细节。 处理复杂系统的唯一有效的方法是用层次的方式 构造和分析它。 一个复杂的动态系统首先可以用一些高级的抽象 概念构造和理解,这些高级概念又可以用一些较 低级的概念构造和理解,如此进行下去,直至最 低层次的具体元素。
20
5.2.3 逐步求精
5.2 软 件 设 计 原 理 **

14
5.1.9 审查和复审
最后应该对总体设计的结果进行严格的技术审
5.1
总 体 设 计 的 过 程
查,在技术审查通过之后再由使用部门的负责 人从管理角度进行复审。
15
5.2 软 件 设 计 原 理
**
在软件设计过程中应该遵循的基 本原理和相关概念
模块化
抽象
逐步求精 信息隐蔽和局部化 模块独立
相关文档
最新文档