当前位置:文档之家› 第5章 总体设计

第5章 总体设计

两个主要阶段组成: 系统设计阶段:确定系统的具体实现方案; 结构设计阶段:确定软件结构。
典型的总体设计过程包括下述9个步骤:
1. 设想供选择的方案
以数据流图为基础,寻找实现目标系统的各种不同的方 案。
由需求分析的数据流图作为出发点,把数据流图中的处理分 组的各种可能的方法,抛弃在技术上行不通的分组方法, 提供可供选择的物理系统。如P46图2.8、2.9所示。
模块化的后果:随着模块数目增加,设计模块间接 口所需要的工作量也将增加。
根据这两个因素,得出了图中的总成本曲线。每 个程序都有一个最适当的模块数目M,使得系统 的开发成本最小。
图5.1 模块化和软件成本
模块化优点
• 使软件结构清晰,容易设计也容易阅读和理解。 • 提高软件的可靠性。 程序错误局限在有限的模块中,使软件容易测试和 调试。 • 提高了软件的可修改性。 即使有变动,往往只涉及少数几个模块。 • 有助于软件开发工程的组织管理。 一个大型程序由许多程序员分工编写,分配技术熟 练的程序员编写困难的模块。
2. 选取合理的方案
至少选取低成本、中等成本和高成本的三种方案。 对每个合理的方案分析员都应该准备下列资料: (1) 系统流程图; (2) 组成系统的物理元素清单; (3) 成本/效益分析; (4) 实现这个系统的进度计划。
3. 推荐最佳方案
推荐一个最佳的方案,并且为推荐的方案制定详细的实现计 划。 提请使用部门负责人进一步审批之后,将进入总体设计过程 的下一个重要阶段——结构设计。
模块独立程度的度量标准:内聚和耦合。 耦合:模块间互相依赖(连接)的紧密程度; 内聚:模块内部各个元素彼此结合的紧密程度。 模块独立要求:高内聚、低耦合 1. 耦合 耦合是对一个软件结构内不同模块之间互连程度的 度量。 耦合强弱取决于模块间接口的复杂程度,进入或访 问一个模块的点,以及通过接口的数据。
9. 审查和复审
5.2 设计原理
好的设计准则 • 模块化 • 抽象 • 逐步求精 • 信息隐藏和局部化 • 模块独立
5.2.1 模块化
模块:
是由边界元素限定的相邻程序元素(例如,数据说明,可执 行的语句)的序列,而且有一个总体标识符代表它。
模块化:
把程序划分成独立命名且可独立访问的模块,每个模块完成 一个子功能,把这些模块集成起来构成一个整体,可以完 成指定的功能,满足用户的需求。
• 如果一个模块完成一组任务,这些任务之间即使有关 系,关系也是很松散的,则称为偶然内聚。
函数A 函数B 函数C 函数E
函数D
功能内聚 顺序内聚 通信内聚 过程内聚 时间内聚 偶然内聚 内聚性 弱 逻辑内聚 强
逻辑内聚( logically cohesive )
求精实际上是细化过程。求精要求设计者细化原始 陈述,随着每个后续求精(即细化)步骤的完成而提 供越来越多的细节。 抽象与求精是一对互补的概念。 • 抽象使得设计者能够说明过程和数据,同时却忽略 低层细节。 • 求精则帮助设计者在设计过程中逐步揭示出低层细 节。 • 这两个概念都有助于设计者在设计演化过程中创造 出完整的设计模型。
• 体系结构设计
设计软件的结构,确定系统中每个程序是由哪些模块组 成的,以及这些模块相互间的关系。
• 总体设计必要性(详细设计之前):站在 全局高度上,花较少成本,从较抽象的层 次上分析对比多种可能的系统实现方案和 软件结构,从中选出最佳方案和最合理的 软件结构,降低成本、提高质量。
5.1 设计过程
内容耦合 耦合性 高
公共耦合 控制耦合
标记耦合 数据耦合 低
模块独立性 低 高
标记耦合( Stamp coupled )
若两个模块间传递的参数中至少有一个是数据结构,如 字符串或记录,并且在模块中仅用到该数据结构中的 部分元素,则称这两个模块之间存在标记耦合。 • • 在这种情况下,被调用的模块可以使用的数据多于它确 实需要的数据,将导致对数据的访问失去控制,从而 给计算机犯罪提供了机会。
第五章 总体设计
本章 内容
5.1 5.2 5.3 5.4 5.5 5.6 习题 设计过程 设计原理 启发规则 描绘软件结构的图形工具 面向数据流的设计方法 小结 要求 :
掌握概要设计过程、设计原理、模块化方法 及模块独立性原则、软件结构的确定。 重点: 模块独立性原则。 难点: 软件结构的确定。
A
B
A
B
…. Entry2 ….
多重入口
进入另一模块内
部分代码重迭
模块独立性与耦合的关系
内容耦合 耦合性 高 低 模块独立性 低 高 公共耦合 控制耦合 标记耦合 数据耦合
总之,耦合是影响软件复杂程度的一个重要因素。 应该采取下述设计原则: 尽量使用数据耦合,少用控制耦合和标记耦合,限 制公共环境耦合的范围,完全不用内容耦合。
5.2.2 抽象
抽象:把事务相似的方面集中和概括起来,暂时忽 略它们之间的差异。 • • 抽象就是抽出事物的本质特性而暂时不考虑 它们的细节。
软件工程过程的每一步都是对软件解法的抽象 层次的一次精化。 • 在可行性研究阶段,软件作为系统的一个完整 部件; • 在需求分析期间,软件解法是使用在问题环境 内熟悉的方式描述的; • 当由总体设计向详细设计过渡时,抽象的程度 也就随之减少了; • 最后,当源程序写出来以后,也就达到了抽象 的最低层。
模块化的根据:把复杂的问题分解成许多容易解决 的小问题,原来的问题也就容易解决了。
设函数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)
局部化:是指把一些关系密切的软件元素物理地放 得彼此靠近。 局部化有助于实现信息隐藏。
5.2.5 模块独立
模块独立的概念是模块化、抽象、信息隐藏和局部 化概念的直接结果。 模块独立:具有独立功能而且和其他模块之间没有 过多的相互作用的模块。
模块独立的重要性: 第一,具有独立模块的软件比较容易开发。 第二,独立模块比较容易测试和维护。
内容耦合 耦合性 高
公共耦合 控制耦合
标记耦合 数据耦合 低
模块独立性 低 高
公共耦合( Common coupled )
• 若干模块访问一个公共的数 据环境,则它们之间的耦合称 为公共耦合。公共环境可为全 局数据结构、共享的通信区、 内存的公共覆盖区等。显然, 公共数据区的变化,将影响所 有公共耦合模块,严重影响模 块的可靠性和可适应性,降低 软件的可读性。
2. 内聚 内聚标志一个模块内各个元素彼此结合的紧 密程度。理想内聚的模块只做一件事情。 设计时力求做到高内聚。
功能内聚 顺序内聚 通信内聚 过程内聚 时间内聚 偶然内聚 内聚性 弱 耦合性 强 逻辑内聚 强

