简介一份系统讲解使用Visio绘制数据流程图DFD的教学课件主要面向计算机及相关专业的学生、软件开发初学者以及需要在课程设计或项目中绘制系统流程图的读者。内容以Visio 2003为例从软件的安装环节讲起详细介绍了安装向导中的密钥输入、用户信息填写、许可协议确认、安装类型选择典型、完全、最小、自定义等步骤帮助读者先搭建好绘图环境。随后进入实验操作部分演示如何通过“新建→流程图→数据流图表”打开内置的Gane-Sarson形状栏并利用进程、直接数据、数据存储等图元组合出规范的数据流程图包括调整图元大小位置、双击添加文字、旋转数据存储图元以及添加连接线的方法步骤清晰、可手动跟练。资源只有1个PPT文件大小约2.97MB轻量易得。目前已有66人学习下载适合作为软件工程或系统分析课程的实验辅导材料也可用于自学Visio绘图时参考。1. 用Visio画DFD第一步不是打开软件而是先搞清这套符号是谁的规矩接到需求评审通知对方要求先交一张DFD数据流程图。打开Visio在新建页里翻到“软件和数据库”分类拖出几个形状画完结果评审指着图问你的加工为什么是圆角矩形教材里明明是圆圈数据存储的开口方向又怎么解释——这是很多用Visio画DFD的人第一步就踩的坑。Visio自带的数据流图模板遵循Gane-Sarson符号约定而多数中文教材和论文用的是Yourdon/DeMarco圆框画法两套符号长得像含义却不同。这篇文章就把这件事讲透从模板选型、符号映射到自顶向下分层绘制、命名编号规范再到导出进PPT的完整路径最后给出我在评审现场真正遇到过的避坑记录。适合被要求画图但没系统学过DFD的软件工程师、产品经理和系统分析师。2. 认识Visio里的数据流图模板你的画法和教科书差在哪2.1 DFD四要素与Visio模板的符号映射DFD的核心只有四类元素外部实体External Entity、加工Process、数据存储Data Store和数据流Data Flow。但不同教材的画法并不统一最常见的是Yourdon/DeMarco和Gane-Sarson两套符号体系。Visio自带的“数据流图”模板默认采用Gane-Sarson风格这就是很多人“照着教材画不出来”的根本原因。我建议你打开Visio前先做一次符号对照免得画到一半发现形状对不上。下面是我在项目里常用的对照表DFD要素教科书常见画法Yourdon/DeMarcoVisio“数据流图”模板Gane-Sarson外部实体矩形如“客户”“财务部”矩形通常带阴影或加粗边框加工圆或椭圆圆角矩形数据存储两条平行横线中间写存储名矩形一侧开口开口朝向加工数据流带箭头的直线标注名词性短语带箭头的连接线可在线上直接标名称对照完你会发现两套体系里“外部实体”和“数据流”差别不大真正会翻车的是“加工”和“数据存储”。如果你所在团队要求严格按教材的Yourdon/DeMarco风格输出Visio模板里的圆角矩形和开口矩形就不能直接用。我一般会新建一个“基本流程图”空白绘图然后用“椭圆”形状画加工用“两条直线”表示存储再把画好的形状另存为自定义模具下一张图直接复用。不要在一张大图里混用两套符号评审最忌讳这个。2.2 打开Visio数据流图模板的两种路径用Visio自带模板是最省事的起步方式。不同版本路径略有差异但大致都在同一个地方打开Visio后在新建页左侧或顶部找到“软件和数据库”分类英文版叫Software and Database点进去就能看到“数据流图”模板。如果你用的是Visio 2013或2016这个分类通常显示为“软件和数据库”Visio 365新版里模板搜索框更直观你直接在新建页搜索“数据流图”就能定位。选择模板后Visio会弹出一个空绘图页同时打开左侧“形状”窗格窗格里默认挂载了数据流图模具包含Process、External Entity、Data Store、Data Flow这几个核心形状。这里有一个常见做法不要一上来就拖Process先拖一个External Entity到画布四周定好系统边界再放加工。边界定了内部怎么拆都不会跑偏。顺带回应一个很多新人问的问题Visio不随Office安装包自动附带它是独立产品需要单独部署。安装时尽量选择与你的Office同一版本线Office 2016配Visio 2016、Office 365配Visio 365位宽也要一致64位对64位。混装不同版本线的MSI和Click-to-Run安装方式后面把图嵌入Word或PPT时容易出“对象无法编辑”之类的怪问题这个坑我在第5章详细说。2.3 为什么我不建议直接用模板里的“数据流”箭头Visio模板里有一条“Data Flow”形状本质是带箭头的连接线。很多教程直接把它从模具拖到两个形状之间但你会发现两个现象箭头总是自动吸附到形状的边框上位置不好控制线中间虽然能输入文字但文字块经常跑到十几厘米外怎么拖都拖不回来。这不是你操作不对而是Visio的“粘附”机制在起作用。Visio连接线有两种粘附方式静态粘附端点粘在形状的特定连接点上和动态粘附端点粘在形状边框上形状移动时端点跟着走。DFD图里数据流应当连接到加工或存储的边框位置而不是某个固定的连接点所以默认的动态粘附是够用的。问题在于你拖线时得看到端点出现一个红色方框再松手红色表示已粘附到形状如果显示的是绿色方框说明粘到了连接点形状移动时线会乱跳。这个细节决定了整张图的稳定性值得你每次拖线时多看一眼。至于标签跑偏我一般不用线内文字而是单独拖一个“文本框”放数据流名称再把它和对应的线选中后右键“组合”成一体。这样文字位置完全可控评审时也不会出现“那条线上标的到底是什么流”的尴尬。这个习惯帮我躲过了至少三次图面返工。3. 自顶向下画DFD从上下文图到0层、1层的落地步骤3.1 先画上下文图明确系统边界与外部实体DFD的正确打开方式是自顶向下不是从底层业务细节开始拼。第一步永远画上下文图也叫顶层图。这张图上只有一个加工编号通常是0代表整个系统外部实体画在加工四周它们与系统之间的数据流构成系统边界。你在Visio里操作时External Entity不要放在页面角落而是围绕0号加工均匀分布每一条数据流都代表系统与外部的一次交互。实际操作步骤拖一个Process形状到画布中央命名“XX系统”编号写0。根据用户访谈或需求文档列出所有直接与系统交互的外部角色比如“客户”“银行支付网关”“管理员”分别拖External Entity放四周。用Data Flow连接线把外部实体与0号加工连起来连接方向由外部指向系统表示输入由系统指向外部表示输出。每条连线上写数据流名称如“订单信息”“支付结果”“对账单”。这一步看起来简单但容易犯一个错把不该出现的内部角色画成外部实体。判断标准很简单——在系统范围外、只提供数据或接收结果的角色才是外部实体系统内部再大的子系统也是加工放到下一层去画。3.2 0层图怎么拆按业务功能拆加工、编号1/2/3上下文图确认后进入0层图。0层图把0号加工展开成若干个主要加工编号从1、2、3依次排每个加工对应一个相对独立的业务功能。拆分的依据不是组织架构而是数据流的方向和业务处理逻辑。我一般按“动词驱动”判断先看系统里有哪些核心动词比如下单、校验库存、计算费用、生成对账单。一个动词对应一个或一组加工。如果一个加工里能读出多个动词说明它还需要继续拆。比如“处理订单”这种命名就不合格因为“处理”没有信息量要拆成“校验订单”“核算金额”“更新库存”。在Visio里画0层图时把上下文图的0号加工删掉替换成1、2、3……多个Process形状再补上数据存储。哪些地方需要数据存储当一个加工生成的数据要被另一个加工读取时就必须通过存储中转。常见做法是加工A写入“订单数据”加工B从“订单数据”读取这就在两个加工之间画一个Data Store。注意存储本身不主动发起数据流读写方向一定要标注清楚否则评审会追问“这条流到底是读还是写”。3.3 逐层细化到1层父子图数据流守恒0层图完成后如果某个加工还太复杂就继续画它的子图也就是1层图。子图的编号规则必须跟父加工对应0层里的加工1它的子图内部分别编号1.1、1.2、1.3加工2的子图编号2.1、2.2。这个规则在Visio里没有自动机制全靠人工维护所以你画完子图后第一件事是检查编号层级别让1.1出现在加工2的子图里。父子图之间最核心的约束是数据流守恒父图里进入加工1的每条数据流必须在1号子图的边界上能找到同名数据流父图里由加工1输出的每条数据流也必须在子图中有对应输出。这就像父子之间签了对账协议任何一个流名在两边对不上这张图在评审时基本过不了。我在项目里会做一张简单的核对表画完一层就填一次父图路径父图流名方向进/出子图是否有同名流备注加工1订单信息进有对应1.1的输入加工1订单明细出有对应1.2的输出加工2库存数量进无漏画需补3.4 分层平衡检查一条条箭头人工核对的实操方法分层平衡的检查不靠软件自动完成Visio也没有内置DFD校验器所以必须形成自己的核对习惯。我会把图层放在同一个Visio文件的不同页面上第一页是上下文图第二页是0层图之后每个加工的子图单独一页。画完之后从0层图开始逐一选中每个加工记住它的输入输出流名然后翻到对应子图页对照边界上的流名是否一致。核对方向有两条父图流向子图是正查子图流向父图是反查。反查经常能发现漏网之鱼——子图里多了一条“优惠券信息”的输入但父图加工1根本没有这条流入流。这种情况在真实项目中很常见因为画子图时画着画着就超出了父图边界加了一条新的数据流。处理方式不是简单删掉而是回到父图判断是否确实需要这条流需要就补上不需要就在子图里删掉。记住一条原则父子图是同一件事的两种精度不是两张独立的图所以它们的输入输出必须完全一致。4. 让图面能过评审命名、编号、连线和版式规范4.1 数据流命名的唯一性规则DFD里数据流命名最容易出低级问题但评审最在意。数据流名称必须是名词性短语描述“什么数据”不是“做什么动作”。“客户订单”可以“生成订单”却是一个动作应该放在加工命名里。更隐蔽的问题是同名异义两条不同内容的数据流都叫“订单信息”但一条是从页面表单来的原始订单另一条是经过校验后的订单这两者在数据字典里含义不同会直接导致后续设计数据库字段时对不上。我在实际项目中定的规矩是每一条数据流名称在整个DFD体系里必须唯一且能在数据字典里找到对应条目。如果两条数据流内容确实不同那就细分命名比如“原始订单信息”“已校验订单信息”“订单审核结果”。Visio里双击连接线就能改名称但线内文字排版很差我更推荐用文本框标注并组合。这样做的另一个好处是做分层平衡核对时你可以在Visio“视图”里打开“形状”窗口在“形状数据”里登记每条流的名称后面查询起来方便得多。4.2 加工编号的层级规则加工编号是DFD的坐标系统评审时沟通效率全靠它。顶层图加工编号为00层图加工编号为1、2、31层图加工编号为1.1、1.2如果继续细化2层图的编号就是1.1.1、1.1.2。也就是说子图内的编号总是“父加工编号小数位”。这套规则在任何教材里都成立Visio模板不会帮你自动编号必须手工维护。编号还有一个隐含要求每一层子图必须至少有一个加工不存在“空子图”。另外同一个编号不能出现在系统的不同页面里。我见过最糟的情况是某项目里0层加工3和1层加工3.1的子图编号都是3.1评审手里拿着一张“3.1”的图谁也分不清它属于哪一层。为了避免这种困扰我习惯把页码也写进形状的“名称”属性里比如“P2-1.1”这样打印纸质稿时也能快速定位。4.3 Visio里的版式三件套对齐、分布、自动间距DFD图的评审标准很主观但对齐和间距是客观可以做到的。Visio里每次画完一批形状我都会做三件事选中同一水平线或垂直线上的形状用“开始”菜单里的“排列”功能做“对齐”和“分布”再用“自动间距”让相邻形状的距离一致。这三个操作在Visio 2013、2016和365里都在“排列”区域位置基本没变。做对齐分布时有一个坑Visio默认按“边界框”对齐也就是说如果你同时选中了一个大矩形和一个小矩形两者按边界对齐后视觉上可能并不“居中”。我一般会先把所有形状设置成相同的高度或宽度再对齐。DFD里加工和存储的尺寸本来就应该相近把宽度统一设成1.5英寸、高度设成0.7英寸图面会干净很多。这一步看起来机械但评审现场图面整洁通常能省掉不少解释时间。跨页连接是另一个高频需求。0层图太大时你不可能把所有加工都塞进一页。我会用一个专门的“跨页引用”形状放在页面底部标注“见P3-加工1子图”而不是用一条超长连接线跨页连线。Visio里可以在“开始”菜单的“连接”区域找到Off-page Reference形状拖到页面边缘后双击它可以设置跳转的目标页。虽然它不能让评审自动跳转但至少图面不会出现一条断在半空的箭头。4.4 数据流不加判断分支为什么箭头线上不能写IF很多新手画“订单校验”时会画一条数据流线上写着“订单有效”或“订单无效”甚至直接写“IF 订单有效 THEN”。这是DFD里非常典型的误用。DFD描述的是数据流动不是业务判断逻辑。判断逻辑应该体现在加工内部而不是数据流上。数据流只表示“什么数据在流动”比如“校验结果”“订单状态标识”它是名词性的不能携带条件分支。如果你发现一条数据流需要写条件说明这个加工还没拆干净。常见做法是拆成两个加工“校验订单”和“处理无效订单”它们之间的数据流分别叫“校验通过订单”和“校验失败订单”。这两条流仍然是名词性短语但业务判断已经在加工里完成了。这个区分在评审时特别加分因为评审人员一眼就能看出你对DFD建模原理的理解是否到位。5. 避坑Visio画DFD最容易翻车的五件事5.1 连接线乱吸附形状一拖就变形现象拖拽一个加工形状时好几条数据流连接线跟着扭曲端点跑到奇怪的位置。原因连接线端点粘附到了形状的特定连接点上而不是边框上拖动形状时动态粘附重新计算线就乱了。解决每根连接线拖完之后选中线的端点看显示的是红框还是绿框。红框表示粘在边框上正确绿框表示粘在连接点上右键连接线选择“重置连接点”或直接删除重画。我在项目里养成了“最后统一连线”的习惯所有形状位置排好后再连数据流能少走很多弯路。5.2 数据存储没有开口画成了普通矩形现象评审指着图问“这个存放数据的矩形到底是存储还是外部实体”原因你用了“矩形”形状代替模板里的Data Store而Gane-Sarson存储必须在侧面有开口或竖线标识Yourdon画法也是两条平行横线都不能用普通矩形表示。解决回到模板拖真正的Data Store形状。如果你要自定义模具也要确保存储形状在视觉上有明确标识。存储和外部实体在DFD里角色差异极大画混了等于没画。5.3 Word里嵌入的Visio对象只有“转换”不能编辑现象把Visio图复制到Word后双击图片没有任何编辑反应右键菜单里只有“转换”。原因Visio组件没有正确注册或者Word与Visio的版本体系不一致。常见有两种情况一是只安装了Word没装Visio粘贴进去的是静态对象二是Office和Visio是不同分发渠道一个MSI一个Click-to-Run注册表里COM组件互相找不到。解决这通常不是你的操作问题而是安装环境问题。常见做法是让IT统一安装同版本线、同分发方式的Office和Visio位宽一致修复后重启机器再试。这篇文章不讨论任何激活相关的事纯粹从部署一致性角度提醒你。顺带回应一个高频问题Visio和Office版本要一样吗我的经验是至少版本代数要接近Office 2016配Visio 2013偶尔能用但跨代配合出问题的概率明显升高最好就是同代、同位数、同一分发渠道。5.4 数据流标签飞出去十几厘米现象双击连接线输入“订单信息”后文字块显示在离线段很远的地方甚至跑到画布边缘。原因Visio连接线的文本块默认跟随线的路径和中点但DFD连接线往往有拐弯或端点粘附文本块定位就飘了。解决删除线内文字改用独立文本框写数据流名称然后将文本框和数据流线组合成一体。组合后两者一起移动不会脱节。这个方法牺牲了一点“自动跟随”但换来了绝对可控的排版在这种要交评审件的场景里值得。5.5 父子图流名对不上评审当场质疑现象0层图里加工1有输入流“客户订单”但子图页面上找遍所有箭头都看不到“客户订单”反而多了一条“客户订单草稿”。原因画子图时没有同步核对父图或者子图细化过程中改了数据流名称而父图没有更新。解决没有捷径只能逐层核对。我建议在Visio文件里固定页面顺序页面1上下文图页面2为0层图页面3起为各子图。每画完一层就按第3章的核对表正查反查一遍全程不超过15分钟却能在评审时省下至少半天的解释时间。这条是我真实翻车后总结的那次因为一条“对账单”流名不一致整个评审被打断后来再没犯过同样的错。6. 把DFD搬进PPT三种出图方式与最后的平衡核对动作6.1 三种出图方式怎么选Visio图画完后最终多半要放进PPT汇报或写入设计文档。三种常用方式各有适用场景我按自己日常使用的优先级列出来方式操作路径优点缺点适用场景复制粘贴增强型图元文件Visio里CtrlCPPT里CtrlV粘贴选项选“图片增强型图元文件”矢量缩放不糊粘贴后与Visio数据源脱离改图需回Visio重贴图已定稿、不再频繁修改另存为PNG文件→另存为→PNG按提示设置分辨率文件小透明底PPT里不卡位图放大到头会糊图面复杂或内部评审快速传阅插入Visio对象PPT→插入→对象→从文件创建→选择.vsdx文件双击能在PPT里调Visio编辑改图不用重贴文件体积大接收方必须装有Visio才能编辑跨团队协作对方也装了Visio如果图可能还要改我一般直接用第三种插入对象如果已经验收定稿我会复制成增强型图元文件再右键“转换为形状”做微调。注意PPT里不要用屏幕截图别看Visio界面里很清楚截图进PPT后放到大屏上边线和文字都会糊。6.2 导出前的一张检查清单导出之前花三分钟过一遍这张清单能拦截大部分低级失误。第一每条数据流都有名称没有无名箭头。第二每个加工都有编号且编号层级正确。第三父图和子图的输入输出流名在核对表上一一对应、无遗漏。第四所有外部实体在上下文图和0层图之间保持一致没有在0层图里凭空多出外部实体。第五数据存储有唯一名称且明确标了读写方向。第六图上没有线交叉。Visio里线交叉不可避免时可以用“跳线”功能右键连接线选“格式”把“显示跳线”打开交叉处会自动画一个半圆弧表示两线不相交。这些都是看着小、评审时被无限放大的细节。尤其第一条“无名箭头”我见过太多新手交的DFD一条线从外部实体拉到加工线上什么都没写。评审问这条数据流是什么画图的人说“就是客户信息啊”。那为什么不标没有理由可答。命名标清楚既是图面的专业度也是你自己思路的梳理。6.3 进阶技巧Visio里插入LaTeX公式与字体失真的后悔药DFD本身很少需要公式但Visio图里偶尔要写数据字典或业务规则说明这时候如果用的是Visio 365新版本可以在“插入”菜单里找公式入口新版本也支持LaTeX语法的渲染入口如果用的还是Visio 2013或2016常见做法是插入“Microsoft公式”对象或者先在Word里排好公式再复制粘贴进Visio形状的文本块里。这个操作和使用Word公式的体验基本一致不追求实时渲染的话够用了。另一个保存前的细节是字体。Visio默认字体在另一台电脑上打开时经常变样尤其是中文字体比如宋体在没装该字体的机器上会被替换成别的字体导致整个图的宽度和换行全部重排。后悔药是交付前在Visio里把所有形状文字统一设置为“微软雅黑”或“等线”这类常见字体再把“文件→选项→保存→嵌入字体”打开选择“嵌入所有字符”。虽然文件体积会增加但至少对方打开时不会变成一坨乱字。6.4 我自己的收尾动作打印前再做一次“盲读”最后说一个我坚持了很久的习惯图导出前把Visio页面缩小到整个图都在屏幕里然后不看任何注释从头到尾把每条数据流按“从哪里来到哪里去”读一遍。如果某条流的方向读不通或者某条流停在半空没有任何形状承接那这张图就不该导出。这个方法帮我挡掉过至少两次现场演示翻车。那次我赶通宵画的0层图一条“库存扣减结果”的线终点悬空要不是缩图时多看了一眼第二天就要在演示时现形。DFD这个工具本身不复杂复杂的是你有没有耐心在细节上较真。希望这个习惯也能帮到你让你的下一张DFD在评审桌上站得住。本文还有配套的精品资源点击获取