软件工程技术--第四章 概要设计

第四章 概要设计

4.1 软件设计概述

4.1.1 软件设计的概念与重要性

​ 软件设计是软件工程的重要阶段,是一个将软件需求转换为软件表示的过程。软件设计的基本目标是用比较抽象概括的方式确定目标系统如何完成预定的任务,即确定系统的物理模型,解决软件系统“怎么做”的问题

软件设计的重要性有以下几点:

(1)软件开发阶段(设计、编码、测试)

(2)软件设计是开发阶段最重要的步骤,是将用户需求准确地转化为最终的软件产品的唯一途径。

(3)软件设计作出的决策,最终将直接影响软件实现的成败。

(4)软件设计是软件工程和软件维护的基础。

4.1.2 软件设计的任务

从工程管理的角度来看,可以将软件设计分为两个阶段:

概要设计(总体设计)——着重解决程序模块的设计问题

详细设计 (过程设计)——确定每个模块数据结构和内部的具体算法

4.2 概要设计的任务与步骤

4.2.1 概要设计的基本任务

(1)设计软件系统结构;

(2)数据结构及数据库设计;

(3)编写概要设计文档;

(4)评审概要设计文档。

  • 概要设计
    • 概要设计的主要任务是把需求分析得到的模型转换软件结构和数据结构

4.2.2 概要设计的步骤

  1. 选定体系结构

  2. 确定设计方案

  3. 设计软件结构

  4. 数据结构及数据库设计

  5. 制订测试计划

  6. 编写概要设计文档

  7. 概要设计文档评审

4.3 概要设计的原则

4.3 概要设计的原则

  • 模块化、抽象与逐步求精、信息隐蔽和局部化、模块独立、复用性设计。
  1. 模块化

模块化就是把整体软件划分成若干个模块,每个模块完成一个子功能。每个模块可独立地开发、测试,最后组装成完整的软件。

模块是构成软件的基本构件、模块化是大型软件设计中的基本策略

  • 模块化结论

​ 采用模块化,是使软件设计从难到易的基本方法。

​ 模块分解应适度。模块规模太小,完成每个模块的工作量很小,但设计和调试模块间的接口工作量随之增加。

  1. 抽象与逐步求精

抽象是指忽视一个主题中与当前目标无关的方面,以便更充分地注意与当前目标有关的方面。抽象可以分成若干级别,级别越高,细节越少。

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

  1. 信息隐藏和局部化

信息隐藏提高了模块的独立性,加强了外部对模块内部信息进行访问控制,它使得模块的局部错误尽量不影响其他模块。

  1. 模块独立性

​ 模块独立性概括了把软件划分为模块时要遵守的准则,也是判断模块构造是否合理的标准。模块独立性好的软件接口简单、容易开发,独立的模块也容易测试和维护。因此,模块独立性是软件质量的关键

  1. 复用性设计

​ 复用是指同一事物不做修改或稍加修改就可以多次重复使用。将复用思想用于软件开发称为软件复用,将软件的重用部分称为软构件。也就是说,在构造软件系统时不必从零做起,可通过直接使用或加以修改已有软构件来组装成新系统。

软件复用可提高软件的生产率。

4.4 模块的独立性

​ 模块独立性是指软件系统中每个模块只涉及软件要求的具体的子功能,而与软件系统中其他模块的接口是简单的。

​ 模块独立性的重要性:

具有独立的模块的软件比较容易开发出来。

独立的模块比较容易测试和维护。

​ 总之,模块独立是优秀设计的关键,而设计又是决定软件质量的关键环节。

​ 模块独立性取决于模块的内部和外部特征。一般用耦合内聚两个定性的指标来度量。

  • 模块之间的联系程度–耦合
  • 模块内的联系程度–内聚

​ 一个模块内部各个元素之间的联系越紧密,则模块的内聚度就越高,相对地,它与其他模块之间的耦合就越低,模块的独立性就越强。

​ 一个优秀的软件设计,应尽量做到高内聚、低耦合,从而提高模块的独立性。

4.4.1耦合性

软件结构中模块之间互相依赖的程度用耦合来度量。

连接模块之间的信息有: 数据信息、描述标志信息、控制信息

软件工程技术--第四章 概要设计_第1张图片

  1. 非直接耦合

​ 如果两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的,这就是非直接耦合。这种耦合的模块独立性最强。

软件工程技术--第四章 概要设计_第2张图片

  1. 数据耦合

​ 若两个模块之间仅通过模块参数交换信息,且交换的信息全部为简单数据,则称这种耦合为数据耦合。

