5.1设计过程
典型的总体设计步骤:
- 系统设计阶段
- 设想供选择的方案
- 选取合理的方案——低成本、中等成本、高成本三种方案
- 推荐最佳方案
- 结构设计阶段
- 功能分解
- 设计软件结构
- 设计数据库
- 制定测试计划
- 书写文档
- 审查和复查
5.2设计原理
5.2.1模块化
模块是由边界元素限定的相邻程序元素(例如:数据说明,可执行的语句)的序列,而且有一个总标识符代表它。模块是构成程序的基本构件。 模块化就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成一个大的系统,来满足用户的需求。
5.2.2抽象
抽象是抽出事物的本质而暂时不考虑细节。
5.2.3逐步求精
逐步求精是为了能集中精力解决主要问题而尽量推迟对问题的考虑。
5.2.4信息隐藏和局部化
信息隐藏原理:是的一个模块内包含的信息对于不需要这些信息的模块来说,是不能访问的。 局部化:将关系密切的模块物理上靠近。
5.2.5模块独立
我们希望模块和模块之间即使有关系,但是是比较独立的。
- 有效的模块化(及具有独立的模块)的软件比较容易开发
-
1.耦合
耦合是对一个软件结构内不同模块之间互联程度的度量。
数据耦合——两个模块彼此间通过参数交换信息,且只交换数据。是低耦合。系统中至少必须存在这种耦合。
- 控制耦合——传递的信息中控制信息(尽管有时这种控制信息是以数据的形式出现)。是中等程度的耦合
- 特征耦合——把整个数据结构作为参数传递而被调用的模块只需要使用其中一部分数据元素时,就出现了特征耦合
- 公共环境耦合——当两个或多个模块通过一个公共环境相互作用时。时公共环境耦合。
- 内容耦合——最高程度的耦合是内容耦合。如果出现下列情况之一,两个模块间就发生了内容耦合。
- ·一个模块访问另一个模块的内部数据
- ·一个模块不通过正常入口而转到另一个模块的内部
- ·两个模块有一部分程序代码重叠(只可能出现在汇编程序中)
- ·一个模块有多个入口(这意味着一个模块有几种功能)
- 应该坚决避免使用内容耦合
- 低内聚
- 偶然内聚
- 逻辑内聚
- 时间内聚
- 中内聚
- 过程内聚
- 通信内聚
- 高内聚
- 顺序内聚
- 功能内聚 | 10分 | 9分 | 7分 | 5分 | 3分 | 1分 | 0分 | | —- | —- | —- | —- | —- | —- | —- | | 功能内聚 | 顺序内聚 | 通信内聚 | 过程内聚 | 时间内聚 | 逻辑内聚 | 偶然内聚 |
5.3启发原理
- 改进软件结构提高模块独立性
- 模块规模应该适中
- 深度、宽度、扇出和扇入都应该适当。
- 深度:软件结构中控制的层数
- 宽度:软件结构内同一个层次上模块总数的最大值
- 扇出:一个模块调用的模块个数
- 扇入:一个模块被多少个上级模块直接调用的组数
4.模块的作用域应该在控制域之内 (理想:控制域是作用域的子集)
- 作用域:受该模块内的一个判定影响的所有模块的集合
- 控制域:模块本身以及所有直接或间接从属于他的模块的结合
- 例 :
5.力争降低模块接口的复杂程度
6.设计单入口单出口的模块
7.模块功能应该可以预测
5.4描绘软件结构的图形工具
5.4.1层次图和HIPO图
5.4.2结构图
5.5面向数据流的设计方法
5.5.1概念
面向数据流的设计方法把信息映射成软件结构,信息流的类型决定了映射的方法。
- 变换流
- 信息沿输入通路进入系统,由外部形式变换成内部形式,进入系统的信息通过变换中心,经过加工处理之后再沿输出通路变换成外部形式离开软件系统。当数据流图具有这些特征时,叫变换流。
- 事务流(变换流的一种特殊形式)
- 数据沿输入通路到达一个处理T,这个处理根据输入数据的类型在若干个动作序列中选出一个来执行。这类数据流应该划分为一类特殊的数据流,称为事务流。T称为事务中心。
5.5.3 事务分析
5.5.4 设计优化
设计人员应该致力于开发能够氵岳足所有功能和性能要求,而且按照设计原理和启发式设让规则衡量是得接收的软件。
设计的早期阶段尽量对软件结构进行精化。
对时间起决定性作用的软件进行优化是合理的。
(1)在不考虑时间因素的前提下开发并精化软件结构。
(2)在详细设计阶段选出最耗费时.间.的那些模块,仔细地设计它们的处理过程(算法),以求提高效率。
(3)使用高级程序设计语言编写程序。
(4)在软件中孤立出那些大量占用处理机资源的模块
(5)必时重新设计或用依赖于机器的语言重写上述大量占用资源
本章小结
1.总体设计阶段主要由系统设计和结构设计两阶段组成。
2.进行软件结构设计时应该遵循的最主要的原理是模块独立原理。
3.在软件开发过程中既要充分重视和利用这些启发式规则,又要从实际情况出发避免生搬硬套。
4.层次图和结构图是描绘软件结构的常用工具。
5.用形式化的方法由数据流图映射出软件结构。