软件工程导论实验一:数据流图的设计与实现
在软件设计与开发的生命周期中,需求分析是至关重要的一环。结构化分析方法是一种经典且有效的需求分析技术,其核心工具之一便是数据流图。本次实验旨在通过一个具体的软件设计与开发案例,引导学生掌握数据流图的基本概念、设计原则与绘制方法,从而为后续的系统设计与实现奠定坚实的基础。
一、 实验目的与意义
- 理解数据流图的基本概念:明确数据流、加工、数据存储和外部实体四大构成要素的定义与表示方法。
- 掌握数据流图的设计原则:学习如何从顶层上下文图开始,通过逐层分解(分层细化)的方式,构建清晰、一致、平衡的层次化数据流图。
- 应用数据流图进行系统建模:针对一个中等复杂度的软件系统(如“图书馆管理系统”、“在线购物系统”或“学生选课系统”),运用数据流图对其功能需求和数据流动过程进行可视化描述。
- 建立需求分析的工程化思维:体验从用户需求到形式化、结构化模型转化的过程,理解数据流图作为开发人员与用户之间沟通桥梁的作用。
二、 数据流图核心要素与设计步骤
1. 核心要素
- 外部实体:代表系统之外的、与系统进行数据交互的人、物或系统,用方框表示。
- 加工:代表对输入数据进行处理并产生输出数据的变换过程,用圆角矩形或圆形表示。每个加工必须有输入和输出。
- 数据流:代表在系统中流动的数据,用带箭头的线段表示,旁边标注数据内容。
- 数据存储:代表系统需要持久化或临时保存的数据集合,用开口矩形或两条平行线表示。
2. 设计步骤
- 确定系统边界与外部实体:明确系统范围,识别所有与系统交互的外部对象。
- 绘制顶层图(0层图):将整个系统视为一个加工,描绘系统与所有外部实体之间的输入和输出数据流。
- 逐层分解,绘制下层图:对顶层图中的加工进行分解,形成更详细的子图。每一层都应保持父图与子图之间的输入/输出数据流平衡。
- 检查与优化:检查图的完整性、一致性,消除冗余,确保每个数据流都有其来源和去向,每个加工都有明确的功能。
三、 实验案例:简易在线书店系统
1. 系统需求简述
系统主要用户包括:顾客、仓库管理员、系统管理员。核心功能需求如下:
- 顾客:浏览图书、查询图书、注册/登录、将图书加入购物车、提交订单、在线支付、查看订单状态。
- 仓库管理员:处理订单(确认、配货、发货)、更新库存信息。
- 系统管理员:管理图书信息(增删改查)、管理用户账户。
2. 数据流图设计与实现示例(部分)
顶层图(0层图):
外部实体:顾客、仓库管理员、系统管理员、支付网关(外部系统)。
唯一加工:“在线书店系统”。
主要数据流:
输入:来自顾客的查询请求、登录信息、订单信息、支付请求;来自管理员的图书管理指令、订单处理指令等。
- 输出:向顾客返回的图书列表、订单确认、支付结果;向管理员反馈的处理结果;向支付网关发送的支付数据。
第一层分解图(将“在线书店系统”分解):
将主加工分解为几个核心加工,例如:
- P1:用户交互与认证:处理用户注册、登录、会话管理。
- P2:图书目录管理:处理图书的浏览、搜索、信息展示。
- P3:购物车与订单处理:处理购物车操作、订单生成与提交。
- P4:支付处理:与外部支付网关交互,完成支付流程。
- P5:后台管理:处理图书上架/下架、订单状态更新(配货、发货)、库存管理。
- 数据存储:用户信息库、图书目录库、购物车临时存储、订单库、库存库。
进一步分解(以P3“购物车与订单处理”为例):
P3可进一步分解为:“添加商品至购物车”、“编辑购物车”、“生成订单”、“保存订单至数据库”等子加工,并详细描述其与“用户信息库”、“图书目录库”、“订单库”之间的数据读写关系。
四、 实验与思考
通过本次实验,学生不仅能够绘制出一套符合规范的数据流图,更应深入理解其背后的软件工程思想:
- 抽象与分解:通过分层将复杂系统化繁为简,控制每一层的复杂度。
- 数据驱动:关注系统中的数据流动与变换,而非控制流,这有助于清晰地界定系统功能。
- 沟通与验证:图形化的模型便于与领域专家(用户)进行沟通,早期发现需求歧义或遗漏。
- 设计基础:数据流图中识别的数据存储和加工,将直接转化为后续数据库设计中的表结构和系统模块/类设计的重要依据。
思考题:
1. 数据流图在描述实时控制系统或强调过程控制顺序的系统时有何局限性?
2. 如何判断数据流图的分解层次是否已经足够(即“加工足够简单”)?
3. 数据流图与用例图在描述系统需求时,侧重点有何不同?它们之间如何互补?
掌握数据流图的设计与实现,是迈向专业软件工程师的第一步。它训练了结构化、逻辑化的思维方式,是后续学习软件设计模式、系统架构等高级主题的必备基础。