功能内聚 顺序内聚 通信内聚 过程内聚 时间内聚 偶然内聚 内聚性 弱 逻辑内聚 强
偶然内聚( coincidental cohesion )
6. 设计数据库
对于需要使用数据库的应用系统,软件工程师应该 在需求分析阶段所确定的系统数据需求的基础上, 进一步设计数据库。
7. 制定测试计划 开发早期考虑测试问题,可提高软件的可测 试性。
8. 书写文档
(1) 系统说明。主要内容包括: 系统流程图描绘的系统构成方案,组成系统的物理元素 清单,成本/效益分析; 精化的数据流图,用层次图或结构图描绘的软件结构, 用IPO图描述的各个模块的算法,模块间的接口关系 等。 (2) 用户手册 (3) 测试计划 (4) 详细的实现计划 (5) 数据库设计结果
• 系统方案设计
总体设计的基本 目的就是回答“概 括地说,系统应该 如何实现?”
① 设想实现目标系统的各种可能方案。 ② 根据系统规模和目标综合考虑经济、技术、操作等 各种因素,从设想的供选择的方案中选取若干个合 理的方案。 ③ 综合分析、对比所选取的各种合理方案的利弊,从 中选出一个最佳方案,并制定最佳方案的详细实现 计划。
5. 设计软件结构
程序中一个模块完成一个适当的子功能,应该把模块组 织成良好的层次系统。 软件结构(即由模块组成的层次系统)可以用层次图或结 构图来描绘,第5.4节将介绍这些图形工具。 如果数据流图已经细化到适当的层次,可以直接从数据 流图映射出软件结构,这就是第5.5节中将要讲述的面 向数据流的设计方法。
Байду номын сангаас
结构化设计
传统的软件工程方法学采用结构化设计技术 完成软件设计(总体设计和详细设计)工 作。结构化设计技术的基本要点如下: • 软件系统由层次化结构的模块构成 • 模块是单人口和单出口的 • 构造和联结模块的基本准则是模块独立 • 用图来描述软件系统的结构,并且使软件 结构与问题结构尽量一致
总体设计任务
内容耦合 耦合性 高
公共耦合 控制耦合
标记耦合 数据耦合 低
模块独立性 低 高
控制耦合(Control coupled)
控制耦合:一个模块向另一个模块传 递控制信息,接收信息的模块的动 作根据信息值进行调整。 • • 控制耦合是中等程度的耦合, 它增加了系统的复杂程度。在把模 块适当分解之后通常可以用数据耦 合代替它。
内容耦合 耦合性 高
公共耦合 控制耦合
标记耦合 数据耦合 低
模块独立性 低 高
内容耦合( Content coupled )
内容耦合的四种情况: • 一个模块直接访问另一模块的内部数据。 • 一个模块不通过正常入口转到另一模块的内部。 • 两个模块有部分代码重迭。
• 一个模块有多个入口。
Entry1
逐步求精和模块化的概念,与抽象是紧密相关 的。在软件结构每一层中的模块,表示了对软件 抽象层次的一次精化。 • 软件结构顶层的模块,控制了系统的主要功能 并且影响全局; • 在软件结构底层的模块,完成对数据的一个具 体处理。 用自顶向下由抽象到具体的方式分配控制,简 化了软件的设计和实现,提高了软件的可理解性 和可测试性,并且使软件更容易维护。
相关主题