text: 系统分析与设计方法---结构化分析与设计原创
  1 结构化分析
  结构化分析方法的基本思想是自顶向下逐层分解。
  对于一个复杂的问题，人们很难一下子考虑问题的所有方面和全部细节，通常可以把一个大问题分解成若干个小问题，每个小问题再分解成若干个更小的问题，经过多次逐层分解，每个最底层的问题都是足够简单、容易解决的，于是复杂的问题也就迎刃而解了。
  这个过程就是分解过程。
  结构化分析与面向对象分析方法之间的最大差别是:结构化分析方法把系统看作一个过程的集合体，包括人完成的和电脑完成的;而面向对象方法则把系统看成一个相互影响的对象集。
  在接下来的部分将对它们一一做简单介绍。
  1.结构化分析的工作步骤
  在介绍具体的结构化分析方法之前，先对如何进行结构化分析做一个总结性描述，以帮助大家更好地应用该方法。
  (2)建立系统逻辑模型。
  (3)划清人机界限。
  DFD 是一种图形化的系统模型，它在一张图中展示信息系统的主要需求，即输入、输出、处理(过程)、数据存储。
  由于从 DFD 中可以很容易地看出系统紧密结合的各个部分，而且整个图形模式只有 5 个符号需要记忆，所以深受分析人员的喜爱，因而广为流行。
  过程:也称为加工，一步步地执行指令，完成输入到输出的转换。
  外部实体:也称为源/宿，系统之外的数据源或目的。
  数据存储:也称为文件，存放数据的地方，一般是以文件、数据库等形式出现。
  数据流:从一处到另一处的数据流向，如从输入或输出到一个过程的数据流。
  实时连接:当过程执行时，外部实体与过程之间的来回通信。
  (1)数据流图的层次。
  正如前面提到的，结构化分析的思路是依赖于数据流图进行自顶而下的分析。
  这也是因为系统通常比较复杂，很难在一张图上将所有的数据流和加工描述清楚。
  因此，数据流图提供一种表现系统高层和低层概念的机制。
  也就是先绘制一张较高层次的数据流图，然后在此基础上，对其中的过程(处理)进行分解，分解成为若干独立的、低层次的、详细的数据流图，而且可以这样逐一地分解下去，直至系统被清晰地描述出来。
  数据流图的层次如图 8-6 所示。
  Context 图，也就是系统上下文范围关系图。
  这是描述系统最高层结构的DFD 图。
  它的特点是，将整个待开发的系统表示为一个过程，将所有的外部实体和进出系统的数据流都画在一张图中。
  图 8-7 就是一个 Context 图的例子。
  Context 图用来描述系统有什么输入、输出数据流，与哪些外部实体直接相关，可以把整个系统的范围勾画出来。
  (3)逐级分解。
  当完成了 Context 图的建模之后，就可以在此基础上进行进一步的分解。
  图 8-8 是在 Context 图的基础上做的第一次分解，而在 Context 图中只有一个过程，那就是系统，将其编号为 0。
  而接下来对 Context 图进行的分解，其实就是对这个编号为 0 的过程进行更细化的描述，在这里引入了新的过程、数据存储，为了能够区分其位置的级别，在这层次上的过程将以 1、2、3 为序列进行编号。
  (4)如何画 DFD。
  DFD 的绘制是一个自顶向下、由外到里的过程，通常按照以下几个步骤进行。
  画系统的输入和输出:就是在图的边缘标出系统的输入、输出数据流。
  这一步其实是决定研究的内容和系统的范围。
  在画的时候，可以先将尽可能多的输入、输出画出来，然后再删除多余的，增加遗漏的。
  画数据流图的内部:将系统的输入、输出用一系列的处理连接起来，可以从输入数据流画向输出数据流，也可以从中间画出去。
  为每一个数据流命名:命名的好坏与数据流图的可理解性密切相关，应避免使用空洞的名字。
  为加工命名:注意应该使用动宾短语。
  不考虑初始化和终点，暂不考虑出错路径等细节，不画控制流和控制信息。
  3.细化记录DFD部件
  为了更好地描述DFD的部件，结构化分析方法还引入了数据字典、结构化语言及决策树、决策表等方法。
  通过使用这些工具，能对数据流图中描述不够清晰的地方进行有效的补充。
  其其中数据字典应用最为广泛，下面将详细说明数据字典的相关使用方法。
  通常数据字典的每一个条目中包括以下信息。
  ① 名称:数据或控制项、数据存储或外部实体的主要名称，如果有别名的还应该将别名列出来。
  ② 何处使用/如何使用:使用数据或控制项的加工列表，以及如何使用。
  ③ 内容描述:说明该条目的内容组成，通常采用以下符号进行说明。
  =:由…+:和，代表顺序连接的关系。
  [ | ]:或，代表从中选择一个。
  {}*:n 次重复。
  ():代表可选的数据项。
  *:表示特定限制的注释。
  ④ 补充信息:关于数据类型、默认值、限制等信息。
  下面就是一个数据字典的实例:
  9}8
  9}4
  2 结构化设计
  1.概要设计与详细设计的主要任务
  它采用结构图(包括模块、调用、数据)来描述程序的结构，此外还可以使用层次图和HIPO(层次图加输入/处理/输出图)。
  整个过程主要包括:复查基本系统模型、复查并精化数据流图、确定数据流图的信息流类型(包括交换流和事务流)、根据流类型分别实施变换分析或事务分析、根据软件设计原则对得到的软件结构图进一步优化。
  而详细设计阶段的主要任务则是确定应该如何具体地实现所要求的系统，得出对目标系统的精确描述。
  常使用的工具包括程序流程图、盒图、PAD(Problem Analysis Diagram，问题分析图)、PDL(Program Design Language，程序设计语言)。
  如图 8-9 所示，结构图的基本成分包括模块、调用(模块之间的调用关系)和数据(模块间传递及处理数据信息)。
  结构图是在需求分析阶段产生的数据流图的基础上进行进一步的设计。
  它将 DFD 图中的信息流分为两种类型。
  变换流:信息首先沿着输入通路进入系统，并将其转换为内部表示，然后通过变换中心(加工)的处理，再沿着输出转换为外部形式离开系统。
  具有这种特性的加工流就是变换流。
  事务流:信息首先沿着输入通路进入系统，事务中心根据输入信息的类型在若干个动作序列(活动流)中选择一个执行，这种信息流称为事务流。
  3.程序流程图和盒图
  程序流程图和盒图都是用来描述程序的细节逻辑的，其符号如图 8-10 所示。
  但它也带来了一个副作用，那就是修改相对比较困难。
  4.PAD 和 PDL
  PAD 是问题分析图的缩写，它符合自顶向下、逐步求精的原则，也符合结构化程序设计的思想，它最大的特点在于能够很方便地转换为程序语言的源程序代码。
  PDL 则是语言描述工具的缩写，它和高级程序语言很相似，也包括数据说明部分和过程部分，还可以带注解等成分，但它是不可执行的。
  PDL 是一种形式化语言，其控制结构的描述是确定的，但内部的描述语法是不确定的。
  PDL 通常也被称为伪码。
  在结构化方法中，模块化是一个很重要的概念，它是将一个待开发的软件分解成为若干个小的简单部分--模块，每个模块可以独立地开发、测试。
  这是一种复杂问题的“分而治之”原则，其目的是使程序的结构清晰、易于测试与修改。
  具体来说，模块是指执行某一特定任务的数据结构和程序代码。
  通常将模块的接口和功能定义为其外部特性，将模块的局部数据和实现该模块的程序代码称为内部特性。
  而在模块设计时，最重要的原则就是实现信息隐蔽和模块独立。
  模块经常具有连续性，也就意味着作用于系统的小变动将导致行为上的小变化，同时规模说明的小变动也将影响到一小部分模块。
  1.信息隐蔽原则
  信息隐蔽是开发整体程序结构时使用的法则，即将每个程序的成分隐蔽或封装在一个单一的设计模块中，并且尽可能少地暴露其内部的处理。
  通常将难的决策、可能修改的决策、数据结构的内部连接以及对它所做的操作细节、内部特征码、与计算机硬件有关的细
  节等隐蔽起来。
  2.模块独立性原则
  保持模块的高度独立性，也是设计过程中的一个很重要的原则。
  通常用耦合(模块之间联系的紧密程度)和内聚(模块内部各元素之间联系的紧密程度)两个标准来衡量，设计的目标是高内聚、低耦合。
  除了满足以上两大基本原则之外，通常在模块分解时还需要注意:保持模块的大小适中，尽可能减少调用的深度，直接调用该模块的个数应该尽量大，但调用其他模块的个数则不宜过大;保证模块是单入口、单出口的;模块的作用域应该在控制域之内;功能应该是可预测的。