ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

程序流程图规范指南:符号体系、分层拆分与评审维护

程序流程图规范指南:符号体系、分层拆分与评审维护 1. 先搞清楚流程图规范到底在管什么很多人第一次接触程序流程图规范脑子里浮现的画面通常是——画框框、连线、箭头能看懂就行。我在带过几批新人之后发现真正让流程图产生价值的从来不是画得漂不漂亮而是它能不能在脱离作者本人的情况下被另一个人完整读懂。这就是规范存在的全部理由它约束的不是你的审美而是信息的传递路径。程序流程图本质上是一份用图形语言写出来的逻辑说明书。它把一段代码、一个业务流程、一套判定规则从看不见的思维活动变成看得见的空间结构。规范要处理的事情有三层第一层是符号统一让所有人都用同一套图形表达同一类动作第二层是结构约束让分支、循环、异常出口有固定的落位方式第三层是命名与粒度让图的可读性不随着规模膨胀而崩塌。你要是只把规范当成一份考试答案去背基本用不上。真正吃这套规范的人是三类需要给下游交接逻辑的开发者、需要跟业务方对齐流程的产品和需求人员、以及做代码审查和文档评审的技术负责人。三类人的关注点完全不同前者关心逻辑是否等价于代码中者关心流程是否覆盖了真实业务后者关心这张图能不能作为评审依据。规范的价值就在于让这三类人在同一张图上各取所需而不用反复追问这个菱形是什么意思。我在实际项目里踩过一个坑早期团队没有统一规范同一个人画的判断框有时候代表if有时候代表while有时候甚至代表一个业务上的审批节点。结果图交到测试手里测试照着图写用例漏掉了两个隐藏分支上线后出问题。那次之后我们才把规范真正落地成文档加模板。所以别把这事看轻规范的收益不在画图那一刻而在交接、评审、追溯这三个环节。2. 符号体系与图形语言的选用规则2.1 基本符号的边界在哪流程图的符号体系不算复杂国际上有通用的图形符号标准可以参照国内也有对应的图形符号规范。核心符号就那么几个起止符椭圆形或圆角矩形表示流程的开始和结束处理符矩形表示一个具体动作或计算判断符菱形表示条件分支输入输出符平行四边形表示数据的进出预定义处理符双边竖线的矩形表示调用一个已定义的子过程文档符底边带波浪的图形表示产生或读取文档连接符小圆圈表示跨页或跨区域的连接。规范第一条铁律一个符号只承担一种语义。我见过有人拿矩形既表示处理数据又表示等待外部响应这会让读图的人彻底失去判断依据。你要表达等待就老老实实用带明确文字的处理符或者引入注释你要表达人工操作最好用专门的符号或在文字上标注人工别指望读图人自己猜。判断符是最容易被滥用的。规范要求判断符必须有且只有一个入口、两个或两个以上明确标注的出口每个出口的文字必须是可以判定真假的完整命题。是否有效这种写法就不合格得写成校验通过是和校验通过否。出口数量上二值判断最常见如果出现三个以上分支优先考虑拆成多层判断或者改用分支选择结构别让一个菱形挂五六条线。2.2 那些容易被滥用的符号预定义处理符的误用率特别高。有人把它当成这一段比较复杂我懒得画的万能挡箭牌实际上它的语义非常明确——调用一个在别处已经完整定义的子流程并且这个子流程应该有对应的子图或文档。如果你只是想省略细节正确的做法是拆出独立子图并建立父子引用关系而不是随手一个双边矩形了事。连接符也是重灾区。跨页连接是它的主要用途规范要求同一对连接符必须使用相同且唯一的编号并且成对出现、不重复、不跳号。我审过一张图同一页里出现了三个A读图的时候根本找不到对应关系。后来我们定了个死规矩连接符编号统一用页号-序号的格式比如3-1表示第3页第1个连接点一个小改动排查问题的效率直接翻倍。注释符的使用要有节制。注释用来补充前提条件、业务规则来源、异常处理说明不是用来塞大段解释的。我个人的经验是注释超过两行就该考虑是不是这段逻辑本身需要拆图了。注释连在哪个符号上就只解释哪个符号别跨节点连线那样会让图面变得很乱。2.3 泳道、分区与跨职能表达一旦流程涉及多个角色或多个系统泳道图就派上用场了。规范上要注意泳道划分的维度必须唯一要么按岗位划分要么按系统划分不能混着来。你左边一条泳道是财务部右边一条是订单服务读图的人会不知道你按什么维度在切分。泳道的顺序也有讲究建议按照流程实际流转的方向排列让主要的正向路径尽量从左到右顺流而下回退和异常路径用逆向箭头表示。跨泳道的连线必须明确标注传递的是什么数据或事件只画一条线不标内容等于把最关键的接口信息丢了。注意泳道图里不要出现跨多条泳道的处理符。一个动作如果由多个角色共同完成要么拆成多个动作分别落在各自泳道要么明确指定主责方。这是我审图时最先看的一处也是最常出问题的地方。3. 层级结构与拆分粒度3.1 一张图只讲一件事流程图最容易犯的毛病是一张图讲完整套系统。我见过一张A0纸都画不下的流程图密密麻麻上百个节点作者自己过两周都看不懂。规范的核心原则之一是单图单一职责一张流程图只描述一个流程这个流程应该有明确的输入、明确的输出、明确的触发条件。判断一张图是否超载有个很实用的方法如果图里出现了三个以上互相独立的分支主题或者需要三种以上不同角色参与理解就该考虑拆图了。拆图不是把内容打散而是建立层级——顶层图描述主流程和关键节点每个关键节点对应一张子图描述内部实现。这样读图的人可以先看全局再看局部不用一上来就被细节淹没。3.2 分层编号与父子图对应关系分层之后编号体系必须跟上。我的做法是顶层图编号为0顶层图里的第n个可展开节点对应的子图编号为n。子图里再展开的节点编号为n.m以此类推。这个编号要同时出现在主图的节点文字里和子图的标题上形成双向可追溯。父子图的对应关系还有一条硬性要求父图里的一个节点在子图里必须有唯一对应的入口和唯一对应的出口。也就是说子图不能出现多个入口也不能出现多个没有汇聚的出口。这对应的是结构化程序设计里的单入口单出口原则。违反这条读图人就没法把子图塞回父图里整个层级结构就散了。提示如果你在用工具画图建议给每个节点加一个隐藏属性存放编号导出时通过脚本检查编号唯一性和父子对应关系。手工核对在节点超过三十个之后基本不可靠。3.3 粒度选择的经验判断标准粒度这件事没有绝对标准但有几个可操作的判断依据。第一看这张图的读者是谁。给业务方看的图粒度应该停在业务动作层面不要出现i这种实现细节给开发看的图粒度可以细到关键算法分支但也不建议细到每一行代码那是代码该干的事。第二看这张图的用途。用于评审设计的图粒度要能覆盖所有判定分支和异常出口用于快速沟通的图可以只画主路径加关键异常。第三看维护成本。图画得越细后续需求变更时改起来越痛苦。我的经验值是单张图的节点数量控制在十五到三十个之间比较舒服超过四十个就该考虑拆分了。这里有个反直觉的点过度细化反而降低可读性。因为读者需要在大量细节里自己提炼主干逻辑认知负担比直接看稍微抽象一点的图更高。规范追求的是恰好够用不是越细越好。4. 命名、文字与可读性细节4.1 节点命名的动词原则节点文字是流程图的信息主体规范上要求处理符里的文字必须是动宾结构比如校验订单状态计算应付金额写入日志表而不是订单状态金额计算这种名词短语。名词短语的问题是它不表达动作读图人不知道这个节点到底做了什么是读取、修改还是判断。判断符里的文字必须是完整命题能明确回答是或否。像库存充足可以写成库存充足但更好的写法是库存数量≥下单数量把判定依据量化出来。这一步多花十秒钟能省掉后面无数次口头确认。节点命名还要避免两个极端一个是过于笼统比如处理数据等于没说另一个是过于具体比如用Redis查缓存并设置30秒过期把技术实现细节写死在业务流程图里一旦换技术方案图就过时了。合适的粒度是描述做什么而不是怎么做。4.2 连线标签与条件表达式连线上该不该写字取决于这条线是不是唯一的。顺序流可以不带标签分支流必须带标签。标签文字要和判断符里的命题呼应比如判断符写库存充足那么两条出口分别标注是和否就够了不用重复写库存充足。条件表达式尽量保持形式统一。整个流程里要么都用是/否要么都用通过/不通过别一张图里混着来。涉及数值比较的时候把阈值写清楚别写超过限额而不写限额是多少这种模糊表达在评审时是重点被挑的。还有一种情况值得单独说多条分支合并回主干时如果合并点有隐含的前置条件比如无论哪条分支到这里都必须已经完成数据落库建议加一个注释说明否则读图人会怀疑是不是漏了步骤。4.3 排版细节与视觉一致性排版看起来是小事实际上直接影响理解速度。规范上建议主干路径尽量水平或垂直排列避免斜线连线尽量不交叉实在避不开用跨越符号同一层级的节点大小保持一致线条粗细和箭头样式全图统一。方向的习惯也要统一。绝大多数人的阅读习惯是从上到下、从左到右所以主流程建议纵向排列或者横向排列选定一种之后全图贯彻。我见过上下左右同时延伸的图读者的视线要来回跳跃非常累。颜色使用要克制。规范上颜色只能用来做辅助区分不能承载关键信息因为打印成黑白或者色觉障碍的读者会丢失这部分信息。用颜色标记异常路径是可以的但异常路径本身必须还有文字或线型上的标识颜色只是锦上添花。5. 实操从需求到定稿的完整绘制流程5.1 先列步骤清单再上工具我强烈建议的流程是先在纸上或者纯文本里把步骤清单列出来再打开画图工具。直接上手拖框的人十有八九会画到一半发现逻辑不通然后反复调整位置浪费大量时间。列清单的时候按触发条件—主路径—分支—异常—结束的顺序走一遍。每写一步就问自己三个问题这一步的输入是什么输出是什么失败的时候往哪走把这三个问题的答案写全图的基本骨架就有了。这一步不需要考虑图形纯文字描述就行速度快而且改起来方便。清单完成后先做一次逻辑自检主路径能不能从头走到尾不断链每个判断分支是不是都有明确的去向有没有哪个节点是走不到的死节点这三点检查完再动手画返工率能降一大半。5.2 工具选型与配置要点工具选型这块我给一个务实的建议别纠结太久看你的实际场景。工具类型适用场景注意事项在线绘图工具团队协作、快速出图注意导出格式优先选可导出矢量图的桌面绘图软件复杂图形、精确排版源文件要纳入版本管理文本描述生成工具需要与代码同源维护语法要提前约定避免各写各的代码内嵌绘图技术文档、README渲染环境要统一避免显示不一致不管用哪种工具有两条配置必须做。第一样式模板统一把符号尺寸、字体、线宽、配色固化成模板文件所有人从模板开始画从源头上保证一致性。第二源文件纳入版本管理。不管源文件是XML、JSON还是二进制格式都要进仓库这样变更历史可以追溯谁改的、改了什么一目了然。文本描述生成这类工具值得单独提一句。它的优势是可以用代码评审的方式评审流程图diff清晰适合逻辑复杂的场景。但它对排版的控制力比较弱如果图需要对外展示可能还得手工调整。我的做法是逻辑评审用文本描述对外交付再导出手工排版版本两者并存。5.3 定稿前的自查清单图基本画完之后别急着发出去过一遍下面这份清单。这份清单是我们团队实际在用、经过多次修订的版本。每个判断符的出口是否都标注了明确条件且条件之间互斥、合起来穷尽所有情况是否存在没有出口的节点除结束符或没有入口的节点除起始符是否存在死循环或者循环缺少明确的终止条件子图是否满足单入口单出口父子图编号是否一一对应节点命名是否统一为动宾结构有无名词短语混入连线标签是否与判断条件呼应阈值是否量化泳道划分维度是否唯一跨泳道的数据传递是否标注是否存在无法到达的孤立节点全图符号样式、字体、线型是否统一版本号和变更记录是否已填写这份清单过一遍大概五到十分钟但能拦下绝大多数低级错误。我个人的经验是最容易漏的是条件不穷尽和孤立节点前者会导致实现时出现未定义行为后者通常是复制粘贴留下的垃圾。6. 评审、版本管理与持续维护6.1 评审关注点流程图评审不是走过场要有明确的检查项。第一轮看逻辑完整性也就是上面那份清单的核心部分。第二轮看逻辑正确性这一轮必须有真正了解业务的人参与因为图形再规范逻辑本身错了也没用。第三轮看实现可行性由开发判断图里描述的分支在技术层面是否都能落地。评审的时候有个技巧让评审人照着图口述一遍流程。如果他能顺畅地说下来说明图的表达没问题如果他在某个节点卡住了或者理解跟你的原意不一致那个位置就是需要改的地方。这个方法比逐条对着清单检查更高效也更容易发现隐性问题。评审意见要落到图上不能只停留在口头。我见过评审会上大家讨论得很热烈会后谁也没改图下次评审同样的问题再吵一遍。规范要求评审产生的每条修改意见都要有对应的处理结果要么改图要么记录不修改的理由全部留下痕迹。6.2 版本与变更记录流程图是要随需求演进的所以版本管理必须做。规范上建议每张图都维护一个变更记录表至少包含版本号、修改日期、修改人、修改内容摘要。版本号建议用主版本加次版本的格式结构发生根本性变化升主版本局部调整升次版本。变更记录的粒度不用太细调整库存判断分支增加预售场景这种程度就够了。但有一条必须坚持任何修改都不能只改图不留记录。因为下游可能已经基于旧版本做了设计改了不通知会造成上下游不一致。源文件进仓库之后我建议每次提交都写清楚改了什么这样即使没维护变更记录表翻提交历史也能追溯。对于文本描述生成的图这一点尤其方便diff能直接看出逻辑变化。6.3 与代码、文档的同步流程图最容易变成一次性产物——画完发出去之后代码改了图还是老的。要避免这个问题得把图纳入常规维护范围。我的做法是涉及流程变更的需求验收标准里必须包含流程图已同步更新这一条。听起来有点官僚但确实有效。同步的方向也要想清楚。图是从代码反向生成还是从需求正向设计决定了谁是真源。如果是设计驱动的流程图是真源代码变更时要先改图如果是代码已经实现后补图那图是描述性的同步时要以代码为准。两种模式不能混混了就会出现图代码不一致而且没人知道以谁为准的情况。有条件的话把流程图的检查纳入自动化流程。比如在提交代码时跑一个脚本检查本次变更涉及的关键流程节点是否在流程图文件里有对应修改。做不到全自动至少做到提醒让人为遗漏的可能性降到最低。7. 常见问题与排查实录7.1 高频问题速查表下面这张表是我们团队踩坑之后整理出来的基本上覆盖了八成的返工原因。问题现象根本原因处理方式读图人理解的分支数量比实际少判断条件表述模糊出口标注不全量化判定依据逐个出口标注条件子图塞不回父图子图有多个入口或出口增加汇聚节点保证单入口单出口图越画越乱改不动单图节点过多职责不单一按主流程拆子图建立编号层级评审反复争论同一处意见没有落图没有记录每条意见必须有处理结果和痕迹图与代码长期不一致没有把图纳入变更流程把同步更新写进验收标准同一符号语义前后不一没有样式模板各画各的固化模板文件从模板起画连接符找不到对应编号不唯一或不规范统一用页号加序号的编号规则打印后颜色信息丢失用颜色承载关键信息颜色仅作辅助关键信息用文字和线型这张表里我特别想强调的是第一行和第四行。分支理解偏差是最常见的沟通事故来源而评审意见不落图是最常见的流程失效来源。这两个问题的成本都很低就能解决但前提是团队真的把规范当回事。7.2 独家避坑经验第一个坑是边画边改需求。需求没定的时候千万别开始画流程图因为流程图的修改成本比纯文字高得多。我的做法是先出一版纯文字流程描述跟相关方确认无误之后再转成图形。文字阶段改起来改十遍都不心疼图形阶段改三遍就想摔键盘了。第二个坑是符号的语义漂移。同一个团队里新人入职后如果没人带他会按自己的理解用符号用着用着整个团队的符号语义就乱了。解决办法是入职时就给一份规范文档加一套模板并且让他的第一张图经过一次完整的评审。第一次就掰正后面省事。第三个坑是过度依赖工具自动布局。自动布局出来的图逻辑上没错但视觉上往往很难读因为工具不理解你的语义重心在哪。我建议自动布局只作为初稿参考关键的层次关系和主干路径还是要手工调整。花在这上面的时间会在别人读图的时候十倍地省回来。第四个坑也是我踩得最深的一个流程图不是越正式越好。有些场景用文字加简单框图沟通效率更高硬套完整规范反而拖慢节奏。规范是给需要长期维护、多人协作、作为正式交付物的场景用的。判断标准很简单这张图三个月后还会有人翻出来看吗会就用规范画不会就怎么快怎么来。最后分享一个小技巧。画完图之后把图给一个完全不了解这个业务的人看让他复述一遍流程你只听不解释。他复述对了说明图合格他卡壳的地方就是你要改的地方。这个方法的成本是十分钟但比任何自查清单都更接近真实读者的视角。我用这个方法改过的图后续被问这里什么意思的概率明显下降。规范说到底就是为这个目标服务的——让别人不用问你就能看懂。
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表