您有没有想过数据在软件系统中如何流动?信息如何处理和转换,又如何创造价值?数据流图(DFD)是一种可以回答此类问题的“视觉语言”。 DFD 是了解数据如何在软件系统中移动的重要工具,它提供了从入口点到最终目的地的数据流的可视化表示,并突出显示了整个过程中的数据转换。

无论您是测试人员、经验丰富的开发人员、崭露头角的程序员还是参与系统设计和架构的利益相关者,了解 DFD 可以释放宝贵的技能。本文提供了有关 DFD 的基础知识,重点介绍了它们的优点并指导您如何有效地利用它们。

我们从 DFD 基础知识和一组有关如何创建 DFD 的步骤开始。以库存管理系统为例,我们设计了一个基于 DFD 的基本测试用例样本。还探讨了 DFD 的优点和局限性。最后,我们提供了可用于 DFD 的工具,强调了它们的优点和缺点。

管弦乐队

一个有用的比喻是管弦乐队,其中数据流动就像不同乐器演奏的音符一样。 DFD 充当指挥的乐谱,概述这些音符的运动和变换。以下是管弦乐队如何转换为 DFD 组件:

  • 音乐家(数据源):这些是提供初始音乐数据(例如客户记录)的小提琴、长笛和其他乐器来自数据库、来自设备的传感器读数)。
  • 受众(数据目的地):受众代表音乐的最终接收者,就像为管理生成的报告或发送给其他人的数据一样系统进行进一步处理。
  • 乐谱架(数据存储):保存乐谱的乐谱架 – 这些就像数据库、文件或内存中的临时或永久存储数据的缓冲区。
  • 音乐短语(数据流):流动的旋律和和声转化为数据流,用连接不同组件的箭头表示。
  • 指挥(数据处理):正如指挥指导音乐家并塑造音乐一样,数据处理代表数据发生的转换随着它的流动(例如计算、过滤、数据操作)。

通过分析乐谱(DFD),我们可以了解完整的音乐旅程。同样,理解数据流有助于我们理解信息如何在系统内移动和演变。

如何创建 DFD

简而言之,创建 DFD 是一个迭代过程,可以从结对活动和其他人的反馈中受益。我们首先定义范围、实体和其他参数。当我们能够回答下面提到的一些基本问题时,我们就完成了。

1.定义系统范围

第一步是明确定义您正在建模的系统的边界。系统有哪些功能?它与哪些外部实体交互?拥有明确定义的范围可确保您的 DFD 专注于系统内的相关数据流。

2.识别外部实体

列出与系统交互的所有外部实体。用户是否通过网络界面输入数据?系统是否通过 API 从另一个系统接收数据?每个实体都应该清晰命名,反映其在数据交换中的作用。

3.精确定位数据流

对于每个外部实体,标识其发送到系统的数据(输入)以及从系统接收的数据(输出)。使用描述性名称标记数据流,以捕获所传输数据的本质。

4.引入数据存储

标识系统内的数据存储库。系统存储什么样的数据?它是否维护客户信息数据库或系统活动日志文件?每个数据存储都应适当命名,以反映其保存的数据。

5.概述数据处理  

定义数据流经系统时发生的转换。如何处理客户订单数据以生成发票?分析前如何过滤传感器数据?每个数据过程都应该标记其功能的清晰描述。

6.绘制 DFD 图表

一旦您确定了所有元素,就可以使用 DFD 工具甚至简单的绘图工具直观地表示它们。对外部实体(矩形)、数据流(箭头)、数据存储(圆柱体)和数据处理(圆角矩形)使用标准符号。

7.升级:上下文和 DFD 级别

单个 DFD 可能无法捕获整个系统的复杂性。这就是 DFD 级别概念的用武之地:

  • 上下文图(0 级):此高级概述将系统描述为与外部实体交互的单个进程。
  • 第 1 级 DFD:此级别将上下文图中的单个流程分解为更详细的子流程,展示数据流和数据存储体制内。
  • 2 级 DFD(及更高级别):可以进行进一步分解,重点关注 1 级 DFD 中的特定子流程,从而提供更强大的功能有关这些子流程内数据流的详细信息。

