第6章结构化分析与结构化设计•教学目的:–掌握结构化的系统分析与设计方法、模块的基本概念。•主要内容:–结构化系统分析方法–模块与软件结构–结构化系统设计方法School of Management腃HUST1
结构化系统分析方法•数据流程图–作用:以即数据变换为中心来展开的,它也是系统信息模型的一种表示方法。–要素:•处理逻辑–在数据流程图中,处理逻辑表示对数据的变换,从用户的角度来看就是表示系统能“做什么”。–数据变换有三种:»数据格式的转换:将一种格式的数据转换成另一种新格式的数据。»数据内容的转换:按生产经营和管理的需要,从给定的数据中生成新的数据。»数据的传递:数据的传递是将某信息按用户的要求,将信息从一个地方传输到另一地,或者将信息输出。–处理逻辑的命名:表示变换以及被变换的数据,即动词和宾语,一般不采用纯技术性的术语来命名。School of Management腃HUST2
•外部项(外部实体):表示与某处理逻辑有信息关联的、且为系统之外的人、部门、单位或者管理信息系统等。–在DFD中,不需要标识系统内部实体。•数据流:标明数据在DFD中的流向,它可以由外部项、处理逻辑产生,也可来自数据存储。数据流名应该清楚地表示流动的数据。•数据存储:标识需暂时或永久保存的数据类。•School of Management腃HUST3
•约定的符号<编号> <编号> <外部实体<外部实体 名称> 名称> <处理逻辑 <处理逻辑 名称> 名称> (a) <相关人员> (b) (a) (b) 表示“外部实体”的符号 表示“处理逻辑”的符号 <数据流名> (a) <编号> <数据存储名称> (a) <数据流名> (b) <编号> <数据存储名称> (b) <数据流名> (c) 表示“数据存储”的符号 表示“数据流”的符号 图 DFD中使用的几何符号 School of Management腃HUST4
产品进、出、库存 客户 财务 部门 产品 合同 销售 发票 产品出产单 生产 部门 产品出库销售合同 产品入库 产品采购单 管管 理 理 管 理 采购 员 产品库存 D1 产品入库 D2 产品出库 D3 D4 销售合同 产品修改信息 产品 售后服务信息 D5 开发 产品进、出、库存、合同、售后服务 服务要求 客户 售后服 销 售 销 售 务管理 统 计 查 询 销售 统计查询 查询 报表 结果 要求 上级企业相关 主管领导人员 图 某公司销售管理信息子系统数据流程图 School of Management腃HUST5
•绘制数据流程图的基本步骤–步骤1.确定系统的处理逻辑。–步骤2.对于某处理逻辑,确定与其相关的全部数据流。–步骤3.对于某处理逻辑,确定与其数据流相关的全部外部项。–步骤4.对于某处理逻辑,确定与其相关的全部数据存储。–步骤5.重复步骤2至步骤4。School of Management腃HUST6
•实例:根据给出背景以及业务的要求,画出销售部分的分层DFD(至少两层),并将底层DFD中的某一处理逻辑采用SD或HIPO方法进行设计。–背景:某商店专营多种电视机的销售。由于电视机竞争激烈,该商店经过对现行系统进行分析后,现分为采购组、销售组、库存组、售后服务组以及综合管理组。经调整后,各自业务范围如下:采购组根据销售组的商品需求预测以及库仓组提供的商品和备件库存信息,及时订货、提货,并填写收货单;销售组根据用户的需求,填写销售发票,当用户向综合管理组的会计交款后,到仓库提货,并将客户填写的保修单登记入帐,便于日后的售后服务,除此之外还根据收集的各种信息,作出商品的需求预测;库存组完成商品和备件的收发存管理,根据采购组的收货单完成商品和备件的入库,根据销售组的销售发票完成商品的出库,根据售后服务组的备件领料单发料,每天下班之前,统计当天商品和备件的收发存,在第二天上班时将统计报表交给综合管理组,每月完成商品和备件的进销存统计,并上报综合管理组;售后服务组当收到客户的维修消息后,填写备件领料单并领取相应备件,并记录维修服务情况,并在每月底将维修情况按品牌对备件进行统计,并报采购组和综合管理组;综合管理组由秘书、会计和出纳组成,秘书除完成文件的收发、打印外,还负责接待客户,记录电话预约上门维修,将该信息转发给售后服务组,并检查售后服务的完成情况,月末完成销售部门的各种统计。School of Management腃HUST7
–分析•从企业的角度来说–内部实体:»综合管理组:接待客户、预约维修、检查售后服务、销售统计»采购组:订货、提货、填写收货单»销售组:销售发票、商品需求预测»售后服务组:售后服务、备件领料、记录维修服务情况、月维修备件使用统计»库存组:商品和备件库存管理、商品和备件的收发存管理、日/月收发存统计–外部实体:»客户School of Management腃HUST8
•从销售部分来说–内部实体:»综合管理组:接待客户、预约维修、检查售后服务、销售统计»销售组:商品销售、商品需求预测»售后服务组:售后服务、备件领料、记录维修服务情况、月维修备件使用统计–外部实体:»客户»采购组»库存组School of Management腃HUST9
–继续完善客仓库管 采购管户理系统 理系统 备件出库 D4 商品出库 D4 商品库存 D4 销售综合统计商品销售售后服务 相关销售综合 报表 管管 理 理 人员管 理 商品销售 客户反馈与处理 D1 售后服务 D5 D3 商品需求预测 D2 某公司销售管理信息子系统数据流程图 School of Management腃HUST10
•绘制数据流程图的注意事项–与企业流程图的区别 入库单 采购采购发票 会 –常见的错误产品入库销 售 员 计 管统 计 理 (a) (b) 入库 产品入库 产品库存 D1 D3 (c) 产品入库 产品入库 D1 管 理 (d) 图 DFD中不正确的画法 产品入库产品入库 D1 管 理 (e) School of Management腃HUST11
–命名问题–布局问题–DFD的标题栏•数据字典–作用:对数据流程图的补充说明,给出新系统中相关要素的统一定义和描述。–组成要素:•数据元素•数据结构•数据流•数据存储•处理逻辑School of Management腃HUST12
•分层数据流程图–组成与作用:•顶层(一张):反映系统的主要功能、相关的数据存储以及之间的数据流,还反映系统与其他系统的之间的数据流,它概括地描述了系统地边界和功能。•底层(若干):•中间层的数据流程图(若干):上一层中某处理逻辑的进一步详细的描述。School of Management腃HUST13
–分层数据流程图绘制的方法•按照单张数据流程图的绘制方法,根据零层数据流程图的作用,首先画出零层DFD;•然后将零层DFD中的每一个处理逻辑绘制一张下一层的DFD ,即构成一层DFD,若零层中有n个处理逻辑,则一层就有n张DFD;•对一层中的凡是没有清晰地表现出来的处理逻辑,再画出相应处理逻辑的二层DFD ,对一层中的清晰表示了的处理逻辑则不继续绘制相应的二层DFD;•若二层中还有没有清晰地表现出来的处理逻辑,则画出相应处理逻辑的三层DFD ,对二层中的清晰表示了的处理逻辑则不继续绘制相应的三层DFD;•照此下去,直到第m层中的全部处理逻辑都被清晰的表示为止,这时该系统就有m层的DFD 。School of Management腃HUST14
–分层DFD绘制的原则•黑箱原则/“信息隐蔽”原则•继承性•分解的层数School of Management腃HUST15
产品出产单 生产 部门 产品入库 产品入库 产品采购单 登 录 修 改 采购 员 产品库存 D1 产品入库 D2 查询要求 产品入库 产品入库相关 删 除 查人员 询 查询结果 图“产品入库管理”处理逻辑的一层DFD School of Management腃HUST16
指定合同合同基本信息 的原信息 合同基本信息 客合 同 合 同 户登 录 修 改 合同修改信息销售合同 D4 查询要求 合 同 合相关 同 指定合同删 除 指定合同查人员 询 的信息 查询结果 的信息 图 “销售合同管理”处理逻辑的一层DFD School of Management腃HUST17
模块与软件结构•模块的定义与属性–定义:可以组合、更换和分解的单元,是组成系统、便于处理的基本单位。–属性:•外部属性:功能和输入输出数据•内部属性:算法和内部变量–“排序”模块的属性描述属性类属性说明功能根据指定的排序规则,完成排序外部属性输入数据:(升序、降序)、待排序的输入输出数据数据类型、待排序的数据输出数据:排序后的数据排序的算法有许多,冒泡法就是其中一个,选定内部属性算法一种算法给予描述School of Management腃HUST18
•模块化原理–模块化:•将复杂的软件划分为不同粒度的模块的过程,最小粒度的模块完成独立的功能,较粗粒度的模块则由细粒度模块构成。•模块化提供了一种方法,将系统分解成小的更容易管理的单元,并在它们之间定义了完善的接口•A B C D … … I 图 模块化的结果 School of Management腃HUST19
–模块划分的评价指标•耦合–描述模块之间的相对独立性,极性是越弱越好。–分类»数据耦合:模块之间所需的数据通讯所产生的耦合。»控制耦合:一个模块向另一个模块传递用来控制其内部逻辑的控制信息所产生的耦合,常用于有选择地执行被调用模块内部。»公共耦合:多个模块引用同一全程数据区所产生的耦合。»内容耦合:当一个模块要直接使用存在于另一个模块内的数据或控制信息,或转入另一个模块时所出现的耦合School of Management腃HUST20
–减少模块间的耦合程度可采用的措施:»通过过程或函数调用而不采用直接引用。»传递信息类型上,应尽量使用数据耦合。»控制耦合的数量,在模块间相互调用时模块间传递参数的个数最好只有一个。School of Management腃HUST21
•聚合–一个模块的内部活动之间的相关联,极性是越强越好。模块 A B … N 图 程序的处理元素 School of Management腃HUST22
–分类:»功能聚合:一个模块内的各处理元素只与单一任务相关。例如计算角度的COS函数、读取记录模块等都是功能聚合的模块。»顺序聚合:模块内前一个处理元素的输出是另一个处理元素的输入。»通讯聚合:模块内所有处理元素都引用同一数据,对同一输入数据进行操作或产生同一个输出数据。»过程聚合:模块内部各处理元素之间存在一定的关系,并且必须按某一特定的次序执行»时间聚合:一个模块内各处理元素必须在一个有限的时间间隔内执行完成。»逻辑聚合表示模块内包含了同一类型的多种活动,模块内的各处理元素逻辑相关。»偶然聚合:由关系比较松散的活动组成的模块。School of Management腃HUST23
–系统应用软件结构的形态•“形态”是指系统应用软件结构所表现出来的形状•4个参数:深度、宽度、扇入和扇出。–深度:软件调用其它模块的最多层次,即层次结构的层数。–宽度:软件结构中模块划分的粒度大小,若粒度过细,则宽度可能会较大。–扇入:某模块被其它模块调用的情况。–扇出:某模块调用其它模块调用的情况。School of Management腃HUST24
扇出为4 …… …… …… …… 扇入为3 图 应用软件的结构 School of Management腃HUST25
结构化系统设计方法•基本思想–认为一个程序、一个系统无非就是由一组功能操作构成的,而任何计算机程序都可以用顺序结构、分支结构和循环结构组成。因此系统设计者首先无须知道模块的内部,而只是将系统看作是功能模块的集合,对其模块间的关系进行设计。•基本方法–采用结构图(SC: Structure Chart),将模块按照一定的组织层次结构构造起来,以形成软件结构,描述系统由哪些模块组成,以及各个模块之间的调用关系。School of Management腃HUST26
•一个企业的“工资计算与打印”的结构图工资计算与打印 工资清单工资清单 工资计算数据工资打印 工资计算 工作类型、应缴税 岗位、时间加班应扣加班附加附加职工时间 基本款 收入总额 工资类别工资 编号 工资计算计算计算计算计算基本加班附加应扣税额 工资工资 工资 工资 图结构图实例 School of Management腃HUST27
•使用的基本符号 A A A A B B C D B C B (a) 基本形式 (b) 顺序 (c) 选择 (d) 重复 图 结构图的基本符号 School of Management腃HUST28
物料进消存统计 统计时间物料编号 库存时间点 统计时间物料进消存 入库 库存 物料编号 物料编号 打印/显示计算物料计算物料显示计算物料/打印 控制信息 入库 出库库存 物料进消存 图 “物料进消存统计”的结构图 School of Management腃HUST29
•如何将SA的结果转换为SC?–任务:DFD以及DD中的处理逻辑说明转换/映射为SC和模块说明书–映射策略•变换分析:按照I-P-O(输入-处理-输出)的方式,根据DD中处理逻辑的说明,将某处理逻辑分为输入部分、加工部分、输出部分,即得到叶子的下一层模块,然后再逐一对输入部分、加工部分、输出部分分别划分模块,设定模块的调用参数和返回数据。•事务分析:根据活动的序列得到初始结构图,然后分析每个活动,分解出相应细节,由此细化活动的模块。School of Management腃HUST30
–方法:•若管理信息系统作为企业数据处理要求的,即单纯地完成数据录入、存储、加工、传输、输出,而不涉及流程,则DFD就是按照输入-处理-输出来设计的,是描述输入-处理-输出的数据流,因此适合采取变换分析映射策略。•若管理信息系统只作为企业运作平台要求的,则DFD就是按照企业流程来设计的,是描述企业流程中活动的实现,因此适合采取事务分析映射策略。•混合策略:School of Management腃HUST31
•基本步骤–将分层DFD映射为初始结构图。–细化叶子模块。根据DD中的处理逻辑说明,将初始结构图中的叶子模块细化,得到每个叶子模块的结构图。•细化的一般原则:–顶层模块负责控制处理服务,实际数据处理较少;下一层模块控制处理服务较少,实际数据处理较多。–将叶子模块的结构图合并到初始结构图,得到扩展后的结构图。–优化扩展后的结构图:根据模块化的高聚合、低耦合的原则,优化扩展后的结构图,获得最终结构图。因此优化有合并、降低耦合、提升聚合、模块复用等操作。School of Management腃HUST32
•SC和DFD的主要区别:–SC:•表现层次、上下级模块的调用和控制关系;•设计就是根据系统的数据流,定义一组不同的映射,对系统功能模块进行分解和扩展,合理地将DFD转换为系统的SC。–DFD:表现逻辑处理功能的顺序和数据在系统内的流向,但并不表示各级控制关系和调用关系。•实例–以图6. 4为例,图至图为其部分结构图,它们均采取事务分析映射策略构造的。School of Management腃HUST33
•模块的详细设计–SC只完成了模块的结构设计,描述了模块的外部属性,却没有描述模块的内部属性,因此要利用“模块说明书”完成对每个模块的详细设计。–模块说明书School of Management腃HUST34
□所属属于企业规是模块标识子系则□统否模块名称主要功能调用模块被调用模块输入输出相关数据表主要内部变量算法设计者:设计日期:版本:School of Management腃HUST35
–以3层DFD为例 零层 一层 底层 图 数据流程图的分层表示 School of Management腃HUST36
模块与软件结构•定义:–可以组合、更换和分解的单元,是组成系统、便于处理的基本单位。–它们是建筑的基本几何体,它们有自的作用。玩积木的孩子根据自己的需要,选用相应的积木块,就可以搭建想象的建筑物。–在软件里,模块可以是一个函数、子程序。•属性–外部属性:功能、输入输出数据–内部属性:算法、内部变量School of Management腃HUST37
•模块化原理A … B C D … I 图 模块化的结果 School of Management腃HUST38
•划分的质量:模块的独立性来衡量–耦合:极性是越弱越好•分类:弱 数据耦合:模块之间由于数据传递所引起的耦合 控制耦合:模块之间由于相互调用所引起的耦合 公共耦合:模块之间由于共享数据区所引起的耦合 强 内容耦合:一模块与另一模块内部数据相关所引起的耦合 图 模块的耦合 School of Management腃HUST39
模块A 物料进消存统计 标志 计算物料计算物料计算物料显示/打印物模块B 入库 出库 库存 料进消存 图 控制耦合 图 “数据耦合”实例 模块A: 模块B 模块A 模块B 变量V A:V 共享数据区 全程数据区 图 内容耦合 图 公共耦合 School of Management腃HUST40
•如何设计?考虑如下问题:–怎样才能让程序员独立工作? –是否有多个模块需要同一事实、假设、协定或方法?–这些事实、假设、协定或方法是否会变化? –是否能够将变化限制在一个模块内?School of Management腃HUST41
•例在图中–“计算物料入库”、“计算物料出库”、“计算物料库存”之间就是数据耦合–模块设计时考虑了如下因素:»使每种物料库存增加的原因有很多,计算物料入库方法不会变化,采用“计算物料入库”模块,当发生变化时,只需要修改这一个模块即可;»使每种物料库存减少的原因有很多,计算物料入库方法不会变化,采用“计算物料入库”模块,当发生变化时,只需要修改这一个模块即可;»不仅功能“物料进消存统计”需要计算物料的入库、出库、库存,还在其他一些功能中需要使用,因此将物料的入库、出库、库存作为独立的模块可以减少程序设计的工作量,使编写其他模块的程序员只需要知道入库、出库、库存模块的外部属性即可。School of Management腃HUST42
–聚合:极性是越高越好模块 A B … N 图 程序的处理元素 •分类:功能聚合、顺序聚合、通讯聚合、过程聚合、时间聚合、逻辑聚合、偶然聚合。School of Management腃HUST43
•系统应用软件结构的形态–参数:深度、宽度、扇入和扇出扇出为4 …… …… …… …… 扇入为3 图 应用软件的结构 School of Management腃HUST44
结构化系统设计方法•基本思想:–认为一个程序、一个系统无非就是由一组功能操作构成的,而任何计算机程序都可以用顺序结构、分支结构和循环结构组成。因此系统设计者首先无须知道模块的内部,而只是将系统看作是功能模块的集合,对其模块间的关系进行设计。•基本方法:–结构图(SC: Structure Chart),将模块按照一定的组织层次结构构造起来,以形成软件结构,描述系统由哪些模块组成,以及各个模块之间的调用关系。School of Management腃HUST45
–使用的符号 A A A A B B C D B C B (a) 基本形式 (b) 顺序 (c) 选择 (d) 重复 图 结构图的基本符号 School of Management腃HUST46
工资计算与打印 单工资清单 工资清 工资计算数据工资打印 工资计算 工作类型、应缴税 岗位、时间加班应扣加班附加附加职工时间 基本款 收入总额 工资工资 类别编号 工资计算计算计算计算计算基本加班附加应扣税额 工资工资工资工资 图结构图实例 School of Management腃HUST47
–结构图和数据流程图的主要区别:•结构图表现的是层次、上下级模块的调用和控制关系;•数据流程图表现的是逻辑处理功能的顺序和数据在系统内的流向,但并不表示各级控制关系和调用关系。–结构图的设计就是根据系统的数据流,定义一组不同的映射,对系统功能模块进行分解和扩展,合理地将数据流程图转换为系统的结构图。School of Management腃HUST48
•如何将SA的结果转换为SC?–分层DFD以及DD → SC和模块说明书–映射策略:•变换分析映射策略:按照I-P-O(输入-处理-输出)的方式,根据DD中处理逻辑的说明,将某处理逻辑分为输入部分、加工部分、输出部分,即得到叶子的下一层模块,然后再逐一对输入部分、加工部分、输出部分分别划分模块,设定模块的调用参数和返回数据。–若管理信息系统作为企业数据处理要求的,即单纯地完成数据录入、存储、加工、传输、输出,而不涉及流程,则DFD就是按照输入-处理-输出来设计的,是描述输入-处理-输出的数据流,因此适合采取变换分析映射策略。School of Management腃HUST49
•事务分析映射策略:根据活动的序列得到初始结构图,然后分析每个活动,分解出相应细节,由此细化活动的模块。–若管理信息系统只作为企业运作平台要求的,则DFD就是按照企业流程来设计的,是描述企业流程中活动的实现,因此适合采取事务分析映射策略。图就是这样一类。•混合策略:School of Management腃HUST50
–基本步骤•将分层DFD映射为初始结构图。•细化叶子模块。根据DD中的处理逻辑说明,将初始结构图中的叶子模块细化,得到每个叶子模块的结构图。•将叶子模块的结构图合并到初始结构图,得到扩展后的结构图。•优化扩展后的结构图。根据模块化的高聚合、低耦合的原则,优化扩展后的结构图,获得最终结构图。因此优化有合并、降低耦合、提升聚合、模块复用等操作。School of Management腃HUST51
•实例–以图6. 4为例•图至图为其部分结构图•它们均采取事务分析映射策略构造的。•若细化每个处理逻辑的结构图后,再根据模块化的原则,优化结构图,最终得到系统的结构图。School of Management腃HUST52
–模块的详细设计•问题:SC只描述了模块的外部属性,却没有描述模块的内部属性,因此要利用“模块说明书”完成对每个模块的详细设计。School of Management腃HUST53
所属□是模块标识WLGL-007物料管理属于企业规则子系统√否模块名称物料进销存统计主要功能计算给定时间段物料的进消存,并显示或打印调用模块计算物料入库、计算物料出库、计算物料库存、显示/打印物料进消存被调用模块输入统计时间(起始时间、终止时间)、输出方式(打印/显示)输出显示/打印物料进销存统计表相关数据表物料的入库、出库明细、物料年初库存、物料当前库存、物料明细主要内部变量起始时间、终止时间、打印/显示选择、物料的进消存1)根据统计时间,从物料的“入库”、“出库”明细、“物料年初库存”、“物料当前库存”中筛选“需要计算进销存的物料清单”;2)根据生成的“需要计算进销存的物料清单”,循环算法调用:(1)模块“计算物料入库”,获得指定物料的入库数据;(2)模块“计算物料出库”,获得指定物料的出库数据;(3)模块“计算物料库存”,获得指定物料的库存数据。每循环一次,计算一种物料的进销存,直到全部计算完毕;3)调用“显示/打印物料进销存”。设计者:梁静设计日期:2002年04月03日版本: of Management腃HUST54