
简介这份PDF面向软件工程初学者与需要掌握结构化需求分析方法的开发者以小型网上书店系统为案例讲解如何用Visio 2007绘制Gane-Sarson数据流图。内容围绕“自顶向下、逐层分析”的思路展开完整呈现顶层、中层与底层三层数据流图的推导过程并细化到用户注册、订单信息查询、书籍信息查询、订购图书、订单信息管理和图书信息管理六个加工模块同时给出图元绘制、文字编辑、连线与布局调整的完整操作路径。资源包为1个PDF文件约857KB轻量便携适合课堂练习、课程设计或自学时对照参考。目前已有5319人学习读者可借此理解外部用户与数据源点终点的识别方法、数据存储的划分方式以及如何将需求分析结果转化为规范的数据流图为后续系统设计与编码打下基础。1. 从一份 PDF 说起Visio 画网上书店数据流图到底交付了什么很多人第一次接触软件工程课程设计卡的不是代码而是需求分析阶段那张图。老师要求画网上书店系统的数据流图自己打开 Visio 却不知道从哪下手模板选哪个、图元怎么连、三层结构怎么拆。这份《利用 Visio 绘制网上书店系统的数据流图.pdf》就是冲着这个场景来的它把一个小型网上书店系统当作案例完整走了一遍从顶层到中层再到“订购图书”“订单信息查询”两张底层图的绘制流程工具锁定 Visio 2007 的 Gane-Sarson 数据流模型图模板。它解决的不是“Visio 怎么装”这种问题而是“结构化需求分析方法怎么落到一张图上”。适合正在做课程设计、毕设开题、或者需要补软件工程文档的从业者。你拿到的不只是一张图而是一套可以套用到图书借阅、教务管理、外卖下单等任何信息管理类系统的画图方法论。关键词就三个Visio、数据流图、网上书店系统下面拆开讲。2. Gane-Sarson 符号体系与三层数据流图的拆解逻辑2.1 为什么选 Gane-Sarson 而不是 Yourdon/DeMarcoVisio 的“数据流模型图”模板默认给的是 Gane-Sarson 符号集它和另一套常见的 Yourdon/DeMarco 符号最大的区别在于加工框的画法。Gane-Sarson 用圆角矩形表示加工Yourdon 用圆形Gane-Sarson 的外部实体用矩形数据存储用开口矩形数据流用带箭头的线。这套符号在 Visio 2007 里是开箱即用的拖出来就能用不需要自己画形状。选它的实际理由很直接Visio 的模具里已经预置了这四种基本符号你打开“软件和数据库”→“数据流模型图”就能看到加工、数据流、数据存储、外部实体四个母版。如果强行用 Yourdon 符号得自己改形状或者找第三方模具对赶作业的人来说纯属给自己加戏。Gane-Sarson 的另一个好处是加工框是圆角矩形写文字比圆形框舒服得多尤其是加工名比较长的时候。2.2 顶层图只做一件事圈定外部实体顶层数据流图也叫上下文图它的核心任务不是描述系统内部怎么运转而是回答“谁跟这个系统打交道”。网上书店系统的外部实体就三个游客、会员、管理员。游客能注册注册完变成会员会员能订购图书、查订单、查书籍管理员管图书信息和订单信息。画顶层图的时候中间放一个加工框代表整个系统三个外部实体分布在周围用数据流连线标出它们和系统之间交换的数据。比如游客到系统之间是“注册信息”系统到会员之间是“订单确认”管理员到系统之间是“图书信息维护指令”。这一步最容易犯的错是把内部模块也画进来顶层图里不应该出现“用户注册”这种加工那是中层图的事。2.3 中层图把系统拆成六个加工和三张表中层数据流图是对顶层的第一次细化。网上书店系统在这里被拆成六个加工用户注册、订单信息查询、书籍信息查询、订购图书、订单信息管理、图书信息管理。同时引入三个数据存储会员信息记录、图书信息记录、订单信息记录。拆分的依据是功能模块的独立性。用户注册只跟会员信息记录打交道订购图书要同时读写图书信息记录和订单信息记录订单信息管理主要操作订单信息记录。每个加工至少有一条输入流和一条输出流数据存储之间不直接连线必须经过加工。这一步的常见翻车点是数据存储只进不出或者只出不进比如会员信息记录只有注册时写入没有查询时读出那这个存储就是死水评审时会被挑出来。2.4 底层图细化到“订购图书”和“订单信息查询”中层图里的六个加工每一个都可以再往下拆一层。PDF 里给了两张底层图作为示例订购图书和订单信息查询。订购图书的底层图会进一步区分“选择图书”“确认库存”“生成订单”“更新库存”这些子加工订单信息查询则会拆出“输入查询条件”“匹配订单记录”“返回查询结果”。底层图不是必须画满六张课程设计里通常要求至少画两张选功能逻辑最清晰的两个模块。订购图书和订单信息查询是典型的选择因为一个涉及写操作下单扣库存一个涉及读操作查订单能覆盖两种典型的数据处理模式。画底层图的时候要注意父子平衡中层图里订购图书的输入输出流在底层图里必须作为边界流出现不能凭空多出来或者少掉。3. 用 Visio 2007 从零画一张“订购图书”底层图3.1 模板选择与画布初始化打开 Visio 2007文件→新建→软件和数据库→数据流模型图。右侧模具窗口会出现 Gane-Sarson 的四个母版加工、数据流、数据存储、外部实体。建议先把页面设置为横向 A4 或 A3因为数据流图通常横向展开比较舒服。在“文件→页面设置→页面尺寸”里选“预定义缩放打印纸张”然后选 A3 横向。画布初始化还有一个容易被忽略的步骤打开“视图→网格”和“视图→标尺”。网格能帮你对齐图元标尺能让你在调整布局时有个参照。Visio 2007 默认网格间距是 0.25 英寸如果觉得太密可以在“文件→页面设置→绘图比例”里改。我一般会把网格调到 0.5 英寸画图时对齐更省事。3.2 拖拽图元与文字编辑的实操细节从模具里把加工框拖到画布上双击就能输入文字。这里有一个 Visio 2007 的坑数据存储图元不能直接双击编辑文字。PDF 里明确提到了这一点。解决办法是右键数据存储图元→属性→在“文本”字段里输入名称或者用文本工具工具栏上的“A”图标在数据存储旁边单独加一个文本框。加工框的命名用“动词名词”格式比如“验证会员身份”“生成订单记录”“更新图书库存”。数据存储用名词短语比如“会员信息记录”“订单信息记录”。外部实体用角色名比如“会员”“管理员”。数据流连线上的文字用名词短语表示流动的数据内容比如“订单详情”“库存状态”。3.3 自动连线与手动连线的选择Visio 2007 的自动连线功能在“数据流模型图”模板里默认开启。当你把一个图元拖到另一个图元附近时会出现蓝色的连接箭头点一下就能自动生成连线。自动连线的好处是快坏处是线的走向由 Visio 决定有时候会绕远路或者穿过其他图元。手动连线的方式是从模具里把“数据流”母版拖到画布上然后分别把两端粘到源图元和目标图元上。手动连线可以控制拐点位置适合对布局有要求的情况。我的习惯是先用自动连线快速搭出骨架然后选中连线右键→“曲线连接”或“直角连接”来调整走线风格。数据流图一般用直角连接看起来更规整。3.4 对齐、分布与导出检查画完所有图元和连线后框选全部元素用“形状→对齐形状”做水平居中和垂直居中再用“形状→分布形状”做等间距分布。这一步能让图看起来不那么业余。对齐之后检查每条数据流是否都有明确的起点和终点有没有悬空的线头。导出的时候如果直接复制粘贴到 Word 里发现图片模糊可以在 Visio 里“文件→另存为”→选 EMF 或 PNG 格式。EMF 是矢量格式插入 Word 后放大不糊PNG 要选高分辨率在“另存为”对话框里点“设置”→分辨率选 300 dpi 以上。PDF 里没有提导出这一步但这是实际交作业时一定会遇到的问题。4. 画数据流图时最容易翻车的五个地方4.1 数据流命名用了动词现象连线上写的是“注册”“查询”“订购”这类动词。 原因把数据流当成了加工的动作描述但数据流表示的是流动的数据本身。 解决改成名词短语比如“注册信息”“查询条件”“订单详情”。加工框才用动词短语。4.2 数据存储只有写入没有读出现象会员信息记录只有“用户注册”加工连了一条写入线没有任何加工从它读出数据。 原因画图时只考虑了注册功能忘了登录、查询个人信息这些读操作。 解决每个数据存储至少有一条输入流和一条输出流检查时逐个存储过一遍。4.3 父子图数据流不平衡现象中层图里“订购图书”加工有一条输入流叫“图书编号”底层图里这条流不见了或者多了一条中层图没有的“支付信息”。 原因细化时擅自增减了边界数据流。 解决底层图的边界流必须和中层图对应加工的输入输出流完全一致多一条少一条都是错。4.4 Visio 数据存储图元无法编辑文字现象双击数据存储图元没反应打不了字。 原因Visio 2007 的 Gane-Sarson 数据存储母版默认不支持双击编辑。 解决右键→属性→文本字段输入或者用文本工具单独加文本框。这个坑 PDF 里专门提了但很多人不看文档直接上手就会卡住。4.5 自动连线导致线条交叉混乱现象自动连线生成的线互相交叉图看起来像蜘蛛网。 原因图元摆放位置不合理Visio 自动寻路时只能绕来绕去。 解决先把图元按数据流向从左到右或从上到下排列再重新自动连线或者改用手动连线控制走线。布局调整比连线本身更花时间但值得。5. 从三层图到需求规格说明书的衔接技巧画完数据流图之后它不会孤立存在。课程设计通常还要求写数据字典、画 E-R 图、甚至出状态转换图。数据流图和数据字典是配套的图中每一个数据流名称、每一个数据存储名称都应该在数据字典里有对应的条目定义。比如“订单详情”这条流数据字典里要说明它包含订单编号、图书编号、数量、单价、总价这些数据项。一个实用的检查方法是把数据流图里所有出现过的名词数据流名、数据存储名、外部实体名列成一张表逐个问“这个在数据字典里定义了吗”。没有定义的补上定义不一致的改过来。这一步做完需求规格说明书的数据部分基本就齐了。另外底层数据流图可以直接映射到系统设计阶段的模块结构图。中层图的六个加工天然对应六个功能模块底层图里的子加工对应模块内部的函数或方法。画完图之后如果要做数据库设计三个数据存储会员、图书、订单就是三张核心表的雏形再根据数据字典里的数据项确定字段。我自己的习惯是每次画完数据流图先不急着导出而是把图放大到 200%沿着每条数据流走一遍嘴里念“从哪来、到哪去、经过什么加工、读写什么存储”。念不顺的地方就是逻辑有问题的地方。这个笨办法帮我拦下了不少父子图不平衡和数据存储死水的错误。希望帮到你。本文还有配套的精品资源点击获取