第3章 结构化分析与设计(传统软件工程)
- 经过40年的发展,软件工程已经从第一代(传统软件工程)经历第二代(OO软件工程)发展到第三代软件工程(基于构件的软件工程)
1. 概述
1.1 结构化分析与设计的由来
1.1.1 瀑布模型的首次实践
-
结构化设计(structed design,SD)技术与结构化分析(structed analysis,SA)技术合称为结构化分析与设计方法
-
结构化分析与设计是瀑布模型的首次实践,该模型一般可划分为以下阶段:
需求定义与分析->总体设计->详细设计->编码->测试->使用维护
1.1.2 SA与SD的流程
-
系统开发从需求分析开始,首先建立系统的需求模型;接着通过SD方法提供的映射规则,把分析模型转化为初始设计模型;然后再优化为系统的最终设计模型
系统的整个开发流程,可以简明地表示为: 结构化分析(工具:DFD、PSPEC)-> 分析模型(分层DFD图) + SRS 结构化设计(工具:SC图)->映射为 初始设计模型(初始SC图) 初始设计模型(初始SC图) ->优化为 最终设计模型(最终SC图) * 数据流图(DFD,Data Flow Diagram) * 加工规格说明(PSPEC,Process Specification) * 软件需求规格说明书(SRS,Software Requirement Specification) * 结构图(SC, Structure Chart)
1.1.3 基本任务与指导思想
1. 结构化分析
- 定义:使用DFD、DD、结构化语言、判定表等工具,建立一种新的、称为结构化说明书的目标文挡(SRS)
- SA有两项基本任务:即建立系统分析模型(analysis model)和编写软件规格需求说明书(software requirements specification),SRS,二者都是分析阶段必须完成的文档
- 建立分析模型:通常有功能模型、数据模型和行为模型,是形成SRS文档、完成软件设计的基础
- 编写需求规格说明书:SRS是分析阶段编写的、以文字为主的文档,主要内容包括引言、信息描述、功能描述、行为描述、质量保证、接口描述以及其他需求等
- 主要指导思想:抽象与分解
2. 结构化设计
- 软件设计 = 总体设计 + 详细设计
- SD阶段把分析模型中的DFD图转换为最终SC图,SC图需分两步完成:即首先通过“映射”获得初始SC图;然后通过“优化”获得最终SC图

- 指导思想:分解和细化
1.2 SA模型的组成与描述
1.2.1 SA模型的组成
- 核心是数据词典(data dictionary,DD),是系统涉及的各种数据对象的总和
- 从DD出发可构建3种图:

- CFD:控制流图
-
实体—联系图(entity-relation diagram,E-R图)用于描述数据对象及数据对象之间的关系,用于数据建模
-
数据流图(data flow diagram,DFD)指明系统中的数据是如何流动和变换的,以及描述使数据流进行变换的功能。在DFD图中出现的每个功能,可在加工规格说明(process specification,PSPEC)中进行描述,用于功能建模
-
状态变换图(status transform diagram,STD)指明系统对外部事件如何响应,表明系统的各种状态以及状态间的变换,用于行为建模,CSPEC控制规格说明描述软件控制方面的附加信息
1.2.2 SA模型的描述工具
1. 数据流图(DFD)
-
数据流图组成符号

-
DFD(数据流图)!= Flow Chart (流程图)
-
DFD 不能表示程序的控制结构,例如选择结构或循环结构
-
DFD用作软件分析阶段的工作,而程序流图用于表示程序的模块设计
2. 数据字典(DD)
- 定义:系统涉及的各种数据对象的总和
- 作用:对软件中的每个数据规定一个定义条目
- 数据字典内容分类:
-
数据项
-
数据流:由多个相关数据项组成
-
数据文件: “组织”是数据文件条目所特有的内容,用于说明文件中的记录将按照什么规则组合成文件
-
3. 加工规格说明
- 加工规格说明工具:
-
结构化语言


-
判定表

-
判定树

1.3 SD模型的组成与描述
1.3.1 SD模型的组成
- SD模型是由SA模型映射而来的

1.3.2 SD模型的描述工具
- SD模型的组成:数据设计、体系结构设计、接口设计、过程设计
- 过程设计主要指模块内部的详细设计
1. 结构图(SC)
-
体系结构设计是用来确定软件结构的,其描述工具为结构图(SC,structure chart)
-
SC图的组成符号
矩形框来表示模块 带箭头的连线表示模块间的调用关系 连线边标出传入和传出模块的数据流

-
传入模块:
从下属模块取得数据,经过某些处理,再将其传送给上级模块 -
传出模块:
从上级模块获得数据,进行某些处理,再将其传送给下属模块。 -
变换模块:
从上级模块取得数据,进行特定的处理,转换成其它形式,再传送回上级模块。 -
控制(协调)模块:
只调用其他模块,不受其他模块调用的模块,如变换型结构的顶层模块,事务型结构的事务中心 -
源模块:
不调用其它模块的传入模块,只用于传入部分的始端 -
漏模块:
不调用其它模块的传出模块,只用于传出部分的末端

