数据流图(DFD)提供了系统内信息流(即数据流)的可视化表示。通过创建一个数据流图,您可以告诉参与系统流程的人员所提供和交付的信息、完成流程所需的信息以及需要存储和访问的信息。数据流图在软件工程中得到了广泛的应用。您可以在信息系统建模中使用DFD。本文以客户服务系统为例,对数据流图(DFD)进行了描述和说明。
CS系统示例
数据流图是一个层次图,包括:
- 上下文关系图(概念上为零级)
- 第1层的过程
- 以及可能的第2级DFD和功能分解的进一步级别,这取决于系统的复杂性
上下文
下图显示了为铁路公司的客户服务系统绘制的上下文数据流程图。它包含一个表示要建模的系统的流程(形状),在本例中是“CS系统”。它还显示将与系统交互的参与者(称为外部实体)。在本例中,CS Assistant和Passenger是将与系统交互的两个实体。在流程和外部实体之间有数据流(连接器),表明实体和系统之间存在信息交换。
上下文DFD是数据流模型的入口。它只包含一个进程,并且不显示任何数据存储。
1级过程
下图显示了第一级DFD,它是在DFD上下文中显示的CS系统过程的分解(即分解)。通读这张图,然后我们将介绍一些基于这张图的关键概念。
CS系统数据流图示例包含四个流程、两个外部实体和四个数据存储。虽然没有控制数据流图中形状位置的设计指导原则,但我们倾向于将流程放在中间,将数据存储和外部实体放在两侧,以便于理解。
由图可知,乘客可以通过查询运输明细流程接收运输明细,具体由数据存储、运输明细和铁路实时统计提供。存储在运输明细中的数据是持久性数据(由标签“D”表示),而存储在铁路实时统计中的数据是短暂保存的瞬态数据(由标签“T”表示)。标注形状用于列出乘客可以查询的详细信息。
CS Assistant可以启动购买纪念品流程,将订单细节存储在订单数据存储中。虽然购买纪念品的是顾客本人,但是进入系统存储订单细节的是CS助理。因此,我们使数据流从CS助理到购买纪念品流程。
CS Assistant还可以通过提供订单细节来启动购买过程,这些细节将再次存储在订单数据存储中。数据流图是一个高度抽象的高级图。这里所绘制的数据存储顺序并不一定意味着数据库中的实际订单数据库或订单表。订单细节的物理存储方式将在以后实现系统时决定。
最后,CS Assistant可以通过提供事件和物品细节来启动报告丢失过程,并将信息存储在物品丢失数据库中。
数据流程图提示和注意事项
用D、M和T表示数据类型
在数据流图中绘制的每个数据存储都以字母为前缀,默认情况下为'D'。字母表示数据存储所保存的数据的类型。字母“D”用于表示持久的计算机化数据,这可能是典型信息系统中最常见的数据类型。除了计算机化的数据,数据还可以被暂时保存一小段时间。我们称这种数据为暂态数据,用字母“T”表示。有时,数据是不用计算机来存储的。我们称这种数据为人工数据,用字母M表示。最后,如果数据在不使用计算机的情况下存储,并且保存时间很短,则称为手动暂态数据,用T(M)表示。
注意细节的层次
在这个数据流图示例中,在标记数据时多次使用了单词“details”。我们有“运输详情”和“订单详情”。如果我们把它们明确地写为“路线信息、列车时间和延误”、“纪念品名称、数量和数量”、“票款类型和数量”会怎样?这是正确的吗?这个问题没有明确的答案,但在做决定时试着问自己一个问题。你为什么要画DFD?
在大多数情况下,数据流程图是在系统开发的早期阶段绘制的,其中许多细节还有待确认。一般术语如“细节”、“信息”、“证书”的使用当然会留下讨论的空间。然而,使用通用术语可能会缺乏细节,使设计失去其实用性。所以这取决于你设计的目的。
不要透支
在数据流图中,我们关注的是系统和外部方之间的交互,而不是接口之间的内部通信。因此,接口和使用的数据存储之间的数据流被认为超出了范围,不应该显示在图中。
不要混淆数据流和进程流
当遇到从数据存储连接到流程的连接器时,如果没有在关系图上显示指定的数据请求步骤,一些设计人员可能会感到不舒服。有些设计人员会尝试将请求附加到流程和数据存储之间的连接器上,并将其标记为“请求”或“对某些东西的请求”,这当然是不必要的。
请记住,数据流图是为表示信息交换而设计的。数据流图中的连接器用于表示数据,而不是表示流程流、步骤或其他任何东西。当我们将以数据存储为结尾的数据流标记为“请求”时,这实际上意味着我们将请求作为数据传递到数据存储。虽然这可能是在实现级别的DBMS做支持的使用功能,而摄入一些值作为参数并返回一个结果,然而,在数据流图中,我们倾向于把数据存储作为一个唯一的数据夹,并不拥有任何处理能力。如果希望对系统流或流程流建模,则可以使用活动图或BPMN业务流程图。如果要对数据存储的内部结构建模,可以使用实体关系图。
资源
- Customer-Service-System.vpp
本教程的读者也可以阅读
- 什么是数据流程图(DFD)?如何绘制DFD?
- 如何编写有效的用例?
- 数据流程图:实例-订餐系统
- 如何使用ERD对关系数据库设计建模?
- 如何开发现有的和将来的业务流程?