Transcript 第8章

第8章 结构化方法
第 8 章 结构化方法
8.1 概述
8.2 结构化分析
8.3 数据流图
8.4 数据字典
8.5 加工逻辑的描述
8.6 结构化设计
返回主目录
第8章 结构化方法
8.1 概述
1.
结构化方法是指根据某种原理,使用一定的工具,按照
特定步骤工作的软件开发方法。它遵循的原理是自顶向下、
逐步求精,使用的工具有数据流图(DFD)、数据字典、判
定表、判定树和结构化语言等。
结构化方法是从分析、设计到实现都使用结构化思想的
软件开发方法,实际上它由三部分组成:结构化分析
(Structured Analysis,简称SA),结构化设计(Structured
Design , 简 称 SD ) 和 结 构 化 程 序 设 计 ( Structured
Pergramming, 简称SP)。
第8章 结构化方法
2. 发展历程
在结构化方法的发展历程上,它是随着SP方法的提出、 SD
方法的出现直至SA方法提出才逐渐形成的。
1)
首先出现的是SP, 它是60年代末首先由Dijkstra提出的, 旨
在控制程序编制中的复杂性问题。SP被称为软件发展中的第三
个里程碑,Dijkstra提出“GOTO语句可以从高级语言中取消”,
1969年Bohm和Jacopini首次证明了只要三种控制结构(顺序、
选择、 重复)就能表达用一个入口和一个出口的流程图所能表
达的任何程序逻辑。
第8章 结构化方法
2)
70年代中期L.L.Constantine和E.Yourdon提出和倡导了结构
化设计。在SP取得重大成功的影响下,Yourdon等人把结构化
和逐步求精的思想由编码阶段应用推广到设计阶段,后来又扩
充到分析阶段,形成了包括SD和SA在内的基于数据流的系统
设计方法。SD的目标在于控制系统体系结构一级的复杂性,
实施原则是基于功能分解,验证技术是人工复审测试。
3)
70年代末期,由Demarco等人提出了SA方法。该方法旨在
减少分析活动中的错误,产生系统的逻辑模型,其分析的对象
是结构化的功能说明;它实施的原则是面向数据流,基于功能
分解,靠人工复审测试进行验证。
第8章 结构化方法
3. 基本思想
结构化方法总的指导思想是自顶向下,逐步求精, 它的两个
基本原则是抽象与分解。
4. 特点
结构化方法具有以下特点:
(1) 它是使用最早的开发方法, 使用时间也最长。
(2) 它应用最广, 特别适合于数据处理。
(3) 相应的支持工具多, 发展较为成熟。
第8章 结构化方法
5. 优点
结构化方法一经问世, 就显示出了它的以下几大优点:
(1) 简单、 实用。
(2) 适合于瀑布模型, 易为开发者掌握。
(3) 成功率较高, 据美国1000家公司统计, 该方法的成功
率高达90.2%, 名列第二,仅次于面向对象的方法。
(4) 特别适合于数据处理领域中的应用, 对其他领域的应
用也基本适用。
6.
(1) 对于规模大的项目, 特别复杂的应用不太适应。
第8章 结构化方法
2) 难于解决软件重用的问题。
(3) 难于适应需求的变化。
(4) 难于彻底解决维护问题。
第8章 结构化方法
8.2 结 构 化 分 析
8.2.1自项向下逐层分解的分析策略
面对一个复杂的问题,分析人员不可能一开始就考虑到问
题的所有方面以及全部的细节,采取的策略往往是分解,把一
个复杂的问题划分成若干小问题,然后再分别解决, 将问题的
复杂性降低到人可以掌握的程度。分解可分层进行,先考虑问
题最本质的方面,忽略细节,形成问题的高层概念,然后再逐
层添加细节,即在分层过程中采用不同程度的“抽象” 级别,
最高层的问题最抽象,而低层的较为具体。图8.1是自项向下逐
层分解的示意图。
第8章 结构化方法
顶层的系统X很复杂,可以把它分解为0层的1, 2, 3三个子
系统,若0层的子系统仍很复杂, 再分解为下一层的子系统1.1,
1.2, 1.3和3.1, 3.2, 3.3 ……直到子系统都能被清楚的理解为止。
图8.1的顶层抽象地描述了整个系统, 底层具体地画出了系
统的每一个细节, 而中间层是从抽象到具体的逐步过渡,这种
层次分解使分析人员分析问题时不至于一下子陷入细节,而是
逐步地去了解更多的细节,如在顶层,只考虑系统外部的输入
和输出, 其他各层反映系统内部情况。
第8章 结构化方法
X
顶层
2
1
0层
3
1. 2
1. 1
3. 2
3. 1
1. 3
2. 2
2. 1
3. 3
图 8.1 对一个问题的逐层分解
1层
第8章 结构化方法
8.2.2描述工具
SA方法利用图形等半形式化的描述方式表达需求,简明
易懂,用它们形成需求说明书中的主要部分。这些描述工具有
(1) 数据流图。数据流图描述系统的分解, 即描述系统
由哪几部分组成,各部分之间有什么联系等。
(2)数据字典。数据字典定义了数据流图中的数据和加工。
它是数据流条目、数据存储条目、数据项条目和基本加工条目
的汇集。
(3) 描述加工逻辑的结构化语言、判定表及判定树。结构
化语言、判定表或判定树则详细描述数据流图中不能被再分解
的每一个基本加工的处理逻辑。
第8章 结构化方法
8.2.3SA分析步骤
1.
当前系统(也称现行系统)指目前正在运行的系统, 可能
是需要改进的正在计算机上运行的软件系统,也可能是人工的
处理系统。通过对当前系统的详细调查,了解当前系统的工作
过程,同时收集资料、文件、数据及报表等,将看到的、听到
的、 收集到的信息和情况用图形描述出来。也就是用一个模型
来反映自己对当前系统的理解, 如画系统流程图(参见第2章
2.1.3)。这一模型包含了许多具体因素,反映现实世界的实际
情况。
2.
物理模型反映了系统“怎么做”的具体实现,去掉物理模
型中非本质的因素(如物理因素),抽取出本质的因素。
第8章 结构化方法
所谓本质的因素是指系统固有的、不依赖运行环境变化而
变化的因素,任何实现均这样做。非本质因素不是固有的, 随
环境不同而不同,随实现不同而不同。
对物理模型进行分析,区别本质因素和非本质因素,去掉
非本质因素,就形成当前系统的逻辑模型,反映了当前系统
“做什么”的功能。
3.
目标系统指待开发的新系统。分析、比较目标系统与当前
系统逻辑上的差别,即在当前系统的基础上决定变化的范围,
把那些要改变的部分找出来,将变化的部分抽象为一个加工,
这个加工的外部环境及输入输出就确定了。
第8章 结构化方法
然后对“变化的部分”重新分解,分析人员根据自己的
经验,采用自顶向下逐步求精的分析策略, 逐步确定变化部
分的内部结构,从而建立目标系统的逻辑模型。
4.
为了完整地描述目标系统,还要作一些补充:说明目标系
统的人机界面,它所处的应用环境及它与外界环境的相互联系,
决定人机界面; 说明至今尚未详细考虑的细节,如出错处理、
输入输出格式、存储容量和响应时间等性能要求与限制。
第8章 结构化方法
8.3
数据流图(Data Flow Diagram, 简称DFD), 是SA方法中用
于表示系统逻辑模型的一种工具,它以图形的方式描绘数据在
系统中流动和处理的过程。由于它只反映系统必须完成的逻辑
功能,所以它是一种功能模型。
图8.2是一个飞机机票预订系统的数据流图,其功能为旅行
社把预订机票的旅客信息(姓名、年龄、单位、身份证号码、
旅行时间及目的地等)输入机票预订系统。系统为旅客安排航
班,打印出取票通知单(付有应交的账款)。
旅客在飞机起飞的前一天凭取票通知等交款取票, 系统
检验无误,输出机票给旅客。
第8章 结构化方法
订 票单
有 效订 票 单
分 类并 检 查
订票
旅 行社
有 效取 票 单
记 帐文 件
机 票文 件
记帐
航 班目 录
帐单
机 票准 备
取 票通 知 单
取 票单
旅客
机票
旅 行社
机票
图 8.2 飞机机票预订系统
第8章 结构化方法
8.3.1基本图形符号
数据流图有以下 4 种基本图形符号:
→: 箭头, 表示数据流。
○: 圆或椭圆, 表示加工。
=: 双杠, 表示数据存储。
□: 方框, 表示数据的源点或终点。
1.
数据流是数据在系统内传播的路径,由一组成分固定的数
据项组成。如订票单由旅客姓名、年龄、单位、身份证号、 日
期及目的地等数据项组成。
第8章 结构化方法
由于数据流是流动中的数据,所以必须有流向,即在加
工之间、 加工与源点终点之间、加工与数据存储之间流动。
除了与数据存储之间的数据流不用命名外,数据流应该用名
词或名词短语命名。
2. 加工
加工也称为数据处理,它对数据流进行某些操作或变换。
每个加工也要有名字,通常是动词短语,简明地描述完成什
么加工。 在分层的数据流图中, 加工还应编号。
3.
数据存储指暂时保存的数据,它可以是数据库文件或任
何形式的数据组织。流向数据存储的数据流可理解为写入文
件,或查询文件,从数据存储流出的数据可理解为从文件读
数据或得到查询结果。
第8章 结构化方法
4.
数据源点和终点是软件系统外部环境中的实体(包括人员、
组织或其他软件系统),统称外部实体。它们是为了帮助理解
系统界面而引入的,一般只出现在数据流图的顶层图中,表示
了系统中数据的来源和去处。
有时为了增加数据流图的清晰性,防止数据流的箭头线太
长,在一张图上可重复画同名的源/终点(如某个外部实体既是
源点也是终点的情况),在方框的右下角加斜线则表示是一个
实体。有时数据存储也需重复标识。
第8章 结构化方法
8.3.2画数据流图
为了表达较为复杂问题的数据处理过程, 用一张数据流图
是不够的。 要按照问题的层次结构进行逐步分解, 并以一套
分层的数据流图反映这种结构关系。
1.
画系统的输入输出即先画顶层数据流图。顶层流图只包含
一个加工,用以标识被开发的系统,然后考虑该系统有哪些输
入数据,这些输入数据从哪里来;有哪些输出数据,输出到哪
里去。这样就定义了系统的输入、输出数据流。顶层图的作用
在于表明被开发系统的范围以及它和周围环境的数据交换关系,
顶层图只有一张。图8.3为飞机机票预订系统的顶层图。
第8章 结构化方法
订 票单
机票
旅 行社
飞 机机 票 预订 系 统
取 票通 知 单
旅客
取 票单
图 8.3 飞机机票预订系统顶层图
第8章 结构化方法
2.
画系统内部即画下层数据流图。一般将层号从0开始编号,
采用自顶向下,由外向内的原则。画0层数据流图时,一般根
据当前系统工作分组情况,并按新系统应有的外部功能,分解
顶层流图的系统为若干子系统,决定每个子系统间的数据接口
和活动关系。如机票预订系统按功能可分成两部分,一部分为
旅行社预订机票,另一部分为旅客取票,两部分通过机票文件
的数据存储联系起来,0层数据流图如图8.4。画更下层数据流
图时, 则分解上层图中的加工,一般沿着输入流的方向,凡数
据流的组成或值发生变化的地方则设置一个加工,这样一直进
行到输出数据流(也可从输出流到输入流方向画)。
第8章 结构化方法
订 票单
机票
旅 行社
飞 机机 票 预订 系 统
取 票通 知 单
旅客
取 票单
图 8.4 飞机机票预订系统0层图
第8章 结构化方法
如果加工的内部还有数据流,则对此加工在下层图中继续
分解,直到每一个加工足够简单,不能再分解为止。不再分解
的加工称为基本加工。
3.
(1) 命名:不论数据流、数据存储还是加工,合适的命名
使人们易于理解其含义。数据流的名字代表整个数据流的内容,
而不仅仅是它的某些成分,不使用缺乏具体含义的名字,如
“数据”、 “信息”等。加工名也应反映整个处理的功能,
不使用“处理”、 “操作”这些笼统的词。
第8章 结构化方法
(2) 画数据流而不是控制流: 数据流图反映系统“做什么”,
不反映“如何做”,因此箭头上的数据流名称只能是名词或名
词短语, 整个图中不反映加工的执行顺序。
(3) 一般不画物质流: 数据流反映能用计算机处理的数据,
并不是实物,因此对目标系统的数据流图上一般不要画物流,
如机票预订系统中,人民币也在流动, 但并未画出,因为交款
是“人工”行为。
(4) 每个加工至少有一个输入数据流和一个输出数据流,
反映出此加工数据的来源与加工的结果。
(5) 编号: 如果一张数据流图中的某个加工分解成另一张数
据流图时, 则上层图为父图,直接下层图为子图。子图应编号,
子图上的所有加工也应编号,子图的编号就是父图中相应加工
的编号,加工的编号由子图号、小数点及局部号组成, 如图8.5
所示。
第8章 结构化方法
图2
图 2.1
b
a
2. 2
e
2. 1
d
c
2. 3
图 8.5 父图与子图(1)
a
a1
2. 1.2
a2
2. 1.3
b
2. 1.1
c
第8章 结构化方法
(6)
父图与子图的平衡:子图的输入、输出数据流同父图
相应加工的输入、输出数据流必须一致,此即父图与子图的平
衡。 图8.5中子图2.1与父图2相应加工2.1的输入、输出数据流
的数目、名称完全相同, 即一个输入流a,两个输出流b和c。
再看图8.6,好像父图与子图不平衡,因为父图加工4与子图输
入输出数据流数目不相等,但是借助于数据字典(见8.4)中
数据流的描述可知, 父图的数据流“订货单”由“客户”、
“账号”及“数量”三部分数据组成,即子图是父图中加工、
数据流同时分解而来, 因此这两张图也是平衡的。
第8章 结构化方法
父图
子 图4
4. 1
4. 2
帐号
4
订 货单
客户
4. 3
提 货单
数量
图8.6 父图与子图的平衡
提 货单
第8章 结构化方法
有时考虑平衡可忽略一些枝节性的数据流(如出错处理)。
父图与子图的平衡, 是分层数据流图中的重要性质,保证了数
据流图的一致性, 便于分析人员的阅读与理解。
(7)
局部数据存储:当某层数据流图中的数据存储不是父
图中相应加工的外部接口,而只是本图中某些加工之间的数据
接口, 则称这些数据存储为局部数据存储,一个局部数据存储
只有当它作为某些加工的数据接口或某个加工特定的输入或输
出时,就把它画出来,这样有助于实现信息隐蔽。
(8)
提高数据流图的易理解性:注意合理分解,要把一个
加工分解成几个功能相对独立的子加工, 这样可以减少加工之
间输入、输出数据流的数目,增加数据流图的可理解性。
第8章 结构化方法
分解时要注意子加工的独立性、均匀性,特别是画上层数
据流时,要注意将一个问题划分成几个大小接近的组成部分,
这样做便于理解。 不要在一张数据流图中出现某些加工已是
基本加工,某些加工还要分解好几层。
为了使数据流图便于在计算机上输入与输出, 以下给出了
描述数据流图的另一套基本符号:
———→: 表示数据流, 只能水平或垂直画。
编号
编
号
: 表示加工。
: 表示数据存储。
第8章 结构化方法
图8.7给出了采用这套符号画出的等价于图8.2的DFD。
1
旅 行社
订 票单 分 类并 检 验
取 票单
有 订
效 票
单
2
有 效订 票 单
D2
记 帐文 件
3
旅客
记帐
订票
D1
航 班目 录
机 票文 件
D3
4
帐单
机 票准 备
机票
图 8.7 与图8.2等价的DFD
取 票通 知 单
旅 行社
第8章 结构化方法
8.3.3 SA
现以第2.4.2节中的销售管理系统为例, 采用SA方法来进
行需求分析,建立功能模型。
图8.8为采用SA方法画出的销售管理系统的分层DFD。首
先分析功能说明,先找出哪些是属于系统之外的外部实体, 然
后画出顶层数据流图,顶层图如图8.8(a)所示。
随后分解系统,每个子系统有哪些流动着的数据, 哪些需
要暂时保存的数据,通过什么加工使数据发生变换。根据系统
功能,在0层图上分解系统为5个加工,加工的名称及加工之间
的数据流在功能说明中有动词和名词与之对应。
第8章 结构化方法
图8.8(b)为0层图, 它说明系统分为5个子系统。在下层图
(1 层, 2 层 ……)的分解过程中,应仔细考虑每个加工内部
还应该进行哪些处理,还有什么数据流产生,这些可能在功能
说明中没有, 需要分析人员和用户参考现行系统的工作流程,
进行“创造”, 精细数据流图。 图8.8(c)为 1 层图,其中图C1、
图C2、 ……图C5分别是0层图5个加工分解的结果。
第8章 结构化方法
订 单
顾 客
仓 库
备 货单
销 售管 理 系统
进 货通 知 单
统 计表
采 购部 门
经 理
缺 货通 知 单
( a)
订 单
可 供货 订 单
处 理订 单
1
备 货单
处 理供 货
2
缺 货订 单
缺 货记 录
订 单记 录
库 存记 录
原 缺货 现 可供 货 订单
处 理缺 货
4
处 理进 货
3
缺 货通 知 单
销 售统 计
5
统 计表
进 货通 知 单
(b)
图 c1
订 单
合 格订 单
检 验订 单
1. 1
确 定能 否 供货
1. 2
库 存记 录
可 供货 订 单
缺 货记 录
图 c2
可 供货 订 单
根 据供 货 单修 改 库存
2. 1
库 存记 录
登 记过 的 订单
开 备货 单
2. 2
备 货单
订 单记 录
图 c3
进 货通 知 单
根 据进 货 单
修 改库 存
3. 1
核 对后 进 货单
库 存记 录
处 理缺 货 订单
3. 2
订 单变 更 信息
缺 货记 录
可 供货 订 单
图 c4
汇 总
各 项缺 货 量
4. 1
缺 货量
打 印
缺 货通 知 单
4. 2
缺 货通 知 单
缺 货记 录
图 c5
顾 客区 域
日 期
统 计选 择
5. 1
图 8.8
订 单记 录
按 顾客
所 在地 区 统计
5. 2
按 销售 日 期统 计
5. 3
统 计表
货 物
按 销售
货 物名 统 计
5. 4
顾 客名
按 顾客 名 统计
5. 5
( c)
(a) 顶层图; (b) 0层图; (c) 1层图
修 改缺 货 记录
3. 3
第8章 结构化方法
8.4 数 据 字
8.4.1
数据字典是为分析人员查找数据流图中有关名字的详细定
义而服务的,因此也像普通字典一样, 要把所有条目按一定
的次序排列起来,以便查阅。数据字典有以下 4 类条目:数
据流、 数据项、 数据存储及基本加工。 数据项是组成数据流
和数据存储的最小元素。源点、终点不在系统之内,故一般
不在字典中说明。
1.
数据流条目给出了DFD中数据流的定义,通常列出该数
据流的各组成数据项。在定义数据流或数据存储组成时,使
用表8 - 1给出的符号。
第8章 结构化方法
下面给出了几个使用表8 -1中符号,定义数据流组成及数
据项的例子。
例: 机票=姓名+日期+航班号+起点+终点+
姓名= {字母}
18
2
航班号=“Y7100”·[KG-*3]·“Y8100”
终点=[上海|北京|西安]
数据流条目主要内容及举例如下:
数据流名称:
第8章 结构化方法
第8章 结构化方法
别名:
简述:
来源:
去向: 加工1“检验订单”
数据流量: 1000份/
组成: 编号+订货日期+顾客编号+地址+电话+银行账号+
货物名称+规格+
其中数据流量指单位时间内(每小时或每天或每周或每月)
的传输次数。
第8章 结构化方法
2.
数据存储条目是对数据存储的定义, 主要内容及举例如下:
数据存储名称:
别名:
简述:
组成: 货物名称+编号+生产厂家+单价+
组织方式: 索引文件,
查询要求:
第8章 结构化方法
3. 数据项条目
数据项条目是不可再分解的数据单位, 其定义格式及
举例如下:
数据项名称:
别名: G-No, G-num, Goods-No
简述:
类型:
长度: 10
取值范围及含义: 第1位: 进口/
第2~4位:
第5~7位:
第8~10位:
第8章 结构化方法
4. 加工条目
加工条目是用来说明DFD中基本加工的处理逻辑的, 由于
上层的加工是由下层的基本加工分解而来,只要有了基本加工
的说明,就可理解其他加工。加工条目的主要内容及举例如下:
加工名:
编号: 1.2
激发条件:
优先级:
输入:
输出: 可供货订单、
加工逻辑:
第8章 结构化方法
IF 订单项目的数量 <
THEN
ELSE 此订单缺货, 登录,
ENDIF
数据字典中的加工逻辑主要描述该加工“做什么”, 即实
现加工的策略, 而不是实现加工的细节,它描述如何把输入数
据流变换为输出数据流的加工规则。为了使加工逻辑直观易读,
易被用户理解,有几种常用的描述方法, 它们是结构化语言、
判定表及判定树(
8.5节)。
第8章 结构化方法
8.4.2
1. 手工建立
手工建立数据字典的内容用卡片形式存放, 其步骤如下:
(1) 按 4 类条目规范的格式印制卡片。
(2) 在卡片上分别填写各类条目的内容。
(3) 先按图号顺序排列,同一图号的所有条目按数据流、
数据项、数据存储和加工的顺序排列。
(4) 同一图号中的同一类条目(如数据流卡片)可按名字
的字典顺序存放,加工一般按编号顺序存放。
(5) 同一成分在父图和子图都出现时, 则只在父图上定义。
(6) 建立索引目录。
第8章 结构化方法
2. 利用计算机辅助建立并维护
(1)
编制一个“字典生成与管理程序”,可以按规定的格
式输入各类条目,能对字典条目增、删、改,能打印出各类查
询报告和清单, 能进行完整性、一致性检查等。美国密执安大
学研究的PSL/PSA就是这样一个系统。
(2) 利用已有的数据库开发工具,针对数据字典建立一个数
据库文件,可将数据流、数据项、数据存储和加工分别以矩阵
表的形式来描述各个表项的内容,如数据流的矩阵表为:
第8章 结构化方法
流量
组成
…
去向
…
…
…
来源
…
名称
…
编号
然后使用开发工具建成数据库文件,便于修改、查询,
并可随时打印出来。另外, 有的DBMS本身包含一个数据字
典子系统, 建库时能自动生成数据字典。
计算机辅助开发数据字典比手工建立数据字典有更多的
优点,能保证数据的一致性和完整性,使用也方便,但增加
了技术难度与机器开销。
第8章 结构化方法
8.5 加工逻辑的描述
8.5.1结构化语言
结构化语言是介于自然语言(英语或汉语)和形式语言之
间的一种半形式语言。 形式语言精确,但不易被理解,自然语
言易理解,但它不精确,可能产生二义性。结构化语言取“长”
补“短”,它是在自然语言基础上加了一些限定,使用有限的
词汇和有限的语句来描述加工逻辑, 它的结构可分成外层和内
层两层。
1.
外层用来描述控制结构, 采用如下顺序、 选择及重复三
第8章 结构化方法
(1) 顺序结构:是一组祈使语句、选择语句及重复语句的
顺序排列。祈使语句指至少包含一个动词及一个名词, 指出要
执行的动作及接受动作的对象。
(2) 选择结构: 一般用IF THEN ELSE ENDIF, CASE
OF ENDCASE等关键词。
(3) 重复结构:一般用DO
UNTIL等关键词。
WHILE ENDDO, REPEAT
2.
内层一般是采用祈使语句的自然语言短语, 使用数据字典
中的名词和有限的自定义词,其动词含义要具体,尽量不用形
容词和副词来修饰。还可使用一些简单的算术运算和逻辑运算
符号。
第8章 结构化方法
8.5.2判定表
例如, 某数据流图中有一个“确定保险类别”的加工, 指
的是申请汽车驾驶保险时,要根据申请者的情况确定不同的保
险类别。加工逻辑为: 如果申请者的年龄在21岁以下,要额外
收费;如果申请者是21岁以上并是26岁以下的女性,适用于A
类保险;如果申请者是26岁以下的已婚男性,或者是26岁以上
的男性, 适用于B类保险; 如果申请者是21岁以下的女性或是
26岁以下的单身男性, 适用于C类保险。除此之外的其他申请
者都适用于A类保险。
这段叙述使人不能较快地看懂该加工的动作, 而用判定表
表示出来就清楚了。
判定表由 4 部分组成, 用双线分割开 4 个区域, 如图8.9
所示。
第8章 结构化方法
第8章 结构化方法
各部分的含义在图上标出。 现就上例构造一张判定表, 可
采取以下步骤:
(1) 提取问题中的条件: 条件是年龄、 性别及婚姻。
(2) 标出条件的取值: 为绘制判定表方便, 用符号代替条
件的取值, 见表8 - 2。
(3) 计算所有条件的组合数N: N=mi=3×2×2=12。
(4) 提取可能采取的动作或措施: 适用于A类保险、 B类保
险、C类保险和额外收费。
(5) 制作判定表: 如表8 - 3所示。
第8章 结构化方法
第8章 结构化方法
第8章 结构化方法
(6) 完善判定表: 初始的判定表可能不完善, 表现在两个方
面。 第一, 缺少判定列中应采取的动作。例如“确定保险类
别”的说明中若没有最后一句“除此之外……”, 那么第9、 10两
列就无选取的动作,这时就应与用户说明并将其补充完整第二,
有冗余的判定列。两个或多个规则中,具有相同的动作,而与
它所对应的各个条件组合中有取值无关的条件。如第1和第2、
第5和第6、第9和第10、第11和第12都与第三个条件“婚姻”
取值无关,因此可将它们分别合并。 合并后的规则还可进一步
合并,如图8.10所示,图中“Y”表示逻辑条件取值为“真”,
“N”表示逻辑条件取值为“假”,“—”表示与取值无关。
第8章 结构化方法
Y
Y
Y
Y
Y
N
N
N
N
N
Y
N
—
—
N
N
√
√
√
√
√
√
两 条规 则 合并
图 8.10 动作相同的规则合并
Y
进 一步 合 并
N
第8章 结构化方法
8.5.3
判定树是判定表的变形,一般情况下它比判定表更直观,
且易于理解和使用。图8.11是与表8 - 3功能等价的判定树。
上述三种描述加工逻辑的工具各有优缺点,对于顺序执行
和循环执行的动作,用结构化语言描述;对于存在多个条件复
杂组合的判断问题, 用判定表和判定树。判定树较判定表直
观易读,判定表进行逻辑验证较严格,能把所有的可能性全部
都考虑到。可将两种工具结合起来,先用判定表作底稿,在此
基础上产生判定树。
经过需求分析,开发人员已经基本上理解了用户的要求,
确定了目标系统的功能,定义了系统的数据,描述了处理这些
数据的基本策略。将这些共同的理解进行整理,最后形成文
档——需求说明书。
第8章 结构化方法
年 龄 ≤ 21岁
未婚
C类 保 险 且 额 外 收 费
已婚
B类 保 险 且 额 外 收 费
已婚
B类 保 险
未婚
C类 保 险
男性
21 岁 < 年 龄 ≤ 26
确 定保 险 类别
年 龄 > 26岁
B类 保 险
年 龄 ≤ 21岁
C类 保 险 且 额 外 收 费
年 龄 > 21岁
A类 保险
女性
图 8.11 判定树
第8章 结构化方法
上述三种描述加工逻辑的工具各有优缺点,对于顺序执行
和循环执行的动作,用结构化语言描述;对于存在多个条件复
杂组合的判断问题,用判定表和判定树。判定树较判定表直观
易读,判定表进行逻辑验证较严格,能把所有的可能性全部都
考虑到。可将两种工具结合起来,先用判定表作底稿,在此基
础上产生判定树。
经过需求分析,开发人员已经基本上理解了用户的要求,
确定了目标系统的功能, 定义了系统的数据,描述了处理这些
数据的基本策略。将这些共同的理解进行整理,最后形成文
档——需求说明书。
第8章 结构化方法
8.6 结 构 化 设 计
8.6.1数据流的类型
要把数据流图(DFD)转换成软件结构,必须研究DFD
的类型。各种软件系统,不论DFD如何庞大与复杂,一般可
分为变换型数据流图和事务型数据流图两类。
1.
变换型的DFD是由输入、变换(或称处理)和输出三部
分组成,如图8.12所示,虚线为标出的流界。
变换型数据处理的工作过程一般分为取得数据、变换数
据和给出数据。这三步体现了变换型DFD的基本思想。
第8章 结构化方法
逻 辑输 入
逻 辑输 出
物 理输 出
物 理输 入
输 入流
变 换中 心
图 8.12 变换型DFD
输 出流
第8章 结构化方法
变换是系统的主加工,变换输入端的数据流为系统的逻辑
输入,输出端为逻辑输出。而直接从外部设备输入的数据称为
物理输入,反之称为物理输出。外部的输入数据一般要经过输
入正确性和合理性检查、编辑及格式转换等预处理,这部分工
作都由逻辑输入部分完成,它将外部形式的数据变成内部形式,
送给主加工。同理,逻辑输出部分把主加工产生的数据的内部
形式转换成外部形式然后物理输出。因此变换型的DFD是一个
顺序结构。
2.
若某个加工将它的输入流分离成许多发散的数据流, 形成
许多平行的加工路径,并根据输入的值选择其中一个路径来执
行,这种特征的DFD称为事务型的数据流图,这个加工称为事
务处理中心,如图8.13所示。
第8章 结构化方法
加 工路 径
事 务处 理 中心
T
输 入流
…
图 8.13 事务型DFD
第8章 结构化方法
8.6.2设计过程
结构化设计方法的过程如下:
(1) 精化DFD: 把DFD转换成软件结构图前,设计人员要仔
细地研究分析DFD并参照数据字典,认真理解其中的有关元素,
检查有无遗漏或不合理之处,进行必要的修改。
(2) 确定DFD类型: 如果是变换型,确定变换中心和逻辑
输入、逻辑输出的界线,映射为变换结构的顶层和第一层; 如
果是事务型,确定事务中心和加工路径,映射为事务结构的顶
层和第一层。
(3) 分解上层模块, 设计中下层模块结构。
第8章 结构化方法
(3) 分解上层模块, 设计中下层模块结构。
(4) 根据优化准则对软件结构求精。
(5) 描述模块功能、 接口及全局数据结构。
(6) 复查, 如果有错, 转(2)修改完善, 否则进入详细
设计。
第8章 结构化方法
8.6.3
当DFD具有较明显的变换特征时, 则按照下列步骤设计。
1. 确定DFD中的变换中心、
如果设计人员经验丰富,则容易确定系统的变换中心, 即
主加工。如几股数据流的汇合处往往是系统的主加工。若一下
不能确定,则要从物理输入端开始,沿着数据流方向向系统中
心寻找,直到有这样的数据流,它不能再被看作是系统的输入
则它的前一个数据流就是系统的逻辑输入。同理,从物理输出
端开始,逆数据流方向向中间移动,可以确定系统的逻辑输出。
介于逻辑输入和逻辑输出之间的加工就是变换中心,用虚线划
分出流界,DFD的三部分就确定了。
第8章 结构化方法
2. 设计软件结构的顶层和第一层——变换结构
变换中心确定以后,就相当于决定了主模块的位置, 这就
是软件结构的顶层, 如图8.14 所示。其功能是主要完成所有模
块的控制,它的名称是系统名称,以体现完成整个系统的功能。
主模块确定之后,设计软件结构的第一层。 第一层至少要有输
入、输出和变换三种功能的模块,即为每个逻辑输入设计一个
输入模块,其功能为向顶层模块提供相应的数据,如图8.14中
的f3;为每个逻辑输出设计一个输出模块,其功能为输出顶层
模块的信息,如图8.14中的f7,f8。同时,为变换中心设计一
个变换模块,它的功能是将逻辑输入进行变换加工,然后逻辑
输出, 如图8.14中, 将f3变换成f7和f8。这些模块之间的数据传
送应该与DFD相对应。
第8章 结构化方法
输入
变 换中 心
输出
f7
f9
F
f4
f3
f2
C
D
B
f6
f5
A
G
f8
E
H
f1 0
f1 1
f1
主 模块
f3
f8
f7
f3
f7
f8
ge t
f3
f2
f2
ge t
将 f3变 换 成
f7和 f8
f3
f2
f3
B
f4 f4
f5
C
pu t
f7
f6
f6 f7
pu t
f1 0
f9
E
F
f8
f8
f9
f8 f5
D
f7
f1 0
pu t
f9
G
pu t
f2
f1
ge t
f1
f1 1
f1 0
f1
A
f 10
H
f1 1
pu t
f 11
图 8.14 变换分析设计举例
第8章 结构化方法
3. 设计中、
对第一层的输入、 变换及输出模块自顶向下、 逐层分解。
1)
输入模块的功能是向它的调用模块提供数据, 所以必须要
有数据来源。这样输入模块应由接收数据和转换成调用模块所
需的信息两部分组成。
因此,每个输入模块可以设计成两个下属模块:一个接收,
一个转换。用类似的方法一直分解下去,直到物理输入端。 如
图8.14中模块“get f3”和“get f2”的分解。模块“get f1”为物
理输入模块。
第8章 结构化方法
2)
输出模块的功能是将它的调用模块产生的结果送出,它由
将数据转换成下属模块所需的形式和发送数据两部分组成。
这样每个输出模块可以设计成两个下属模块:一个转换,
一个发送, 一直到物理输出端。如图8.14中, 模块“put f7”,
“put f8”和“put f10”的分解。模块“put f9”和“put f11”为物
理输出模块。
3)
根据DFD中变换中心的组成情况,按照模块独立性的原则
来组织其结构,一般对DFD中每个基本加工建立一个功能模块,
如图8.14中模块“C”, “D”和“E”。
第8章 结构化方法
4.
以上步骤设计出的软件结构仅仅是初始结构, 还必须根据
设计准则对初始结构精细和改进,以下为提供的求精办法。
(1) 输入部分的求精:对每个物理输入设置专门模块, 以
体现系统的外部接口;其他输入模块并非真正输入,当它与转
换数据的模块都很简单时,可将它们合并成一个模块。
(2) 输出部分的求精:为每个物理输出设置专门模块, 同时
注意把相同或类似的物理输出模块合并在一起, 以减低耦合度。
(3) 变换部分的求精: 根据设计准则, 对模块进行合并或
调整。
第8章 结构化方法
总之, 软件结构的求精,带有很大的经验性。 往往形成
DFD中的加工与SC中的模块之间是一对一的映射关系, 然后
再修改。但对于一个实际问题,可能把DFD中的两个甚至多
个加工组成一个模块,也可能把DFD中的一个加工扩展为两
个或更多个模块,根据具体情况要灵活掌握设计方法, 以求
设计出由高内聚和低耦合的模块所组成的、具有良好特性的
软件结构。
第8章 结构化方法
8.6.4
对于具有事务型特征的DFD,则采用事务分析的设计方法。
结合图8.15,说明该方法的设计过程。
1) 确定DFD
当DFD中的某个加工具有明显地将一个输入数据流分解成
多个发散的输出数据流时, 该加工就是事务中心。从事务中
心辐射出去的数据流为各个加工路径。
2) 设计软件结构的顶层和第一层——
设计一个顶层模块,它是一个主模块,有两个功能, 一
是接收数据,二是根据事务类型调度相应的处理模块。事务型
软件结构应包括接收分支和发送分支两个部分。
第8章 结构化方法
B
F1
C
A
D
输 入流
事 务中 心
加 工路 径
主 模块
f1
f1
接 收分 支
发 送分 支
ge t
调度
f1
B
C
D
事 务层
动 作层
…
…
细 节层
图 8.15 事务分析设计举例
第8章 结构化方法
(1) 接收分支: 负责接收数据, 它的设计与变换型DFD的
输入部分设计方法相同。
(2) 发送分支: 通常包含一个调度模块,它控制管理所有
的下层的事务处理模块。当事务类型不多时,调度模块可与主
模块合并。
3) 事务结构中、 下层模块的设计、 优化等工作同变换
结构。
第8章 结构化方法
8.6.5
综合型数据流图与分层数据流图映射成软
1. 综合DFD的映射
一个大型系统的DFD中,既有变换流,又有事务流,属
于综合的数据流图,其软件结构设计方法如下:
(1) 确定DFD整体上的类型。事务型通常用于对高层数据
流图的变换,其优点是把一个大而复杂的系统分解成若干较小
的简单的子系统。变换型通常用于对较低层数据流图的转换。
变换型具有顺序处理的特点,而事务型具有平行分别处理的特
点,所以两种类型的DFD导出的软件结构有所不同。只要从
DFD整体的、主要功能处理分析其特点,就可区分出该DFD整
体类型。
第8章 结构化方法
(2) 标出局部的DFD范围, 确定其类型。
(3) 按整体和局部的DFD特征, 设计出软件结构。
2. 分层DFD的映射
对于一个复杂问题的数据流图,往往是分层的。分层的数
据流图映射成软件结构图也应该是分层的,这样便于设计,也
便于修改。 由于数据流图的顶层图反映的是系统与外部环境的
界面,所以系统的物理输入与物理输出都在SC的顶层或0层图,
相应的软件结构图的物理输入与输出部分应放在主图中,便于
同DFD的顶层图对照检查。 分层DFD的映射方法是:
(1) 主图是变换型, 子图是事务型, 见图8.16,
表示“或者”。
(2) 主图是事务型, 子图是变换型, 见图8.17。
第8章 结构化方法
主 图:
子 图A :
A2
g1
DFD:
f1
f2
A
f3
B
f4
C
f1
g3
A1
A4
g4
A3
g2
主 模块
A
SC :
f2
f1
f3
g3
ge t
f2
B
pu t
f1
f3
f1
ge t
f3
f1
f2
A
f4
f4
A4
g4
g3
pu t
g4
A1
g1
f4
C
f2
g4 g3
A2
g2
A3
图 8.16 主图变换型, 子图事务型
f2
第8章 结构化方法
主 图:
DFD:
f1
子 图 B:
f2
B
f4
A
f3
C
f2
g1
B1
ge t
f2
g1
f4
g1
f1
ge t
A
g1
g2
B2
f2
f2
B
pu t
g1
C
f4
g2
f4
B1
B3
( f2变 换 g1 )
( g2 变 换 f4)
f5
pu t
g2
g2
f3
f4
pu t
f4
B
f1
f1
B3
f5
主 模块
SC :
g2
B2
f5
图 8.17 主图事务型, 子图变换型
第8章 结构化方法
8.6.6 SD
将8.3.3中的销售管理系统的DFD转换为软件结构图。
分析该系统的0层图, 它有 4 个主要功能, 即订货处理、
进货处理、缺货处理和销售统计。其中,订货处理包括订单
处理和供货处理两部分。 这 4 个处理可平行工作,因此从整
体上分析可按事务型数据流图来设计,根据功能键来选择 4
个处理中的一个。设计出的软件结构如图8.18所示。
第8章 结构化方法
销 售管 理 系统
读 键盘
类别
1 订货 处 理
输 入订 单
输 出备 货 单
子 图1:
2 进货 处 理
3 缺货 处 理
4 销售 统 计
输 入进 货 通知 单
输 出缺 货 通知 单
输 出统 计 表
订 货处 理
读 库存 记 录
根 据订 单 及库 存 确定 能否 供 货
可 供货 处 理
根 据可 供 货订 单 修改 库存
子 图2:
缺 货订 单 留底
订 单留 底
进 货处 理
根 据进 货 通知 单 修改 库存
处 理缺 货 订单
可 供货 处 理
子 图3:
修 改缺 货 记录
缺 货处 理
读 缺货 记 录
子 图4:
缺 货统 计
销 售处 理
读 订单 记 录
按 地区 统 计
分 类统 计
按 日期 统 计
按 货物 名 统计
按 顾客 名 统计
图 8.18 销售管理系统软件结构图
第8章 结构化方法
8.6.7设计的后处理
由设计的工作流程可知,经过变换分析或事务分析设计,
形成软件结构并经过优化和改进后,还要做以下工作:
(1)为每个模块写一份处理说明: 从设计的角度描述模块的
主要处理任务、条件抉择等,以需求分析阶段产生的加工逻辑
的描述为参考。 这里的说明应该是清晰、无二义性的。
(2) 为每个模块提供一份接口说明: 包括通过参数表传递
的数据、外部的输入/输出和访问全局数据区的信息等, 并指
出它的下属模块与上属模块。
为清晰易读, 对以上两个说明可用设计阶段常采用的图形
工具——IPO图(见3.3.3节)来表示。
第8章 结构化方法
(3) 数据结构说明: 软件结构确定之后, 必须定义全局的
和局部的数据结构,因为它对每个模块的过程细节有着深远的
影响。 数据结构的描述可用伪码(如PDL语言、类Pascal 语言)
或Warnier图、 Jackson图等形式表达。
(4) 给出设计约束或限制: 如数据类型和格式的限制, 内
存容量的限制,时间的限制,数据的边界值,个别模块的特殊
要求等。
(5) 进行设计评审:软件设计阶段, 不可避免地会引入
人为的错误,如果不及时纠正,就会传播到开发的后续阶段中
去,并在后续阶段引入更多的错误。
第8章 结构化方法
因此一旦设计文档完成以后,就可进行评审,有效的评
审可以显著地降低后续开发阶段和维护阶段的费用。在评审
中应着重评审软件需求是否得到满足,即软件结构的质量、
接口说明、数据结构说明、实现和测试的可行性以及可维护
性等。
(6) 设计优化:应贯穿整个设计的过程。 设计的开始就
可以给出几种可选方案,进行比较与修改,找出最好的。设
计中途的每一步处处考虑软件结构的简明、合理及高效等性
能, 以及尽量简单的数据结构。