2. SC图的模块调用
-
简单调用

-
选择调用

-
循环调用

2. 结构化系统分析
- 自顶向下对系统进行功能分解,画出分层DFD图
- 由后向前,定义系统的数据和加工,编制DD, PSPEC
- 最终写出SRS
3. 结构化系统设计
- 软件设计目前也有两种主流方法,即基于结构化程序设计的结构化软件设计和基于面向对象技术的面向对象软件设计
3.1 SD概述
-
传统的软件设计又可以细分为面向数据流的设计和面向数据(或数据结构)的设计两大类,前者以SD方法为主要代表,后者以Jackson方法为主要代表
-
联系与区别:
共同点: 1. 都遵循结构化程序设计、逐步细化等设计策略 2. 都要从分析模型导出设计模型 3, 服从“程序结构必须适应问题结构”的原则 不同点: 1. SD注重模块的合理划分,目标是得出软件的体系结构 2. Jackson方法要求最终得出程序的过程性描述,并不明确提出软件应该先分成模块等概念,更适合于在模块设计阶段使用
3.2 从分析模型导出设计模型
- 传统软件设计所产生的数据设计、体系结构设计、接口设计和过程设计,均可从分析模型包含的各种图形和说明中找出所需的信息
- 数据流图导出体系结构设计、接口设计,PSPEC、CSPEC、状态转换图导出过程设计

3.3 SD的步骤: 从DFD图到SC图
- 结构化软件的设计:通常从DFD图到SC图的映射开始
- 数据流图的类型:从SA获得的DFD中,所有系统可归结为变换型结构和事务型结构
-
变换型结构由传入路径、变换中心和传出路径三部分组成

-
事务型结构至少由一条接受路径、一个事务中心与若干条动作路径组成

- SD方法的步骤
- 为了实现从DFD到SC映射,结构化设计规定了下列4个步骤:
- 复审DFD图,必要时可再次进行修改或细化
- 鉴别DFD图所表示的软件系统的结构特征,确定它所代表的软件结构是属于变换型还是事务型
- 按照SD方法规定的一组规则,把DFD图变换映射为初始SC图
- 按照优化设计的指导原则改进初始SC图,获得最终SC图
3.4 变换映射
- SD方法提供了一组映射规则,方便了初始SC图的设计
- 划分DFD图的边界,区分传入、传出和变换中心3个部分
- 建立初始SC图的框架
-
顶层都只含一个用于控制的主模块
-
第一层包括传入、传出和中心变换三个模块
-
- 分解SC图的各个分支
3.5 事务映射
- 事务映射也可分为三个步骤:
- 在DFD图上确定事务中心、接受部分(包括接受路径)和发送部分(包括全部动作路径)
- 画出SC图框架,把DFD图的三个部分分别映射为事务控制模块,接受模块和动作发送模块
- 分解和细化接受分支和发送分支,完成初始的SC图
3.6 优化初始SC图的指导规则
两条指导规则:
-
对模块划分的原则
- 模块独立性,简化接口
- 模块大小 范围10-100行,最好30-60行
- 模块位置应需要变更
-
高扇入/低扇出的原则
- 扇入高则上级模块多,能够增加模块的利用率;扇出低则下级模块少,可以减少模块间调用和控制的复杂度

- 煎饼形一般是不可取的,因为它常常是高扇出的结果,此时可用增加中间层的方法使扇出减小

- 扇入高则上级模块多,能够增加模块的利用率;扇出低则下级模块少,可以减少模块间调用和控制的复杂度
4. 模块设计
- 传统的软件设计工程分两步:总体(结构)设计---用最终SC图表示;模块设计---用逐步细化的方法来实现
- 模块设计用于对系统中的每个模块给出足够详细的逻辑描述,故亦称详细设计
4.1 模块设计的目的与任务
-
目的:确定模块采用的算法和块内数据结构,用选定的表达工具给出清晰的描述
-
任务:编写软件的模块设计说明书
1. 为每个模块确定采用的算法 2. 确定每一模块使用的数据结构 3. 确定模块接口的细节,包括接口与界面
4.2 模块设计的原则与方法
-
清晰第一的设计风格
- 增加可读性
- 清晰第一,效率第二
-
结构化的控制结构
- 三种控制结构:顺序、选择和循环
- 遵循单入口,单出口的原则
-
逐步细化的实现方法
- 把给定的模块功能转换成它的详细逻辑描述,通常都采用逐步细化的策略
- 逐步细化的设计步骤
- 由粗到细地对程序进行细化
* 每一步可以选择其中的一条至数条,将它们分解成更多更详细的步骤 - 在细化程序的过程时,同时对数据描述进行细化过程和数据结构的细化并行进行,在适当的时候交叉穿插
- 每一步细化均使用结构化语言,最后一步直接用伪代码来描述,以便编码时直接翻译为源程序
- 由粗到细地对程序进行细化
4.3 详细设计的表达工具
-
流程图和N-S图


-
伪代码和PDL((Program Design Language))语言
- 伪代码不能在计算机上执行

浙公网安备 33010602011771号