第三章 结构化设计

第三章 结构化设计


3.1

数据设计:
数据模型及核心数据字典转变为数据结构。
体系结构设计:
功能模型中数据流图转变成计算机模块框架。
接口设计:
功能模型中数据流图转变成软件内部、软件与协作系统间、软件用户间通信方式。
过程设计:
行为模型及功能模型中的“处理规格说明”转换成软件构件过程描述。

3.2 结构化设计的概念与原理

3.2.1 模块化

  • 模块(module):“模块”又称“构件”一般指用一个名字调用的相邻程序元素序列
  • 模块化设计(modular design):按适当的原则把软件划分成一个个较小的、相关而又独立的模块。
    第三章 结构化设计_第1张图片
    第三章 结构化设计_第2张图片

3.2.2 抽象

抽出事物的本质特性,暂不考虑细节。

3.2.3 求精

求精是指为了能集中精力解决主要问题,尽量推迟对细节问题的考虑,实际上是一个细化过程,与抽象是互补的概念。

3.2.4 信息隐藏

每个模块的实现细节对于其他模块来说是隐藏的,模块中所包含的信息是不允许其他不需要这些信息的模块访问的。
每个用户只能通过接口来了解该模块,而所有的实现都隐藏起来,使模块之间的关系相对简单。

3.3 模块独立

  1. 容易分工合作
  2. 容易测试何维护,修改工作量较小,错误传播范围小,扩充功能容易。
    两个定性度量标准:耦合和内聚。

3.3.1 耦合

定义: 软件结构中不同模块间互连程度度量。取决模块间接口复杂程度,通过接口数据。追求尽可能松散耦合系统。

  • 非直接耦合
    两个模块分别能独立地工作不需要另一模块存在。
  • 数据耦合
    两模块通过参数交换数据信息。
  • 控制耦合
    如果一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能,就是控制耦合。
    第三章 结构化设计_第3张图片
  • 公共耦合
    若一组模块都访问同一个公共数据环境,则它们之间的耦合就称为公共耦合。公共的数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等。
    第三章 结构化设计_第4张图片
  • 内容耦合
  1. 一个模块直接访问另一个模块的内部数据;
  2. 一个模块不通过正常入口转到另一模块内部;
  3. 两个模块有一部分程序代码重迭(只可能出现 在汇编语言中);
  4. 一个模块有多个入口
    第三章 结构化设计_第5张图片

设计原则: 尽量使用数据耦合,少用控制耦合,限制公共环境耦合,完全不用内容耦合。

3.3.2 内聚

(由高到低)

  • 功能内聚
    一个模块中各个部分都是完成某一具体功能必不可少的组成部分
  • 顺序内聚
    模块内处理元素同某功能密切相关,顺序执行。
  • 通信内聚
    一模块内各功能部分都使用相同输入数据,或产生相同输出数据。
  • 过程内聚
    使用流程图做为工具设计程序时,把流程图中的某一部分划出组成模块,就得到过程内聚模块。例如,把流程图中的循环部分、判定部分、计算部分分成三个模块,这三个模块都是过程内聚模块。
  • 时间内聚
    时间内聚又称为经典内聚。这种模块大多为多功能模块,但模块的各个功能的执行与时间有关,通常要求所有功能必须在同一时间段内执行。例如初始化模块和终止模块。
  • 逻辑内聚
    一模块完成功能在逻辑上属相同相似一类。
  • 偶然内聚
    模块内各部分间没有联系,即使有也很松散。

3.5 启发规则

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

3.6 面向数据流的设计方法

-变换流
信息沿输入通路进入系统,同时由外部形式变换成内部形式,进入系统的信息通过变换中心,经加工处理以后再沿输出通路变换成外部形式离开软件系统。当数据流图具有这些特征时,这种信息流就叫作变换流。
第三章 结构化设计_第6张图片

  • 事物流
    数据沿输入通路到达一个处理T,这个处理根据输入数据的类型在若干个动作序列中选出一个来执行。这类数据流应该划为一类特殊的数据流,称为事务流。
    第三章 结构化设计_第7张图片

面向数据流设计过程

第三章 结构化设计_第8张图片

变换分析

第1步 复查基本系统模型。
复查的目的是确保系统的输入数据和输出数据符合实际。

第2步 复查并精化数据流图。
正确处理项完成相对独立功能。