软件工程技术--第四章 概要设计_第3张图片

  1. 标记耦合(特征耦合)

​ 如两个模块通过传递数据结构(不是简单数据,而是记录、数组等)加以联系,或都与一个数据结构有关系, 则称这两个模块间存在标记耦合。

  1. 控制耦合

如果一个模块通过传送开关、标志、名字 等控制信息,明显地控制选择另一模块的功能就是控制耦合。

  1. 外部耦合

​ 一组模块均与同一外部环境关联(例如, I/O模块与特定的设备、格式和通信协议相关联),它们之间

便存在外部耦合。外部偶合必不可少,但这种模块数目应尽量少

  1. 公共耦合(公共环境耦合)

​ 若两个或多个模块通过引用公共数据相互联系,则称这种耦合为公共耦合。例如,在程序中定义了全局变量,并在多个模块中对全局变量进行了引用,则引用全局变量的多个模块间就具有了公共耦合关系。

​ 公共耦合存在的问题: (1)软件可理解性降低。(2)诊断错误困难。(3)软件可维护性差。(4)软件可靠性差

​ (公共数据区及全程变量无保护措施) 慎用公共数据区和全程变量!!!

  1. 内容耦合

​ 如果发生下列情形,两个模块之间就发生了内容耦合

​ (1)一个模块直接访问另一个模块的内部数据;

​ (2) 一个模块不通过正常入口转到另一模块内部;

​ (3) 两个模块有一部分程序代码重迭(只可能出现在汇编语言中);

​ (4) 一个模块有多个入口。

4.4.2内聚性

​ 一个模块内各个元素彼此结合的紧密程度用内聚(或称聚合)来度量。一个理想的模块只完成一个功能,模块设计的目标之一是尽可能高内聚

软件工程技术--第四章 概要设计_第4张图片

  1. 功能内聚

一个模块中各个部分都是完成某一具体功能必不可少的组成部分,或者说该模块中所有部分都是为了完成一项具体功能而协同工作,紧密联系,不可分割的。则称该模块为功能内聚模块。

  1. 顺序内聚

若一个模块中的各个部分都与同一个功能密切相关,并且必须按照先后==顺序执行(==通常前一个部分的输出数据就是后一个部分的输入数据),则称该模块的内聚为顺序内聚。

  1. 通信内聚

如果一个模块内各功能部分都使用了相同的输入数据,或产生了相同的输出数据,则称之为通信内聚模块。通常,通信内聚模块是通过数据流图来定义的。

  1. 过程内聚

如果一个模块内的处理元素是相关的,而且必须以特定次序执行则称为过程内聚。

  1. 时间内聚

若一个模块包含了需要在同一时间段中执行的多个任务,则称该模块的内聚为时间内聚。

  1. 逻辑内聚

这种模块是把几种功能组合在一起,每次调用时,则由传递给模块的判定参数来确定该模块应执行哪一种功能。

  1. 偶然内聚

若一个模块由多个完成不同任务的语句段组成,各语句段之间的联系十分松散或根本没有任何联系,则称此模块的内聚为偶然内聚。

设计目标:高内聚,模块在软件过程中完成单一的任务

总结:

软件工程技术--第四章 概要设计_第5张图片

力争强内聚、弱耦合

耦合、内聚与模块独立性关系:耦合与内聚都是模块独立性的定性标准,都反映模块独立性的良好程度。但耦合是直接的主导因素,内聚则辅助耦合共同对模块独立性进行衡量。

4.4.3软件结构优化准则

  1. 模块功能的完善化
  2. 消除重复功能,改善软件结构
  3. 模块规模应该适中
  4. 模块的深度、宽度、扇出和扇入都应适当
  5. 模块的作用范围应该在控制范围之内
  6. 力争降低模块接口的复杂程度
  7. 设计单入口、单出口的模块
  8. 模块功能应该可以预测

4.5 软件结构设计的图形工具

概要设计的任务是确定软件系统的组成结构、各模块功能及模块间的里联系(接口)

表示软件结构的图形工具有层次图、IPO图和结构图

4.5.1 层次图

也称H图,用于表示软件的层次结构,特别适用于在自顶向下的设计时使用。

4.5.2 IPO图

IPO图是输入/处理/输出图(Input Process Output),其基本形式是三个方框,左边方框列出所有的输入数据,中间框列出主要的处理,右边框列出输出数据。

4.5.3 结构图

