绘图是系统分析和软件设计中的基本技能。它将抽象概念转化为团队能够理解并评估的视觉结构。然而,两种方法常常让从业者感到困惑:数据流图(DFD)和流程图。尽管两者都表示过程,但它们的目的不同,使用的符号不同,关注系统行为的不同方面。选择错误的工具可能导致沟通失误、逻辑缺陷或低效的开发周期。本指南对这两种方法提供了清晰且权威的解析。
理解这些图表之间的细微差别,对参与需求收集、系统架构或流程改进的任何人来说都至关重要。本文档探讨了技术规范、实际应用以及关键差异,以确保建模的准确性。

流程图是算法、工作流程或过程的图形化表示。它描绘了为实现特定结果而采取的步骤顺序。流程图的主要关注点在于控制流。它详细说明了过程从开始到结束的逻辑,包括决策点、循环和条件路径。
流程图依赖于一组标准化的图形,通常与 ANSI 或 ISO 标准相关。每个图形都代表特定的操作含义:
逻辑流程通过连接这些图形的箭头来表示。这种视觉层级结构使分析人员能够追踪程序或业务流程的执行路径。它在记录系统在特定条件下的行为方面尤其有用。
当复杂性在于逻辑和决策时,流程图尤为理想。请考虑以下场景:
流程图的优势在于它能够清晰展示分支路径。如果用户输入了无效数据,流程图会明确指引他们进入修正步骤;如果数据有效,则进入处理阶段。这种对控制逻辑的关注,正是它与以数据为中心的模型相区别的关键。
数据流图(DFD)是一种结构化分析工具,用于表示系统内部信息的流动。与流程图不同,DFD 不展示操作的顺序或事件的时间点,而是专注于数据流动。它展示了数据在系统不同部分之间如何被转换、存储和传输。
DFD 使用由 Yourdon/DeMarco 或 Gane & Sarson 等方法论定义的一套特定符号。其重点在于数据本身,而非控制数据的逻辑。
DFD 中一个关键规则是:数据不能在两个数据存储之间直接流动,除非中间存在一个处理过程;同样,数据也不能直接从外部实体流向数据存储,而必须经过一个处理过程。这确保了所有数据存储都涉及某种形式的转换或管理。
DFD 是分层的。它们被分解为多个层级,以管理复杂性,并在需要时提供详细信息。
DFD 最适合用于定义系统的功能需求。它们帮助利益相关者理解系统处理哪些数据以及数据如何流动。应用场景包括:
DFD的主要优势在于它能够抽象掉时间与逻辑,专注于信息架构本身。它回答的问题是:“数据去往何处?”而不是“系统如何决定做什么?”
尽管两种图表都使用箭头和方框,但它们的基本理念存在显著差异。混淆两者可能导致模型无法真实反映系统的本质。
| 特性 | 流程图 | DFD |
|---|---|---|
| 关注点 | 控制流(逻辑与顺序) | 数据流(流动与转换) |
| 符号 | 椭圆、矩形、菱形 | 方框、圆圈、开放矩形 |
| 箭头 | 表示步骤的顺序 | 表示数据的方向 |
| 时间 | 暗示顺序和时间 | 不暗示顺序或时间 |
| 决策点 | 中心位置(菱形) | 无(逻辑隐藏在处理过程中) |
| 数据存储 | 未明确显示 | 明确显示(仓库) |
| 最适合 | 程序逻辑、工作流程 | 系统架构、需求 |
最重要的区别在于控制的概念。流程图是控制的映射。它告诉你下一步会发生什么。如果满足条件A,则转到步骤B;如果不满足,则转到步骤C。这对编程和操作流程至关重要。
DFD是数据的映射。它告诉你哪些数据可用以及数据的流向。它不关心步骤B是否在步骤C之前发生。在DFD中,过程可以并行、顺序或异步运行。该图仅表明过程1生成数据X,而过程2消耗数据X。
流程图通常不包含数据存储。它们关注的是动作。如果流程图提到一个文件,通常只是次要的输入/输出步骤。在DFD中,数据存储是核心组成部分。它们代表系统的记忆。尽早识别数据存储对数据库设计至关重要。DFD迫使分析人员思考持久性,而流程图则假设线性执行。
绘制图表很容易;但绘制准确且有用的图表则是一门学问。在切换这些方法论或在缺乏明确策略的情况下绘图时,常会出现一些常见错误。
一个常见错误是将决策菱形放在DFD内部。DFD不处理逻辑。如果一个过程依赖于某个条件,该条件应在过程的附注文本中描述,而不是画成菱形。这能确保图表专注于数据。
在DFD中,每个数据存储必须至少有一个输入流和一个输出流(除非是死数据存储,这种情况很少见)。如果存在数据库但没有任何过程向其写入或读取数据,那么该图就是有缺陷的。同样地,在流程图中,每个决策菱形必须至少有两个输出路径。
箭头和形状上的标签必须准确。’数据’不是一个标签。’客户订单详情’是一个标签。’处理数据’较弱。’验证并存储订单’则较强。清晰的命名规范可防止开发过程中产生误解。
试图将过多内容塞入单一图表会降低可读性。如果一个过程框包含超过5到7个子过程,应将其分解为更低层级的DFD。目标是管理复杂性,而不是隐藏它。
为确保您的图表能发挥其作用,请遵循以下准则。这些实践适用于任何绘图工具。
流程图和数据流图都是软件开发生命周期(SDLC)不可或缺的部分,但它们出现在不同的阶段。
在初始阶段,数据流图通常是主要工具。它们有助于定义系统在信息处理方面必须完成的任务。它们有助于识别所需的输入和预期的输出。这有助于技术团队与业务目标保持一致。
随着项目进入设计阶段,流程图变得更为相关。数据流图中的高层次需求被转化为具体的逻辑流程。开发人员使用流程图(或伪代码)来实现处理数据流图中识别出的数据的算法。
这两种图表在测试过程中都作为参考点。测试用例可以从流程图的路径中推导出来。数据完整性检查可以从数据流图的流程中推导出来。当有变更请求时,更新这些图表可确保文档保持准确。
对于企业级系统,简单的图表可能不足以满足需求。存在高级建模技术,可以弥合这两种方法之间的差距。
泳道图是流程图的一种变体,增加了责任维度。它们显示每个步骤由谁执行。当多个部门交互时,这非常有用。它将流程图的逻辑与组织背景相结合。
对于对象状态至关重要的系统(例如订单从“已付款”变为“已发货”),流程图可能过于线性。状态图展示由事件触发的状态之间的转换。这与关注数据流动的数据流图不同,也与关注过程步骤的流程图不同。
在实践中,团队通常会同时使用两者。数据流图定义系统边界和数据架构。流程图定义特定过程内的逻辑。例如,数据流图显示“订单处理”是一个过程。流程图则详细说明该“订单处理”如何验证信用卡并检查库存的内部逻辑。
在数据流图和流程图之间进行选择,并不在于哪个更好,而在于哪个更适合你试图回答的具体问题。如果你需要了解数据如何流动,就使用数据流图。如果你需要了解决策是如何做出的,就使用流程图。
掌握两者可以实现全面的系统建模。它确保架构是合理的(数据流图),逻辑是可执行的(流程图)。通过遵循标准并避免常见陷阱,你可以创建经得起时间考验的文档,并促进技术与非技术团队之间的清晰沟通。
请记住,图表是动态文档。它们应随着系统的演进而不断更新。定期审查和更新可确保视觉表示始终真实反映实际运行情况。无论你是绘制简单的流程,还是复杂的大型企业架构,清晰都是任何绘图工作的最终目标。
从需求开始。明确范围。选择匹配需求的工具。并精确地进行文档记录。这种有纪律的方法将带来更好的系统,并减少误解。