在这里插入图片描述

总体设计的基本目的就是回答“概括地说,系统应该如何实现”这个问题,因此,总体设计又称为概要设计或初步设计。

一、设计过程
1.总体设计过程通常由两个主要阶段组成:
(1)系统设计阶段:确定系统的具体实现方案
(2)结构设计阶段:确定软件的结构

2.典型的总体设计过程包括9个步骤:
(1)设想供选择的方案;
(2)选取合理的方案;
(3)推荐最佳方案;
(4)功能分解;
(5)设计软件结构;
(6)设计数据库;
(7)制定测试计划;
(8)书写文档;
(9)审查和复查。

二、设计原理
1.模块化
(1)模块化的定义:
就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求。
(2)为什么要模块化:

  • 模块化是为了使一个复杂的大型程序能被人的智力所管理,软件应该具备的惟一属性。
  • 如果一个大型程序仅由一个模块组成,它将很难被人所理解。

2.抽象
(1)抽象的定义:
现实世界中一定事物、状态或过程之间总存在着某些相似的方面(共性)。把这些相似的方面集中和概括起来,暂时忽略它们之间的差异,这就是抽象。抽象就是抽出事物本质特性而暂时不考虑细节。

3.逐步求精
(1)逐步求精定义:
为了能集中精力解决主要问题而尽量推迟对问题细节的考虑。逐步求精是人类解决复杂问题时采用的基本方法,也是许多软件工程技术的基础。
(2)Miller法则:
一个人在任何时候都只能把注意力集中在(7±2)个知识块上。

4.信息隐藏和局部化
(1)信息隐藏:
应该这样设计和确定模块,使得一个模块内包含的信息(过程和数据)对于不需要这些信息的模块来说,是不能访问的。
(2)局部化:
局部化的概念和信息隐藏概念是密切相关的。所谓局部化是指把一些关系密切的软件元素物理地放得彼此靠近。显然,局部化有助于实现信息隐藏。

5.模块独立
(1)模块独立的概念是模块化、抽象、信息隐藏和局部化概念的直接结果。 希望这样设计软件结构,使得每个模块完成一个相对独立的特定子功能,并且和其他模块之间的关系很简单。
(2)模块独立程度的两个定性标准度量:

  • 耦合:对一个软件结构内不同模块之间互连程度的度量。
  • ①非直接耦合/完全独立:两个模块每一个都能独立地工作而不需要零一个模块的存在。(不存在)
  • ②数据耦合:两个模块通过参数交换信息,而且交换的信息仅仅是数据。
  • ③控制耦合:传递的信息中有控制信息。
  • ④特征耦合:把整个数据结构作为参数传递而被调用的模块只需要使用其中一部分数据元素。
  • ⑤公共环境耦合:两个或多个模块通过一个公共数据环境相互作用。
  • ⑥内容耦合:一个模块访问另一个模块的内部数据;一个模块不通过正常入口而转到另一个模块内部;两个模块有一部分程序代码重叠;一个模块有多个入口。

耦合程度:内容耦合>公共环境耦合(两个模块既送又取)>控制耦合>数据耦合>完全独立
设计要求:尽量使用数据耦合,少用控制耦合和特征耦合,限制公共环境耦合的范围,完全不用内容耦合。

  • 内聚:一个模块内各个元素彼此结合的紧密程度。
  • ①偶然内聚:一个模块完成一组任务,任务之间即使有关系,关系也是很松散的。
  • ②逻辑内聚:一个模块完成的任务在逻辑上属于相同或相似的一类。
  • ③时间内聚:一个模块包含的任务必须在同一段时间内执行。
  • ④过程内聚:一个模块内的处理元素是相关的,而且必须以特定次序执行。
  • ⑤通信内聚:模块中所有元素都使用同一个输入数据和产生同一个输出数据。
  • ⑥顺序内聚:一个模块内的处理元素和同一个功能密切相关,而且处理必须顺序执行。
  • ⑦功能内聚:模块内所有处理元素属于一个整体,完成一个单一的功能。

低内聚:偶然内聚、逻辑内聚、时间内聚;
中内聚:过程内聚、通信内聚;
高内聚:顺序内聚、功能内聚。

设计要求:力争做到高内聚,并且能够辨认出低内聚的模块。

三、启发规则
1.改进软件结构提高模块独立性:
通过模块分解或合并,降低耦合提高内聚
在这里插入图片描述

2.模块规模应该适中
3.深度、宽度、扇入和扇出都应适当:
(1)深度:软件结构中控制的层数,它往往能粗略地标志一个系统的大小和复杂程度。
(2)宽度:软件结构内同一个层次上的模块总数的最大值。
(3)扇出:一个模块直接控制(调用)的模块数目。
(4)扇入:有多少个上级模块直接调用它。
在这里插入图片描述
在这里插入图片描述

4.模块的作用域应该在控制域之内:
(1)模块的作用域:定义为受该模块内一个判定影响的所有模块的集合。
(2)模块的控制域:是这个模块本身以及所有直接或间接从属于它的模块的集合。
在一个设计得很好的系统中,所有受判定影响的模块应该都从属于做出判定的那个模块,最好局限于做出判定的那个模块本身及它的直属下级模块。
在这里插入图片描述
5.力争降低模块接口的复杂程度
6.设计单入口单出口的模块
7.模块功能应该可以预测

四、描绘软件结构的图形工具
1.层次图和HIPO图
2.结构图

五、面向数据流的设计方法
1.面向数据流的设计方法的概念:
面向数据流的设计方法把信息流映射成软件结构,信息流的类型决定了映射的方法。
2.信息流的类型:
(1)交换流
在这里插入图片描述

(2)事务流
在这里插入图片描述
3.变换分析
在这里插入图片描述

4.事务分析
在这里插入图片描述

练习题:
1.耦合是对软件不同模块之间互连程度的度量。各种耦合从强到弱的排列为( )。
A、内容耦合,控制耦合,数据耦合,公共环境耦合
B、内容耦合,控制耦合,公共环境耦合,数据耦合
C、内容耦合,公共环境耦合,控制耦合,数据耦合
D、控制耦合,内容耦合,数据耦合,公共环境耦合

2.软件结构图的形态特征能反映程序重用率的是( )。
A、深度
B、宽度
C、扇入
D、扇出

3.概要设计的目的是确定整个系统的( )。
A、规模
B、功能及模块结构
C、费用
D、测试方案

4.数据耦合和控制耦合相比,则( )成立。
A、数据耦合的耦合性强
B、控制耦合的耦合性强
C、两者的耦合性相当
D、两者的耦合性需要根据具体情况分析

5.当一个模块直接使用另一个模块的内部数据时,这种模块之间的耦合为( )。
A、数据耦合
B、公共耦合
C、标记耦合
D、内容耦合

6.如果在需求分析阶段采用了结构化分析方法,则软件设计阶段就应采用结构化设计方法。()
7.概要设计与详细设计之间的关系是全局和局部的关系。()

选择题答案:CCBBD
判断答案:对对

8.什么是软件的概要设计?概要设计阶段完成的主要任务是什么?
总体设计又称概要设计,是将软件需求转化为软件体系结构、确定系统级接口、全局数据结构和数据库模式。
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