模块结构图用于表示软件系统的层次分解关系、模块调用关系、模块之间数据流和控制信息流的传递关系,是描述软件系统物理模型、进行概要设计的主要工具,也是软件文档的一部分。

4.6 结构化的设计方法

结构化设计方法SD)是面向数据流的设计方法,它以数据流图为基础,定义了将数据流图映射为软件结构图(即DFD→SC)的方法。它的设计步骤是先根据系统数据流图建立系统逻辑模型,再进行结构设计

设计步骤

  • 数据流图——>模块结构图

  • 数据流分为变换流和事务流两种,因此由数据流组成的数据流图也分为变换型数据流图和事务型数据流图两种类型。

  • 由变换型数据流图向结构图的映射称变换分析,由事务型数据流图向结构图的映射称事务分析

  • 分析数据流图中的数据流的类型:(1)变换型数据流(2)事务型数据流

  1. 数据流图的类型

    1. 变换流

      变换型数据流的特征是可以把它看成由输入变换中心输出三部分组成,这样的数据流图称为变换型数据流图

    2. 事务流

      事务型数据流的特征是可以把它看成具有在多种事务中选择执行某类事务的能力。这样的数据流图称为事务型数据流图

结构化设计的过程

  1. 精化DFD
  2. 确定DFD类型
  3. 把DFD映射到系统模块结构,设计模块结构的上层
  4. 基于DFD逐步分解高层模块,设计出下层模块
  5. 根据模块独立性原理,精化模块结构。
  6. 描述模块接口。

变换型DFD——导出模块结构图的方法

一、确定主处理,输入,输出

  • 确定主处理(即变换中心)

二、设计顶层模块及第一层模块

  • 顶层命名——按变换中心整体功能或关键处理命名

  • 第一层设计——输入模块、主处理、输出模块

三、设计中下层模块

  • 展开上层模块,分解出详细功能模块

事务型DFD——导出模块结构图的方法

  1. 确定事务中心
  2. 设计第一层模块——输入模块,事务中心模块
  3. 设计中下层模块

或者

  1. 顶层——控制模块
  2. 中下层各个子模块

练习题

  1. 在对数据流的分析中,主要是找到中心变换,这是从( C ) 导出结构图的关键。

    A.数据结构 B.实体关系 C.数据流图 D.E—R图

  2. ( D )数据处理问题的工作过程大致分为三步,即取得数据、变换数据和给出数据。

    A.非结构化 B.事务型 C.结构化验室 D.变换型

  3. 软件结构图中,模块框之间若有直线连接,表示它们之间存在( A )。

    A、 调用关系 B、 组成关系 C、 链接关系 D、 顺序执行关系

  4. 银行计算机储蓄管理信息系统中,根据客户提出的要求(如存款、取款、查询、挂失、咨询等)进行相应的业务处理的该层数据流图是( B )。

    A、变换型   B、事务型    C、既不是A也不是B    D、不一定

  5. 由变换型数据流图转换成模块结构图,其中包括变换模块,则( A )。

    A、变换模块就是主模块 B、变换模块的功能是将逻辑输入变换为逻辑输出

    C、变换模块没有下层模块 D、变换模块只能有一个输入量、一个输出量

  6. 变换型数据流图通常是( A )形态。

    A、线性   B、层次    C、网状   D、无规则

总结

  • 软件结构优化准则
  • 大型数据流图中,变换型、事务型两类结构同时存在。分级画结构图。
  • 任何数据都要经过输入—处理—输出,都可以用变换型分析方法来设计软件结构
  • 但当数据具有明显事务型特点时,用事务型分析方法。

概要设计文档与复审

  • 概要设计说明书
  • 引言
  • 总体设计
  • 接口设计
  • 运行设计
  • 系统数据结构设计(E-R转换成数据库结构
  • 系统出错处理设计

概要设计总结

一、任务

  1. 系统体系结构设计:确定系统的总体物理实现方案。

  2. 软件结构设计:确定模块和模块间的动态调用管理。

  3. 数据结构设计(或数据库设计):确定系统中数据的总体结构。(数据库:逻辑设计、物理设计、安全性设计)。

  4. 接口设计:外部接口、人机界面设计

二、设计原理

  1. 模块独立性原理:信息隐蔽、耦合、内聚

  2. 思维工具:抽象

  3. 启发式规则:改进软件结构,提高系统质量

三、设计工具: IPO图、结构图

四、面向数据流的设计方法----结构化设计方法

  1. 从分析型的数据流图向软件结构的转换

  2. 从事务型的数据流图向软件结构的转换

你可能感兴趣的:(软件工程技术,软件工程)