总体设计的基本目的就是回答“概括地说,系统应该如何实现”这个问题,因此,总体设计又称为概要设计或初步设计。
总体设计阶段的另一项重要任务是设计软件的结构,也就是要确定系统中每个程序是由哪些模块组成的,以及这些模块相互间的关系。
5.1 设计过程
总体设计过程
- 系统设计阶段
- 设想供选择的方案(需求分析阶段得出的数据流图是总体设计的极好的出发点)
- 选取合理的方案(通常至少选取低成本、中等成本和高成本的3种方案)
对每个合理的方案,分析员都应该准备下列4份资料。
(1) 系统流程图。
(2) 组成系统的物理元素清单。
(3) 成本/效益分析。
(4) 实现这个系统的进度计划。 - 推荐最佳方案
- 结构设计阶段
- 功能分解(为确定软件结构,首先需要从实现角度把复杂的功能进一步分解)
- 设计软件结构(层次系统)
- 设计数据库
- 制定测试计划(在设计时注意提高软件的可测试性)
- 书写文档
在这个阶段应该完成的文档通常有下述几种:
(1)系统说明
(2)用户手册
(3)测试计划包括测试策略,测试方案,预期的测试结果,测试进度计划等
(4)详细的实现计划
(5)数据库设计结果 - 审查和复审(期末会检查)
审查时团队内部做的,复查是客户做的
5.2 设计原理
【模块坏,耦合,内聚】
5.2.1 模块化
- 模块是由边界元素限定的相邻程序元素(例如,数据说明,可执行的语句)的序列,而且有一个总体标识符代表它。模块是构成程序的基本构件。
- 模块化就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求。
随着模块数目增加,设计模块间接口所需要的工作量也将增加。虽然目前还不能精确地决定M的数值,但是在考虑模块化的时候总成本曲线确实是有用的指南。在第六章和5.3节讲解。
5.2.2 抽象
抽象就是抽出事物的本质特性而暂时不考虑它们的细节。
软件工程过程的每一步都是对软件解法的抽象层次的一次精化。
- 在可行性研究阶段,软件作为系统的一个完整部件;
- 在需求分析期间,软件解法是使用在问题环境内熟悉的方式描述的;
- 当由总体设计向详细设计过渡时,抽象的程度也就随之减少了;
- 当源程序写出来以后,也就达到了抽象的最低层。
5.2.3 逐步求精
5.2.5 模块独立
模块的独立程度可以由两个定性标准度量,这两个标准分别称为内聚和耦合。
- 耦合
耦合是对一个软件结构内不同模块之间互连程度的度量。耦合强弱取决于模块间接口的复杂程度,进入或访问一个模块的点,以及通过接口的数据。
模块耦合分为数据耦合、控制耦合、特征耦合、公共环境耦合和内容耦合
【紧耦合要联合测试】 - 内聚
内聚衡量一个模块内部各个元素彼此结合的紧密程度。
内聚标志着一个模块内各个元素彼此结合的紧密程度,它是信息隐藏和局部化概念的自然扩展。简单地说,理想内聚的模块只做一件事情。
内聚和耦合是密切相关的,模块内的高内聚往往意味着模块间的松耦合。
内聚分为三大类低内聚、中内聚和高内聚
5.3 启发规则
【扇入和扇出】
- 深度、宽度、扇出和扇入都应适当
深度:软件结构中控制的层数
宽度:软件结构内同一个层次上的模块总数的最大值
扇出:一个模块直接控制(调用)的模块数目
扇入:一个模块被多少个上级模块直接调用的数目 - 模块的作用域应该在控制域之内
作用域:受该模块内一个判定影响的所有模块的集合。
控制域:模块本身以及所有直接或间接从属于它的模块的集合。
3. 力争降低模块接口的复杂程度
4. 设计单入口单出口的模块:避免全局变量,别人审核
5.4 描绘软件结构的图形工具
5.4.1 层次图和HIPO图
方便查文档。
5.4.2 结构图
5.5 面向数据流的设计方法
【明确的信息,数据流向的软件】
5.5.1 概念
- 变换流
- 事件流
- 设计流
变换分析
事务分析
设计优化