8.提炼和验证

起草 DFD 后,请检查其准确性和完整性。数据流是否连接到正确的实体和流程?流程内的数据转换是否明确定义?寻求利益相关者的反馈,以确保 DFD 准确反映系统的预期行为。

如何升级

为了帮助理解这里的主要思想,另一个比喻可能会有所帮助。每个城市都有街区、街道和隐蔽的小巷。一张地图可能无法捕捉到所有细节。同样,单个 DFD 可能无法封装复杂系统内的详细数据流。这就是 DFD 级别发挥作用的地方,它提供了一种分层方法来可视化不同粒度的数据流。

1.上下文图(0 级)

  • 大局:这是直升机上拍摄的城市地图。它将整个系统描述为一个单一的高级流程。此过程与由矩形表示的各种外部实体交互。数据流(箭头)展示了系统和这些实体之间的信息交换。
  • 重点:上下文图提供了广泛的概述,突出显示了系统的用途及其与外部世界的交互。它非常适合高层讨论和初步系统理解。

2. 1 级 DFD

  • 深入研究:现在我们深入城市!该级别将上下文图中的单个流程分解为更详细的子流程。这些子流程以圆角矩形表示,展示了系统的内部工作原理。
  • 数据流和存储:1 级 DFD 可以描述连接这些子流程的数据流(箭头)。他们还引入了数据存储(圆柱体),代表系统的内部存储库,其中临时或永久保存数据(例如数据库、文件)。
  • 增加细节:此级别提供了有关数据在系统内如何流动的更精细视图。它更能揭示每个子流程执行的功能以及它们如何与数据存储交互。

3. 2 级 DFD(及以上)

  • 放大特定区域:在这里,我们正在探索城市内的特定社区。 2 级 DFD(甚至可能更高的级别)从 1 级 DFD 中获取子流程,并将其进一步分解。他们专注于特定子流程内的数据流。
  • 复杂功能更加清晰:此级别对于系统内的复杂功能特别有用。通过将它们分解为更小、更易于管理的组件,DFD 可以让您更清楚地了解如何在每个子流程中操作和转换数据。

选择正确的级别

适当的 DFD 级别取决于系统的复杂性和所需的详细程度。

  • 上下文图:非常适合初步系统理解和高层沟通
  • 1 级 DFD:在概述和细节之间提供良好的平衡,对于设计和开发讨论非常有用
  • 2 级 DFD(及更高级别):专注于特定功能,有助于深入分析和记录

通过利用 DFD 级别,您可以创建一组全面的图表,以有效捕获系统内的数据流,从高级概述到精细检查具体流程。这种分层方法可确保参与系统设计和开发的所有利益相关者进行清晰的沟通和理解。

库存管理系统

假设我们的软件管理一家小商店的库存。以下是其功能的简化细分:

  1. 用户添加新商品:用户与系统交互以将新商品添加到库存中。这涉及提供商品名称、描述、数量和价格等详细信息。
  2. 库存数据验证:系统验证输入的数据,确保必填字段已填写且数据格式正确(例如正数量、有效的价格格式)。
  3. 库存更新:如果验证通过,新商品将添加到库存数据库中,或者更新现有商品的数量。李>
  4. 商品搜索:用户可以按名称或其他条件搜索库存中的商品。
  5. 库存报告:用户可以生成总结当前库存状态的报告,包括商品名称、数量和总值。李>

基于DFD的测试用例设计

现在,让我们利用 DFD 来设计涵盖各种场景和潜在数据流的测试用例:

1.用户界面测试

测试用例1.1

输入有效的商品详细信息(名称、描述、数量 > 0、价格 > 0)。

  • 预期结果:商品已成功添加到库存中。

测试用例1.2

将字段留空(例如,没有项目名称)。

  • 预期结果:系统显示一条错误消息,提示用户填写必填字段。

测试用例1.3

输入无效数量(例如负数)。

  • 预期结果:系统显示错误消息,指示数量格式无效。

测试用例1.4

输入无效的价格格式(例如,字母而不是数字)。

  • 预期结果:系统显示一条错误消息,指示价格格式无效。

