简介这是一份完整的PDF教程面向软件工程课程学习者及系统分析设计人员详细讲解如何利用Visio 2007绘制网上书店系统的数据流图。教程以Gane-Sarson数据流图为核心严格遵循结构化分析方法中“自顶向下、逐层细化”的原则依次绘制顶层、中层、底层三层数据流图。从游客、会员、管理员三类外部实体入手逐步分解出用户注册、订单信息查询、书籍信息查询、订购图书、订单信息管理、图书信息管理等主要加工并给出订购图书与订单信息查询模块的底层数据流图示例清晰展现数据在各模块间的流转关系。文档后半部分逐步演示了绘制图元、编辑图元文字、连接数据流、调整整体布局四个关键步骤同时说明了自动连线、对齐与分布等实用技巧使读者能够举一反三独立完成类似系统数据流图的建模。压缩包内仅含1个PDF文件大小约857KB内容紧凑、示例完整便于边学边练。目前已有5320人学习使用尤其适合课程设计、毕设文档撰写及需要快速上手Visio绘图的开发人员。1. 网上书店系统的数据流图用Visio画出来到底解决了什么当你要给一个网上书店系统做需求分析第一件该落地的不是页面原型而是一张数据流图DFD。Visio里的“数据流图”模板画的是顾客下单、管理员维护库存这条线路上数据从哪里来、经过哪些加工、存储在哪儿、最终变成什么形态。它不画业务的时间顺序也不画代码结构只画数据在一个系统内外流动和变换的逻辑是结构化分析方法里最常用的表达工具。这篇笔记适合两类人一类是软件工程课程作业里要交“网上书店系统数据流图”的学生另一类是需求评审前需要跟开发团队对齐系统边界的产品经理或架构师。你会从顶层上下文图开始一路拆到0层图再把导出PDF、嵌入需求文档这些收尾动作的坑都补上最后拿到一份能经得起评审追问的图。2. 画图前先建模网上书店系统的上下文分解与Visio模板准备数据流图画崩通常不是Visio操作的问题而是建模没建好。这一章先解决两件事第一把网上书店的需求翻译成DFD四要素第二把Visio的模板和环境准备好然后画出第一张图——顶层上下文图。这两步做完后续0层图的拆分就有了地基。2.1 把网上书店需求转成DFD四要素外部实体、加工、数据存储、数据流网上书店系统的需求用一句话概括顾客注册登录、浏览图书、下单购买管理员维护图书与库存。要把这句话变成数据流图先做的是把它拆进四个要素里而不是急着拖图形。外部实体是系统的数据来源和去向画在系统边界之外。网上书店最核心的外部实体有两个顾客和管理员。顾客既是数据起点提交登录请求、查询条件、订单信息也是数据终点接收查询结果、订单确认管理员向系统注入图书维护指令从系统接收库存预警和订单汇总。如果你要把支付环节讲透可以把支付网关也画成外部实体这取决于系统边界划在哪里。加工是系统真正“干事情”的地方用圆角矩形表示。网上书店可以拆成四组核心加工用户管理注册与登录、图书查询、订单管理、库存管理。注意加工表示的是逻辑功能而不是物理模块在Visio里画“订单管理”不代表某个代码类或服务它是逻辑上独立的变换组。后面做0层图拆分时加工会继续往下拆但外部实体和数据存储不会新增。数据存储表示静止的数据集合用开口矩形表示。网上书店至少需要四类存储用户信息D1、图书信息D2、订单信息D3、库存信息D4。这里委实值得强调数据存储不等于数据库表更不是ER图里的实体。DFD里的存储只是“数据停留的地方”你只需要标出名称和编号不需要列字段更不需要标主键。数据流是带箭头的连线传递的是数据形态而非控制信号。命名必须是“名词”或“动词名词”例如“登录请求”“订单确认结果”。这条规则看似简单但实际评审里见过大量图把箭头标成“订单号”这种过碎的词或者标成“验证”这种缺宾语的词读者要靠猜才能还原含义。下面这张表是四要素与网上书店系统的映射关系画图时可以直接对照。DFD要素Visio形状网上书店示例命名规则外部实体矩形顾客、管理员、支付网关名词加工圆角矩形用户管理、图书查询、订单管理、库存管理动词名词数据存储开口矩形用户信息D1、图书信息D2、订单信息D3、库存信息D4数据集合名编号数据流箭头连线登录请求、查询条件、支付结果动词名词或名词有一个容易被忽略的规则外部实体的数据流不能直接连到数据存储。如果你画了“顾客→订单信息D3”这条线等于说顾客可以绕过加工直接读写存储这违背DFD的基本约束。实体只能通过加工访问存储这条规则在0层图里需要反复检查第一次画的人很容易犯。2.2 选对Visio数据流图模板版本差异、形状来源与两个必关选项在Visio里画数据流图不建议从空白绘图页开始。Visio 2013及以上版本在“新建”搜索框输入“数据流图”会匹配到“数据流图”模板选中后左侧模具会加载一组“数据流图形状”里面自带外部实体、加工、数据存储、数据流等形状且连线自带连接点吸附不需要手工对齐箭头。模板入口因版本略有差别。Visio 2013和2016版是“文件→新建→在搜索框输入数据流图”Visio 2019、2021以及Visio Plan 2订阅版是“文件→新建→类别→软件和数据库→数据流图”。如果你还在用Visio 2010模板里没有DFD专用形状需要拿基本流程图硬改强烈不建议你会在形状语义、编号、连线上吃大亏。关于Visio安装包和版本匹配经常有人问“Visio和Office版本要一样吗”。Visio可以单独安装不要求与Office保持同一大版本但如果你打算把可编辑的Visio对象直接嵌入Word版本差异太大会出现对象无法编辑的兼容问题。我的做法是文档交付以图片或PDF为主把Visio工程文件.vsdx作为源文件单独归档这样无论Office版本怎么变图面本身不受影响。模板加载后建议关掉两个默认选项。第一“视图→自动连接”不关的话拖动形状靠近另一个形状时Visio会自动吸附DFD多连线场景下经常连错连接点。第二“开始→排列→自动对齐”在精细调整阶段这个功能会把存储和加工强制拉成奇怪的位置关系。我一般保留“视图→连接点”的显示让每个连接点露出来画图时更可控。还有一个实操细节DFD形状默认填充色和字号比较粗糙导出PDF后容易发虚。我通常把加工形状的填充改成浅蓝或浅灰字号设为微软雅黑11pt外部实体用白色填充加1pt黑色边框。颜色统一后就不再用同色去区分加工和存储DFD里语义由形状决定不由颜色决定。提示如果Office版本和Visio版本差异过大别在嵌入对象上硬耗直接导出一张高清图嵌入Word效率最高。2.3 先画顶层上下文图把“网上书店系统”定成一个黑盒顶层图也叫上下文图是整个数据流图体系的第一张图。它把网上书店整个系统画成一个加工外部实体围绕四周数据流直接进出这个“黑盒”。这张图的唯一目的就是定边界哪些数据属于系统内部逻辑哪些是来自外部的输入和输出。你不在这一层画任何内部细节。Visio里画顶层图的步骤很直接。先拖入一个加工形状命名“网上书店系统”放在画布中央再拖入外部实体“顾客”“管理员”分别放左右两侧如果有支付网关放在下方。然后连线顾客到系统的数据流命名“登录请求”“查询条件”“订单信息”系统到顾客的数据流命名“查询结果”“订单确认”管理员到系统是“图书维护指令”“库存调整通知”系统到管理员是“库存预警”“订单汇总报表”。参数设置上加工形状填充浅蓝字号12pt加粗边框1.5pt外部实体填充白色字号11pt不加粗连线箭头用实心三角样式线宽1pt。在Visio里设置箭头的方法是选中连线右键“设置形状格式”在“行尾箭头”里选实心三角。顶层图最典型的问题是画太细。有人把“用户注册”作为加工直接画在框里有人把“验证密码”这种数据流从外部实体拉出来——这些都是0层图甚至1层图才出现的内容。顶层图的标准是极简外部实体不超过4个数据流不超过10条。超了先思考是不是系统边界划得太小或者把太多外部依赖拉进了图里。3. 用Visio把顶层图拆成0层图四个核心加工、命名规则与编号体系顶层图画完下一步是把“网上书店系统”这个黑盒打开拆出0层图。0层图是数据流图的枢纽评审时大家盯得最久的就是这一层第一次画图的人容易在这里把逻辑画乱。这一章讲清楚怎么拆加工、怎么给数据流命名、怎么在Visio里落地以及什么时候该继续拆1层图。3.1 从黑盒拆出四个核心加工内聚优先的拆分标准从顶层图拆0层图核心工作是决定把系统拆成几个加工。网上书店系统的拆法很多但最稳妥的是四加工方案用户管理、图书查询、订单管理、库存管理。为什么是四个而不是三个或五个三个加工颗粒太粗。比如把图书查询并进订单管理顾客选书和下单的数据流混在一个加工里后面画1层图又要强行拆开反而更费劲。五个加工则容易把支付处理单独拉出来——表面上符合业务直觉但支付处理本质上是订单管理的一部分独立成加工后订单数据流会被拆得支离破碎。四个加工的划分标准是“内聚”每个加工内部处理的数据变换高度相关加工之间的数据流尽可能少。用户管理读写用户信息D1图书查询只读图书信息D2不产生写操作订单管理同时读写订单信息D3还要读图书信息D2和库存信息D4库存管理维护库存信息D4。加工之间只传递必要的数据流比如“合法用户凭证”“已选图书清单”“扣减库存结果”。0层图要用图例说明编号规则。顶层图的单个加工不编号0层图的四个加工编号为1用户管理、2图书查询、3订单管理、4库存管理第1层图继续按父编号展开比如订单管理下属子加工编号3.1、3.2、3.3。编号是整张DFD的对齐工具评审时专家会直接按编号去对应父子图这里要做好。3.2 数据流命名规范动词加名词让箭头别变成玄学数据流命名是DFD评审里最先被挑毛病的地方。命名合格的标准只有一个不看图只读箭头上所有标签就能还原出系统处理的数据路径。做不到这一点就说明命名里有玄学成分。常见的错误命名有三种。第一种是只写名词不写动词比如箭头标“订单”。这个标签没说明数据流在流动时的状态订单可以是草稿、已提交、已支付看图的人会对这个箭头到底传的是什么产生分歧。改成“订单提交信息”或“支付成功通知”语义立刻变清晰。第二种是动词太宽泛比如“数据”“信息”。这两个词出现在DFD里等于没写任何箭头上流动的都是数据或信息你需要告诉读者这一条具体是什么数据。一个可落地的做法把自己想象成加工环节问一句“我接到了什么、要往哪里传”答案就是这条箭头的标签。第三种是同一语义在不同箭头上用了不同叫法。比如某条线上叫“用户信息”另一条线上叫“客户资料”这会让存储校验变得困难。网上书店系统里我建议把数据流命名表做成一页Excel包含数据流名称、来源加工、去向加工、承载内容四列画图时跟着表走。一个30条左右数据流的系统这张表值得花一小时维护。3.3 在Visio里从顶层图改造出0层图操作步骤与参数从顶层图到0层图不需要重画直接在顶层图文件里改造即可。我的操作步骤是步骤1复制顶层图页面。页面标签右键→“插入页”→“复制顶层图页”把新页面命名为“0层图-网上书店系统”。 步骤2删除中央的“网上书店系统”加工形状但保留全部外部实体和数据流。外部实体在父子图里必须一致不能少也不能改名。 步骤3拖入四个加工形状按业务流转方向从左到右排列用户管理在左侧图书查询在中间订单管理在右侧偏下库存管理在底部。 步骤4把顶层图原有数据流重新连接到对应加工。顶层图里“顾客→系统”的查询条件现在改为“顾客→图书查询”“顾客→系统”的订单信息改为“顾客→订单管理”。 步骤5拖入D1到D4四个数据存储然后补存储数据流。比如“订单管理→订单信息D3”表示写入“订单信息D3→订单管理”表示读取。 步骤6全选所有形状打开“位置”面板设置水平间距和垂直间距一致再检查连线是否有连接点吸附错误。这一步最花时间的是连接点。如果两个加工之间的数据流是双向的建议画一条直线配双向箭头而不是画两条平行线。两条线在PDF导出或Word缩小显示时容易粘在一起看起来像一条粗线评审体验很差。加工形状重新排布后原顶层图的数据流箭头方向不会自动适配。每改一次连接都要手动确认方向。Visio里查看方向最直接的办法选中连线看起点和终点的连接点颜色是否和形状边框一致。不一致就右键连线选“反向端点”。3.4 该不该继续拆1层图数据流条数与加工复杂度两个信号拆完0层图是否每个加工都要往下拆1层图不是。拆分标准只有一个加工内部是否存在多个逻辑上独立的子变换。如果一个加工内部只是“读存储→校验→输出”一步能说完就不用拆如果它需要三条以上数据流参与多步变换就得拆。拿网上书店系统举例。图书查询加工通常不需要拆1层图它读图书信息D2按条件过滤输出结果没有多阶段变换。但订单管理加工一定要拆1层图创建订单、支付、发货、取消是四个独立逻辑如果不拆0层图上订单管理一个圆角矩形要接八条以上数据流图面会变成一团乱麻。一个比较容易执行的判断方法是“数据流计数”统计出入某个加工的数据流数量。超过6条这个加工一般就该拆1层图了。人的视觉能轻松追踪的并行数据路径在5到6条之间超过后读者就会开始漏看箭头。这一条规则比任何抽象标准都更可操作。拆分1层图时外部实体不出现在子图里除非子图确实需要和外部实体直接交互。订单管理的1层图只需要三个加工3.1创建订单、3.2支付处理、3.3发货管理再加上订单信息D3和库存信息D4两个存储。这样一张子图的数据流数量就能控制在5条以内。4. 数据流图Visio绘制的避坑排查网上书店系统5个高频翻车点这一章把实际评审和交付现场见过的翻车情况整理成5条避坑记录按“现象→原因→解决”展开。0层图画完后这5条是复查时的重点。踩过一遍之后你会明白大部分问题其实不是手滑而是对DFD语义或Visio行为理解有偏差。4.1 箭头方向画反与存储画成数据库表两个DFD语义错误先说箭头方向。现象0层图里“图书查询结果”这条线方向画反顾客在左、加工在右连线却从加工指向顾客看起来像是把结果传回了系统。原因Visio连线方向完全由“从哪个形状开始拖、到哪个形状松开”决定很多人先放加工再拖外部实体方向就反了。解决选中错误连线在“开始→排列”区域选“反向”或者右键连线选“反向端点”。修复后用一条规则自查外部实体出来的箭头只能指向加工这是输入加工指向外部实体的箭头才是输出加工连到存储是写存储连到加工是读。第二种是数据存储画成数据库表。现象订单信息D3被画成了带字段列表的表格旁边标了主键。原因把数据库ER图的习惯带进了DFD。DFD里的存储代表数据集合停留的位置不描述表结构字段和主键是物理设计阶段的事。解决把存储形状改回开口矩形只标“订单信息D3”字段信息另画ER图不要混在同一张DFD里。如果你把字段画上去评审第一个问题就是“为什么订单表没有价格字段”你会在错误的方向上解释半天。4.2 连线粘连与编号对不上两个Visio操作层的高频坑先说连线乱跳。现象移动一个数据存储后多条数据流自动跳到相邻形状的连接点上图面瞬间乱成一团。原因Visio默认开启自动吸附和自动连接移动形状时会重算连接关系把最近的连接点当作目标。解决在“视图→视觉帮助”里取消“自动连接”再选中所有连线右键“格式→设置连接点”把连接方式从自动吸附改为固定连接点。如果仍然跳按住Shift键再移动形状可临时禁用吸附。大幅移动之前先把连接点全部固定是治本的办法。第二个坑是加工编号对不上。现象1层图里出现3.1创建订单、3.2支付处理这些编号但0层图里的订单管理编号写的是2父子编号完全对不上。原因复制页面或拖动加工后忘了同步编号Visio不会自动维护DFD编号它只是绘图工具。解决给每个加工新增自定义形状数据“编号”在“开发工具→形状数据”窗口录入。检查时用CtrlF查找编号按顺序过一遍。更稳的做法是在Excel里维护编号清单父图号、子图号、加工名逐一对应画图时对照清单填。编号不出错0层图和1层图的对应关系就不会乱。4.3 PDF导出中文乱码交付前最容易忽视的一个设置现象Visio里中文标签完全正常导出PDF后部分中文变成方块打印出来也是乱码。原因Visio导出PDF时按字体子集嵌入字库如果当前文档使用的字体在系统里没有完整字库或者Visio设置里没开“嵌入字体”PDF阅读器就会用替代字体渲染中文出现乱码。解决文件→选项→高级→保存区勾选“将字体嵌入文件”。如果嵌入后文件过大不要纠结体积直接在Word里用300 DPI的PNG替代PDF。另外一个习惯画DFD时统一用微软雅黑或宋体不要用太冷门的字体导出最稳。注意Visio导出PDF前先确认所有页面命名没有重名否则生成的PDF书签会混乱评审翻页时找不到对应层级。5. 一致性校验与可读性检查让网上书店数据流图经得起评审图画完不等于能交付。评审专家拿到0层图先做三个一致性校验再看排版能不能在30秒内读懂。这一章给出一套可复现的检查方法和排版参数让你在提交前把问题挡在评审之前而不是在评审现场吃后悔药。5.1 DFD三大校验平衡性、守恒性与编号对应加一个VBA检查宏评审专家看DFD最先做的是平衡性校验父图的输入输出数据流必须与子图完全一致。以网上书店系统为例顶层图里有“顾客→网上书店系统”的登录请求0层图里这条登录请求必须进入1用户管理加工并且从用户管理加工必须有登录结果流出。如果顶层图读进两条数据流、子图只画出一条流出就说明你吞掉了数据。这里最容易出错的地方是支付回执顶层图画了支付网关0层图却忘了画支付结果回传平衡性会直接不通过。守恒性校验看数据字典。每条数据流标注的数据项必须在来源加工中产生、在去向加工中被使用。网上书店系统里如果“订单信息”这条数据流直接来自顾客实体但顾客实体本身不掌握图书和单价那么这条线就违背了守恒。检验办法是打开数据流字典逐条对着0层图走一遍。编号对应校验看父子编号能不能追到根。0层图四个加工编号1、2、3、41层图只能对0层图的某个加工继续展开比如3订单管理的子加工编号3.1、3.2、3.3。编号跳跃和重复都是评审硬伤。Visio里可以写一个VBA宏来自动检查编号重复。代码块如下Sub CheckDFDNumbering() Dim shp As Shape Dim cell As Cell Dim numbers As Object Set numbers CreateObject(Scripting.Dictionary) For Each shp In ActivePage.Shapes On Error Resume Next Set cell shp.CellsU(Prop.Number) On Error GoTo 0 If Not cell Is Nothing Then Dim val As String val cell.ResultStr() If numbers.Exists(val) Then Debug.Print 重复编号: val Else numbers.Add val, shp.Name End If End If Next shp End Sub这段代码的作用是遍历当前页所有形状读取名为“Prop.Number”的自定义属性检查是否有重复编号。要让它正常运行你需要先在“开发工具→形状数据”里给每个加工形状添加名为“Number”的自定义属性并填入编号。宏的运行入口是“开发工具→宏→选择CheckDFDNumbering→运行”结果会打印在立即窗口。这个宏只检查当前页跨页编号检查需要再加一个遍历所有页的循环。有了它编号重复这种低级错误基本能挡住。5.2 用Visio自带的“设计检查”排查断线、重叠和幽灵连接点Visio有一个容易被忽略的“设计检查”功能路径是“审阅→设计检查”。它能列出当前页的未连接形状、重叠形状、连接点外露等问题。DFD里最值得关注的两类报告未连接形状和连接点不同步。未连接形状报告会列出所有没有连线的加工或存储。数据流图里的加工必须有至少一条输入流和一条输出流否则这个加工就是死逻辑说明你拆0层图时留了空壳。存储可以只连一条流比如库存信息D4只被库存管理写入、被订单管理读取这没问题。但如果一个存储形状没有任何连线它就是多余的。连接点不同步报告针对手工拖过的形状。大幅移动形状后Visio有时会留下一个“幽灵连接点”在原位置导出PDF时呈现为独立的小方块。解决方法是选中该形状在“视图→连接点”里逐个检查把多余的连接点删除。手动检查还有一个笨但有效的办法把图缩放到50%看整体放大到100%看细节。看起来像多条线交叠的位置用Ctrl加滚轮放大到200%确认连接点是否在同一位置。多个数据流并存于同一路径时建议错开端点不要让所有箭头从同一个连接点进出加工。这是评审时“图面拥挤”最常见的来源。5.3 排版、图例与标注参数一张图30秒能读完的落地标准评审一张DFD看的是能否在30秒内说出主干流程。网上书店0层图的排版我按下面这套参数执行排版项参数建议说明画布方向A3横向加工数量不超过七个时够用超过用A2横向同层间距40到50像素同一层级加工之间均匀排布跨层间距60到80像素不同层级加工之间拉开层次线宽数据流1pt关键路径可单独用2pt但全图只允许一处加粗配色加工一种底色存储另一种全图不超过三种颜色字号11pt微软雅黑加工名和数据流标签统一在0层图右下角加一个图例框外部实体、加工、数据存储、数据流四种形状各画一个样例下面标注名称和编号。图例不占地方但对第一次读这张图的人帮助很大尤其是对方要拿PDF跟开发团队对齐时。页面标题栏务必写清楚绘制人、绘制日期、版本号。数据流图在项目迭代里会被反复修改没有版本号的图一个月后你自己都分辨不出哪版是新的。我见过为了找“最新版的数据流图”翻了三个文件夹最后还是猜错的情况一行标题能省掉大量沟通成本。6. 导出PDF嵌入Word这个数据流图的交付动作与版本管理技巧最后一步是把图交出去这里有两个设置和两个习惯决定了这份图在项目里能不能真正被人用起来而不是画完就沉底。6.1 导出PDF之前先改两个地方Visio里直接“文件→导出→创建PDF”很容易裁边或丢字体。我每次导出前先做两件事第一“文件→页面设置→页面尺寸”设为A3横向缩放比例保持100%第二“文件→选项→高级→保存区”勾选“将字体嵌入文件”。这两个设置不搞定导出的PDF要么边上被裁掉一块要么中文字体被替换成方块。导出时文档类型选“标准”线上评审用这个足够。6.2 嵌入Word的三种方式和“只有转换”的应对把数据流图放进需求文档按使用场景选三种方式。第一种直接把Visio对象嵌入Word在“插入→对象→从文件创建”里选择vsdx文件双击可以回Visio编辑。但如果右键对象只能看到“转换”而看不到“编辑”说明Visio和Word版本不兼容或者当前机器没装对应版本的Visio。这时候不要硬调版本改成第二种方式。第二种导出300 DPI的PNG后插入Word这是兼容性最高、文档体积和清晰度最平衡的方案缺点只是不能回源编辑。第三种PDF只作为整体交付件Word正文插入PNG并注明“源文件网上书店系统数据流图.vsdx”。三种方式本质上对应三种协作场景内部编辑、文档归档、外部评审。6.3 版本编号习惯让图在迭代里活下来数据流图在项目里活下来的关键是版本。我习惯把文件名写成“网上书店系统数据流图_v1.2_20250114.vsdx”页面标题栏同步更新版本号和日期。交付PDF之前三样东西必须归档vsdx源文件、导出的PDF、数据流字典表数据流名称、来源、去向、承载内容缺一个都不算交付完成。这个习惯救过我很多次有一次评审改了三轮开发最后拿着v1.0的图对着代码清数我靠版本号让讨论回到了正轨。希望帮到你。本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?