第3步 确定数据流图具有变换特性还是事务特性。
没有明显事务中心,为变换型。

第4步 确定输入流和输出流的边界,从而孤立出变换中心。

第5步 完成第一级分解

第6步 完成第二级分解

事务分析

事务分析的设计步骤和变换分析的设计步骤大部分相同或类似,主要差别仅在于由数据流图到软件结构的映射方法不同。由事务流映射成的软件结构包括一个接收分支和一个发送分支。
第三章 结构化设计_第9张图片
一般说来,如果数据流不具有显著的事务特点,最好使用变换分析;反之,如果具有明显的事务中心,则应该采用事务分析技术。

3.7 过程设计

3.7.1 过程设计的任务

  • 确定模块算法
  • 确定模块使用数据结构
  • 确定模块接口(系统外部接口、用户界面、内部模块间接口细节、输入数据和输出数据)

3.7.2 结构化过程设计

结构化程序设计技术是过程设计一关键技术。

  • 经典定义:
    程序代码通过顺序、选择、循环三种控制结构连接,
    单入口单出口。
  • 扩展定义:
    可限制使用GOTO语句、DO_UNTIL和DO_CASE
  • 修正定义:
    LEAVE和BREAK,可从循环中转移出来。

3.7.3 结构化程序设计工具

  1. 结构流程图
    第三章 结构化设计_第10张图片
    第三章 结构化设计_第11张图片
    第三章 结构化设计_第12张图片
    第三章 结构化设计_第13张图片
    第三章 结构化设计_第14张图片
    第三章 结构化设计_第15张图片

优点:

  • 对控制流程描绘直观,便于初学者掌握。

缺点:

  • 不是逐步求精好工具,过早考虑控制流程,非整体结构;
  • 用箭头代表控制流,程序员随意转移控制;
  • 不易表示数据结构和调用关系。
  1. N-S图(盒图)
    第三章 结构化设计_第16张图片

特点:

  • 功能域(一特定控制结构的作用域)明确;
  • 不可能任意转移控制;
  • 容易确定局部和全程数据的作用域;
  • 容易表现嵌套关系,也可表示模块的层次结构。
  1. PAD图
    第三章 结构化设计_第17张图片

优点:

  • 使用PAD图设计的程序必然是结构化程序;
  • PAD图描绘的程序结构十分清晰;
  • 用PAD图表现程序逻辑,易读、易懂、易记;
  • 容易将PAD图转换成高级语言源程序;
  • 支持自顶向下逐步求精。
  1. 判定表
    第三章 结构化设计_第18张图片

能清晰表示复杂的条件组合与应做动作间对应关系。
四部分:
左上部列出所有条件;
左下部所有可能做的动作;
右上部表示各种条件组合的一矩阵;
右下部是和每种条件组合相对应的动作。

  1. 判定树
    判定表变种,表示复杂条件组合与应做动作间对应关系。
    第三章 结构化设计_第19张图片
    优点:
    形式简单,易看出含义,易于掌握和使用。
    缺点:
    简洁性不如判定表,相同数据元素重复写多遍,
    越接近叶端重复次数越多。

  2. 伪码
    伪码,用正文形式表示数据和处理过程设计工具。

3.7.4 程序复杂度

McCabe方法

  1. 根据过程设计结果画出相应流图
    流图描述程序控制流,基本图形符号如下图所示。
    第三章 结构化设计_第20张图片
  2. 计算流图的环形复杂度
    第三章 结构化设计_第21张图片

3.8 面向数据结构设计方法

Jackson图

  1. 顺序结构
    第三章 结构化设计_第22张图片

  2. 选择结构
    第三章 结构化设计_第23张图片

  3. 重复结构
    第三章 结构化设计_第24张图片

JACKSON 图的优点

  • 便于表示层次结构,而且是对结构进行自顶向下分解的有力工具;
  • 形象直观可读性好;
  • 既能表示数据结构也能表示程序结构(因为结构程序设计也只使用上述3种基本控制结构)。

JACKSON 图的缺点

  • 用这种图形工具表示选择或重复结构时,选择条件或循环结束条件不能直接在图上表示出来,影响了图的表达能力,也不易直接把图翻译成程序;
  • 此外,框间连线为斜线,不易在行式打印机上输出。

改进的JACKSON图
第三章 结构化设计_第25张图片

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