目录
8.1 结构化分析
-
结构化分析是面向数据流进行需求分析的方法,采用结构化方法进行系统分析时,根据分解与抽象原则,按照系统中数据处理的流程,用(数据流图 )建立系统的逻辑模型,完成分析工作
-
结构化分析将数据、处理作为分析对象,数据的分析结果表示了现实世界中实体的属性及其之间的相互关系,而处理结果展现了系统对数据的加工、转换
-
需求分析阶段的输出是结构化分析模型,包括数据流图、数据字典、实体联系图、状态迁移图。结构化分析的输出包括数据流图、数据字典、加工逻辑,结构化分析的结果为结构化设计提供最基本的输入信息,确定软件体系结构在软件设计阶段进行
-
结构化分析方法在实施阶段强调的是分析对象的数据流
8.2 结构化设计
-
设计活动:包括4个既独立又相互联系的活动(金字塔模型)
-
数据设计:数据库设计,主要包含数据库设计、数据包含的核心表设计。根据数据字典、实体关系图进行,基于实体联系图确定软件涉及的文件系统结构、数据库表结构
-
体系结构设计:开发的系统中包含哪些部件,部件与部件间的关系就是体系结构设计;根据数据流图进行,定义软件的主要结构元素及关系
-
接口设计:用于子系统和模块间、内部系统和外部系统间的各种交互,如功能描述、输入输出定义、错误处理设计;根据数据流图进行,描述用户界面、软件、其他硬件设备、其他软件系统、使用人员的外部接口、各种构件间的内部接口
-
过程设计:模块详细设计,主要是详细模块的实现算法、模块所使用的数据结构。根据加工规格说明、控制规格说明进行,确定软件各个组成部分内的算法、内部数据结构,并选定某种过程的表达形式来描述各种算法
-
8.3 数据流图DFD
-
理解
-
面向数据流建模是目前仍被广泛使用的方法之一,DFD是面向数据流建模中的重要工具,它将系统建模成输入一处理一输出的模型,即流入软件的数据对象经处理转换,最后以结果数据对象的形式流出软件
-
数据流图是分析过程中描述数据处理过程的工具,只反映系统必须完成的逻辑功能,是一种功能模型,是需求分析阶段产生的成果
-
是一种便于用户理解、分析系统数据流程的图形工具。它摆脱了系统的物理内容,精确地在逻辑上描述系统的功能、输入、输出、数据存储等,是系统逻辑模型的重要组成部分,是结构化分析方法的重要模型
-
是一种最常用的结构化分析工具,从数椐传递、加工角度,以图形方式刻画系统内数据的运动情况
-
数据流图、流程图是结构化建模中使用的重要工具,能帮助开发人员更好地分析设计系统,增强系统开发
-
在采用结构化开发方法进行软件开发时,设计阶段接口设计主要依据需求分析阶段的数据流图
-
组成元素 | 说明 | 图元 |
---|---|---|
数据流 | 由一组固定成分的数据组成,表示数据流向。每个数据流通常有一个合适的名词,反映数据流的含义 | → |
加工 | 描述输入数据流到输出数据流间的变换,输入数据流做什么处理后变成输出数据流 | ◯ ▢ |
数据存储(文件) | 表示暂时存储的数据,每个文件都有名字。数据流流向文件表示写,流出表示读 | ㄈ= |
外部实体 | 存在于系统外的人员或组织,指出系统所需数据的发源地、系统产生数据的归宿地 | ▭ |
-
数据流图、流程图区别
-
数据流图作为一种图形化工具,说明业务处理过程、系统边界内所包含的功能、系统中的数据流,适用于系统分析中的逻辑建模阶段;流程图以图形化方式展示应用程序从数据输入到获得输出为止的逻辑过程,描述处理过程的控制流,往往涉及具体技术、环境,适用于系统设计中的物理建模阶段
-
数据流图的处理过程可并行;流程图在某时间点只能处于一个处理过程
-
数据流图展现系统的数据流;流程图展现系统的控制流
-
数据流图展现全局处理过程,过程间遵循不同的计时标准;流程图的处理过程遵循一致的计时标准
-
-
分类
-
分层数据流图:必须保持父、子图平衡,父图的输入/输出数据流与子图的输入/输出数据流一致,有时看起来不一致,但经查验数据字典可能发现是一致的。每个加工必须有输入、输出数据流。数据流图中的每个基本加工,需要有一个加工规格说明,描述把输入数据流变换为输出数据流的加工规则,但不需要描述实现加工的具体流程
-
顶层数据流图:只含有一个加工处理表示整个管理信息系统;输入、输出数据流为系统的输入、输出数据,表明系统的范围、与外部环境的数据交换关系
-
-
分层和编号
-
对一个软件系统,其数据流图可能有多层,每层又有许多张图。为区分不同加工、不同DFD子图,应对每张图、每个加工编号,以利于管理
-
父图与子图:若分层数据流图的某张图A中的某个加工可用另一张图B来分解,则称图A是图B的父图,图B是图A的子图。一张图中,有些加工需进一步分解,有些加工则不必分解。若父图中有n个加工,那么它可以有位于同一层的0~n张子图,但每张子图都只对应于一张父图
-
编号:顶层图只有一张,图中的加工也只有一个,所以不必编号;0层图只有一张,图中的加工号可分别是0.1、0.2。子图号就是父图中被分解的加工号;图的加工号由图号、圆点、序号组成
-
-
数据流图注意事项/建模原则
-
数据流图从数据传递、加工角度,以图形方式刻画数据流从输入到输出的移动变换过程,是对软件所要处理数据的抽象,其基础是功能分解。对一些复杂的实际问题,在数据流图中常常出现许多加工,看起来不直观,也不易理解,因此用分层的数据流图来建模
-
按系统层次结构逐步分解,以分层的数据流图反映这种结构关系。在分层的数据流图中,各层数据流图之间保持“平衡”关系,输入、输出数据流在各层保持一致
-
数据流图平衡原则(默写):
① 父图、子图平衡。父图中某加工的输入/输出数据流必须与它子图的输入/输出数据流在数量、名字上相同,在数据字典中的定义必须一致,数据流/数据项既不能多也不能少。父图的一个输入、输出数据流对应子图中几个输入、输出数据流,而子图中组成这些数据流的数据项全体正好是父图中的这一个数据流,那么它们仍是平衡的
② 子图内平衡
-
保持数据守恒:一个加工所有输出数据流中的数据必须能从该加工的输入数据流中直接获得,或通过该加工能产生的数据
-
数据流只能和加工相关,即从加工流向加工、数据源流向加工、加工流向数据源;每条数据流的输入、输出必须是加工,即至少有一端是加工;每个加工必须既有输入数据流,又有输出数据流
-
画数据流而不要画控制流;分解尽可能均匀,一个加工不适合有过多的数据流;一幅图中的图元个数控制在7+2以内
-
适当为数据流、加工、数据存储、外部实体命名,名字应反映该成分实际含义,避免名字空洞;一个加工的输出数据流不应与输入数据流同名,即使它们的组成成分相同
-
允许一个加工有多条数据流流向另一个加工,也允许一个加工有两个相同的输出数据流流向两个不同加工
-
在自顶向下分解过程中,若一个数据存储首次出现时只与一个加工有关,那么这个数据存储应作为这个加工的内部文件而不必画出
-
整套数据流图中,每个数据存储必须既有读的数据流,又有写的数据流。但在某张子图中,可能只有读没有写,或只有写没有读
-
每个数据流、数据存储都要在数据字典中定义,数据字典将包括各层数据流图中数据元素的定义
-
数据流图中最底层的加工处理必须有加工处理说明
-
加工处理说明和数据流图中加工处理涉及的元素保持一致。如,在加工处理说明中,输入数据流必须说明其如何使用,输出数据流说明如何产生或选取,数据存储说明如何选取、使用、修改
-
-
绘制数据流图加工的错误(默写)
-
黑洞:只有输入而无输出
-
奇迹:只有输出而无输入
-
灰洞:输入数据流无法通过加工产生输出数据流
-
输入数据流与输出数据流名称相同
-
外部实体没有经过加工处理,直接到数据存储
-
部实体之间没有加工处理,存在直接数据流
-
-
答题技巧
-
补充实体
① 人物角色:客户、管理员、主管、经理、老师、学生 ② 组织机构:银行、供应商、慕捐机构 ③ 外部系统:银行系统、工资系统、后台数据库(开发中间件时)
-
补充存储:存储的文字特征:xx文件、xx表、xx库、xx清单、xx档案
-
补充数据流
① 数据平衡原则
a. 顶层图与0层图对比,是否有顶层图有、但0层图无的数据流,或反之
b. 检查图中每个加工,是否存在只入没出,或只出没入,或根据输入数据无法产生对应输出的情况
② 按题目说明与图匹配:说明中的每一句话,都能与图中有对应关系,当把说明中的实体与数据流标识出来后,容易缩小对应范围,找出纰漏
-
补充加工名
加工用于处理数据流,补充加工名可以把该加工涉及到的数据流,在说明中标识出,再在数据流名称所在句子中,找“动词 + 名词”的结构,分析是否可作为加工。如:生成报告,发出通知,批改作业,记录分数,物流跟踪、用户管理
-
8.4 数据字典
-
数据字典
1.数据流图描述了系统分解,但没有对图中各成分进行说明。数据字典用于描述数据流图中的每个数据流、文件、加工、组成数据流或文件的数据项
2.4类条目:数据流、数据项、数据存储、加工
-
基本加工条目用来说明DFD中基本加工的处理逻辑,由于下层的基本加工是由上层加工分解而来,只要有了基本加工的说明就可理解其他加工
-
对每一个基本加工, 都应该有一个加工逻辑来说明
-
加工描述了输入数据流到输出数据流之间的编号,即输入数据流经过什么处理后变成输出数据流
-
加工逻辑对其进行说明,描述了该过程的加工规则。加工逻辑位于需求分析阶段,此时并没有设计具体的数据结构、算法。常用加工逻辑描述方法有结构化语言、判定表、判定树
3.数据字典管理:指把字典条目按某种格式组织后存储在字典中并提供排序、查找、统计等功能
符号 含义 举 例 说 明 = 被定义为 + 与 x = a + b,表示x由a和b组成 [... , ...] 或 [... | ...] 或 x = [a ,b],x = [a|b],表示x由a或由b组成 {...} 重复 x = {a},表示x由0个或多个a组成 (...) 可选 x = (a),表示a可在x中出现,也可以不出现 例如:机票 = 姓名 + 日期 + 航班号 + 起点 + 终点 + 费用;终点 = [长沙|上海|北京|西安 ]
-