结构化分析与设计方法是一种面向数据流的需求分析和设计方法。
它适用于分析和设计大型数据处理系统,是一种简单、实用的方法。
一、结构化分析
结构化分析方法的基本思想史自顶向下逐层分解。
分解和抽象是控制问题复杂性的两种基本手段。
把一个大问题分解成若干个小问题,每个小问题在分解成更小的问题,让每个最底层的问题都足够简单、容易解决,这个过程就是分解过程。
结构化分析与面向对象分析方法之间最大的差别是:
面向对象方法把系统看成一个相互影响的对象集。
结构化分析方法把系统看作一个过程的集合体,包括人完成的和电脑完成的。特点是利用数据流图帮助人们理解问题,对问题进行分析。
结构化分析一般包括以下工具:
1 | 数据流图(Data Flow Diagram,DFD) |
1、结构化分析的工作步骤
(1)研究“物质环境”
首先应该画出当前系统的数据流图,说明系统的输入、输出数据流,说明系统的数据流情况,经历了那些处理过程。
(2)简历系统逻辑模型
在物理模型建立完成之后,接下来就是画出相对于真实系统的等价逻辑数据流图。
在前一步简历的数据流图的基础上,将所有自然数据流都转成等价的逻辑流。
比如将现实世界中的“送往总经理办公室”改成“报送表格”。
(3)划清人机界限
确定在系统逻辑模型中,哪些通过系统自动化完成,哪些手工操作。
2、数据流图DFD
DFD是一种图形化的系统模型,主要在图中展示主要需求,包括输入、输出、处理、数据存储等过程。
DFD包括以下几个基础元素:
1 | 过程:也称为加工,一步步地执行指令,完成输入到输出的转换。 |
(1)数据流图的层次
结构化的思路是依赖于数据流图自顶向下分析。
因为系统通常比较复杂,很难在一张图上将所有的数据流和加工描述清楚。
因此数据流图分为高层次和低层次的图,由高层次逐步分解。
(2)Context图
系统上下文范围关系图。是系统最高层结构的DFD图。
特点是将待开发的系统表示成一个过程,将所有外部实体和进出系统的数据流都花在一张图中。
(3)逐级分解
保持输入、输出不变,由于是对过程0分解进行分解,所以叫DFD0层图。
对DFD1层图进行分解,其编号就是1.1,1.2……
(4)如何画DFD。
1 | 画系统的输入和输出 |
3、细化记录DFD部件
数据字典是很适用和有效的细化手段。他对所有和系统相关的数据元素进行明确的定义。
数据字典的每一个条目中包括:
1 | 名称 |
内容描述的符号包括
1 | = 由xxx组成 |
实例:
1 | 客户信息=客户编号+客户名称+身份证号+手机 |
二、结构化设计
结构化设计包括架构设计、接口设计、数据设计、过程设计等。
是面向数据流的设计,自顶向下、逐步求精、模块化的过程。
1、概要设计与详细设计的主要任务
概要设计
概要设计阶段的主要任务是设计软件的结构、确定系统由哪些模块组成,每个模块之间的关系。
整个过程包括:
1 | 复查基本系统模型 |
详细设计
详细设计阶段的主要任务是确定应该如何具体地实现所要求的的系统,得出对目标系统的精确描述。
采用自顶向下、逐步求精的设计方式,单入口单出口的控制结构。
常用工具包括:
1 | 流程图 |
2、结构图
结构图包括模块、调用、和数据
结构图是在数据流图的基础上进一步设计,将DFD中的信息流分成交换流和事务流。
交换流
信息沿着输入通路进入系统,将其转换为内部表示,然后通过交换中心(加工)的处理,再验证输出转换为外部形式离开系统。
事务流
信息沿着输入通道进入系统,事务中心根据输入信息的类型在若干活动流选择一个执行。
3、流程图和盒图
流程图和盒图都是描述程序的细节逻辑。
流程图的特点是简单、直观、医学,缺点是由于其随意性使画出来的流程图容易变成费及饿哦固化的流程图。
盒图是为了解决这一问题设计的。
盒图的主要特点是功能域明确、无法任意转移控制、容易确定全局数据和局部数据的作用域、容易表示嵌套关系、可以表示模块的层次结构。
盒图的缺点是修改相对比较困难。
4、PAD和PDL
问题分析图PAD,能够方便的转换成程序语言的源程序代码。
语言描述工具PDL,伪代码,形式化语言,其控制结构和描述是确定的,但内部的描述语言是不确定的。
三、模块设计
在模块化方法中,将软件分解成若干小的模块,每个模块可独立开发、测试。
模块设计时,最重要的原则是实现信息隐蔽和模块独立。
1、信息隐蔽原则
将难的决策、可能修改的决策、数据结构的内部链接以及对他所做的操作细节、内部特征码、与计算机硬件有关的细节隐藏起来。
可以提高软件的可修改性、可测试性和可移植性。
2、模块独立性原则
每个模块完成一个相对独立的特定子功能,并与其他模块之间的联系最简单。
设计的目标是高内聚、低耦合。
从高到低对7种内聚类型排序:
内聚类型 | 描述 |
---|---|
功能内聚 | 完成一个单一功能,各个部分协同工作,缺一不可 |
顺序内聚 | 处理元素相关,而且必须顺序执行 |
通信内聚 | 所有处理元素居中在一个数据结构的区域上 |
过程内聚 | 处理元素相关,而且必须按特定的次序执行 |
瞬时内聚 | 所包含的任务必须在同一时间间隔内执行,如初始化模块 |
逻辑内聚 | 完成逻辑上相关的一组任务 |
偶然内聚 | 完成一组没有关系或松散关系的任务 |
从低到高7种耦合类型排序:
耦合类型 | 描述 |
---|---|
非直接耦合 | 没有直接联系,互相不依赖对方 |
数据耦合 | 借助参数表传递简单数据 |
标记耦合 | 一个数据结构的一部分借助于模块接口来传递 |
控制耦合 | 模块间传递的信息中包括用于控制模块内部逻辑的信息 |
外部耦合 | 与软件意外的环境有关 |
公共耦合 | 多个模块引用同一个全局数据区 |
内容耦合 | 一个模块访问另一个模块的内部数据 |
- | 一个模块不通过正常入口转到另一个模块的内部 |
- | 两个模块有一部分程序代码重叠 |
- | 一个模块有多个入口 |
系统设计时,除了保持信息隐蔽和模块独立性之外,还需要考虑:
1 | 保持模块大小适中 |