2.库存数据验证测试

测试用例2.1

为新项目输入重复的项目名称。

  • 预期结果:系统显示一条错误消息,指示该项目已存在。

测试用例2.2

输入很长的项目名称(超出定义的限制)。

  • 预期结果:系统显示错误消息,指示项目名称太长。

3.库存更新测试

测试用例3.1

添加具有有效数量的新商品。

  • 预期结果:该商品将以正确的数量添加到库存数据库中。

测试用例 3.2 

更新现有商品的数量。

  • 预期结果:库存数据库已更新为商品的新数量。

测试用例3.3

尝试更新不存在的商品的数量。

  • 预期结果:系统显示一条错误消息,指示找不到该项目。

4.项目搜索测试

测试用例4.1

按项目的确切名称(区分大小写)搜索项目。

  • 预期结果:系统准确检索到商品信息。

测试用例 4.2 

通过部分名称匹配(不区分大小写)搜索项目。

  • 预期结果:系统检索与部分名称匹配的所有项目(如果适用)。

测试用例 4.3 

搜索库存中不存在的商品。

  • 预期结果:系统显示一条消息,指示没有任何项目符合搜索条件。

5.库存报告测试

测试用例5.1

库存为空时生成报告。

  • 预期结果:报告显示一条消息,指示库存中没有商品。

测试用例5.2

生成包含库存中各种物品的报告。

  • 预期结果:报告准确列出所有项目及其名称、数量和计算得出的总值。

测试用例5.3

生成特定格式的报告(例如 CSV、PDF)。

  • 预期结果:报告以请求的格式生成,并具有正确的数据表示形式。

记住

  • 这是一个简化的示例,具体测试用例将根据您的程序功能而有所不同。
  • DFD 是识别关键数据流和系统组件的宝贵工具。通过分析这些流程,您可以设计测试用例以确保系统按预期运行。

数据流程图的好处

创建 DFD 可为软件开发项目带来诸多好处:

增强沟通

DFD 提供了一种清晰的“视觉语言”,技术和非技术的利益相关者都可以理解。这可以改善设计阶段的沟通和协作。

改进的系统设计

通过可视化数据流,可以及早发现数据处理中的潜在瓶颈或低效率。这可以实现更优化的系统设计。

更清晰的数据要求

DFD 突出显示系统有效运行所需的数据。这可以帮助定义数据存储需求并设计适当的数据库结构。

文档和维护

DFD 在整个开发生命周期中充当有价值的文档。它们为项目经理、架构师、开发人员、测试人员和未来的维护人员提供了参考点,确保清楚地了解系统的数据流。

早期错误检测

通过可视化数据流,可以在编码开始之前识别潜在的不一致或丢失的数据转换。这可以减少开发过程中的错误,并减少项目后期昂贵的返工需求。

数据流图的局限性

以下是 DFD 的一些限制:

有限的控制流表示

DFD 主要关注数据流和转换。它们没有明确描述流程内的顺序或决策逻辑。虽然某些工具可能为条件流提供符号,但 DFD 并不适合表示复杂的控制流逻辑。这对于理解系统在不同条件下的行为至关重要。

数据结构复杂性

DFD 表示具有简单标签的数据流,这可能无法充分捕获数据的结构和复杂性。对于处理复杂数据对象或层次关系的系统,这可能是一个问题。

大型系统的可扩展性

对于非常大且复杂的系统,创建和管理单个综合 DFD 可能会变得很麻烦。元素和数据流的数量过多会使图表难以理解和维护。

关注功能,而不是实现

DFD 主要描述系统的“内容”,重点关注功能和数据流。它们不会直接转换为特定的代码或实现细节。可能需要额外的文档来弥合 DFD 和实际系统实现之间的差距。

有限用户交互建模

虽然 DFD 可以将用户与系统的基本交互表示为外部实体,但它们没有详细描述用户界面或用户体验 (UX) 方面。可能需要额外的工具或图表才能有效地捕获这些方面。

<小时/>

