总体设计 | 软件工程5

1,873 阅读6分钟

需求分析确定“做什么”,总体设计确定“怎样做”

总体设计的目的:回答“概要的说,系统应该如何实现”。

所以又称为概要设计或初步设计。

设计过程

两个阶段:

  • 1.系统设计阶段(确定系统具体的实现方案)
  • 2.结构设计阶段(确定软件结构)

总体的设计的步骤:

  • 1.设想供选择的方案
  • 2.选择合理的方案
  • 3.推荐最佳方案
  • 4.功能分解
  • 5.设计软件结构
  • 6.设计数据库
  • 7.制定测试计划
  • 8.书写文档
  • 9.审查和复查

设计原理

模块化

就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求。

模块化的根据:把复杂的问题分解成许多容易解决的小问题,原来的问题也就容易解决了。

抽象

抽象就是抽象出事物的本质特性而暂时不考虑它们的细节。

忽略细节,分层理解问题,自顶向下层层加细。

抽象层次:

  • 1.用问题所在环境的术语来描述这个软件
  • 2.任务需求描述,列出‘what’而不是‘how’
  • 3.程序过程表示

逐步求精

逐步求精是人类解决复杂问题时采用的基本方法,也是许多软件工程技术(例如,规格说明技术,设计和实现技术)的基础。

定义:为了能集中经历解决主要问题而尽量推迟对问题细节的考虑。

逐步求精之所以这么重要,是因为人来的认知过程遵守Miller法则:一个人在任何时候都只能把注意力集中在(7+2)个知识块上。

信息隐藏和局部化

信息隐藏原理指出:应这样设计和确定模块,使得一个模块内包含的信息对不需要这些信息的模块来说,是不能访问的。

模块独立

概念:是模块化、抽象、信息隐藏和局部话概念的直接结果。

也就是说:希望这样设计的软件结构,使得每个模块完成一个相对独立的特定子功能,并且与其他模块之间的关系很简单。

耦合

耦合是对一个软件结构内不同模块之间互连程度的度量。

耦合强弱取决于模块间接口的复杂程度,进入或访问一个模块的点,以及通过接口的数据。

如果两个模块彼此间通过参数传递信息,而且交换的信息仅仅是数据,那么这种耦合称为数据耦合。

如果传递的信息中有控制信息(尽管有时这种控制信息以数据的形式出现),则这种耦合称为控制耦合。

在一个系统中,控制耦合往往是多余的,可以用数据耦合来替代它。

当把整个数据结构作为参数传递而被调用的模块只需要使用其中一部分数据元素时,就出现了特征耦合。

当两个或多个模块通过一个公共数据环境相互作用时,它们之间的耦合称为公共环境耦合。

最高程度的是内容耦合。如果出现下列情况之一,两个模块间就发生了内容耦合。

  • 一个模块访问另一个模块的内部数据
  • 一个模块不通过正常入口而转到另一个模块的内部
  • 两个模块有一部分程序代码重叠(汇编程序)
  • 一个模有多个入口

尽量使用数据耦合,少用控制耦合和特征耦合,限制公共环境耦合的范围,完全不用内容耦合

内聚

内聚标志的一个模块内各个元素彼此结合的紧密程度,它是信息隐藏和局部化概念的拓展。

低内聚有如下几类:

  • 1.如果一个模块完成一组任务,这些任务彼此间即使有关系,关系也是松散的,这叫做偶然内聚
  • 2.有时在写完一个程序之后,发现一组语句在两处或三处出现,于是把这些语句作为一个模块以节省内存,这样就出现了偶然内聚的模块。
  • 3.如果一个模块完成的任务在逻辑上属于相同或相似的一类,则称为逻辑内聚
  • 4.如果一个模块包含的任务必须在同一段时间内执行,称为时间内聚

中内聚有如下两类:

  • 1.如果一个模块内的处理元素是相关的,而且必须以特定次序执行,则称为过程内聚
  • 2.如果模块中所有元素都使用同一个输入数据和产生同一组输出数据,则称为通信内聚

高内聚有如下两类:

  • 1.如果一个模块内的处理元素和同一个功能密切相关,而且这些处理必须顺序执行,则称为顺序内聚
  • 2.如果模块内所有处理元素属于一个整体,完成一个单一的功能,则称为功能内聚

功能内聚是最高的内聚。

启发规则

有益的启示,提高软件质量

  • 改进软件结构提高模块独立性
  • 模块规模应该适中
  • 深度、宽度、扇出和扇入都应该适当
  • 模块的作用域应该在控制域之内
  • 力争降低模块接口的复杂程度
  • 设计单入口单出口的模块
  • 模块功能应该可以预测

描绘软件结构的图形工具

层次图和HIPO图

层次图

HIPO图(层次图加输入/处理/输出图),为了能追踪,在H图里除了最顶层的方框,其余都加了编号。

结构图

一个方框代表一个模块,框内注明模块的名字或主要功能。

方框之间的箭头(或直线)表示模块的调用关系。

尾部是空心圆表示传递的是数据,实心则是控制信息。

通常用层次图作为描绘软件结构的文档。

面向数据流的设计方法

概念

面向数据流的设计方法把信息流映射成软件结构,信息流的类型决定了映射的方法。

信息流有下述两种类型:

  • 1.变换流:从外部到内部在到外部(如左图)
  • 2.事物流:从输入数据到确定类型到选择一条路(如右图)