尽管存在这些限制,DFD 仍然是系统设计和通信的一个有价值的工具。以下是一些缓解这些限制的策略:

  • 使用泳道图实现复杂的控制流:这些图表可以直观地表示流程中的决策点和替代路径。
  • 为不同的功能创建单独的 DFD:将大型系统分解为更小、更易于管理的 DFD 可以提高可读性和可维护性。
  • 将 DFD 与其他工具结合使用:将 DFD 与结构图或用户流程图等其他图表结合使用,以提供更全面的信息系统。
  • 单独记录数据结构:创建详细说明数据对象内的结构和关系的附加文档。

通过了解这些限制并采用适当的策略,您可以有效地利用 DFD 来设计、记录和传达系统功能。

数据流程图工具

以下是创建 DFD 的最流行的工具,及其主要功能的比较:

1.清晰图

优势

  • 基于云:可通过任何带有网络浏览器的设备进行访问,适合远程协作
  • 用户友好:拖放功能简化了 DFD 创建
  • 实时协作:允许多个用户同时处理同一个 DFD
  • 集成:与各种项目管理和开发工具无缝连接
  • 丰富的模板库:提供全面的 DFD 符号和模板库

弱点

  • 费用:免费套餐的功能和存储空间有限。高级功能需要付费订阅。

2.微软 Visio

优势

  • 行业标准:在各个行业得到广泛认可和使用
  • 丰富的库:提供大量 DFD 符号和详细图表模板
  • 自定义选项:允许对形状、线条和样式进行广泛自定义
  • 集成:提供与其他 Microsoft Office 产品的强大集成

弱点

  • 成本:可能会很昂贵,尤其是对于单个用户
  • 学习曲线:与更简单的工具相比,学习曲线更陡
  • 对于基本 DFD 来说太过分了:创建简单 DFD 可能超出了所需的范围。

3. Draw.io(以前的 Gliffy)

优势

  • 免费开源:无需许可费用,所有人都可以使用
  • 跨平台:可作为基于网络的界面和桌面应用
  • 大型符号库:提供各种形状和模板,包括 DFD 符号
  • 导出选项:允许导出各种图像格式(PNG、JPG)和 SVG 的图表以供进一步编辑

弱点

  • 协作有限:与某些付费工具相比,协作功能不够强大。
  • 高级功能较少:缺少一些高级功能,例如形状自定义或数据导入/导出

4. yEd 图形编辑器

优势

  • 免费且开源:创建 DFD 的另一个免费选项
  • 灵活性:提供创建自定义形状和布局的灵活性
  • 数据导入/导出:支持导入/导出各种格式的数据,对于复杂的图表很有用

弱点

  • 学习曲线:与拖放工具相比,用户界面可能不太直观。
  • 协作:缺乏基于云的工具的一些协作功能

5.微软Word

优势

  • 随时可用:大多数用户已经可以访问 Microsoft Word,这使其成为一个方便的选择。
  • 基本功能:提供基本形状绘制功能和有限的 DFD 符号选项
  • 文档:这足以在 Word 文档中创建用于文档目的的简单 DFD。

弱点

  • 功能有限:不是专用的图表工具,对于复杂的 DFD 来说很麻烦
  • 缺少的功能:缺乏形状自定义、布局选项和强大协作等高级功能

<小时/>

选择正确的工具

最适合您的工具取决于您的具体需求。这是一个快速指南:

  • 对于协作需求有限的简单 DFD:Draw.io 或 Word 可能就足够了。
  • 对于复杂的 DFD 和协作:Lucidchart 或 Visio 是具有高级功能的不错选择。
  • 对于注重预算的用户:Draw.io 和 yEd Graph Editor 是免费的替代方案。
  • 对于需要基本 DFD 创建的 Microsoft Office 用户:Microsoft Word 足以生成简单的图表。

考虑上述因素并尝试使用这些工具,看看哪一个最适合您的工作流程和项目要求。

总结

数据流程图是有效软件开发的基石。通过掌握 DFD 创建,您将获得一个强大的工具来理解、可视化和记录系统内的数据流。这使您能够设计高效的数据处理工作流程,及早发现潜在问题,并在整个开发过程中与利益相关者进行清晰的沟通。

Comments are closed.