流程图怎么复杂的流程图化

介绍常见的流程图符号及流程图嘚例子
在流程图中,判断框左边的流程线表示判断条件为真时的流程右边的流程线表示条件为假时的流程,有时就在其左、右流程线嘚上方分别标注“真”、“假”或“T”、“F”或“Y”、“N”
另外还规定流程线是从下往上或从右向左时,必须带箭头除此以外,都不畫箭头流程线的走向总是从上向下或从左向右。


    早期的非结构化语言中都有go to语句它允许程序从一个地方直接跳转到另一个地方去。
执荇这样做的好处是程序设计十分方便灵活减少了人工复杂的流程图度,但其缺点也是十分突出的一大堆跳转语句使得程序的流程十分複杂的流程图紊乱,难以看懂也难以验证程序的正确性如果有错,排起错来更是十分困难这种转来转去的流程图所表达的混乱与复杂嘚流程图,正是软件危机中程序人员处境的一个生动写照而结构化程序设计,就是要把这团乱麻理清
经过研究,人们发现任何复杂嘚流程图的算法,都可以由顺序结构、选择(分支)结构和循环结构这三种基本结构组成因此,我们构造一个算法的时候也仅以这三種基本结构作为“建筑单元”,遵守三种基本结构的规范基本结构之间可以并列、可以相互包含,但不允许交叉不允许从一个结构直接转到另一个结构的内部去。正因为整个算法都是由三种基本结构组成的就像用模块构建的一样,所以结构清晰易于正确性验证,易於纠错这种方法,就是结构化方法遵循这种方法的程序设计,就是结构化程序设计
    相应地,只要规定好三种基本结构的流程图的画法就可以画出任何算法的流程图。
顺序结构是简单的线性结构各框按顺序执行。其流程图的基本形态如图1 - 4所示语句
的执行顺序为:A→B→C。
这种结构是对某个给定条件进行判断条件为真或假时分别执行不同的框的内容。其基本形状有两种如图1-5 a)、b)所示。图1-5 a)的执荇序列为:当条件为真时执行A否则执行B;图1 - 5 b)的执行序列为:当条件为真时执行A,否则什么也不做
其执行序列为:当条件为真时,反複执行A一旦条件为假,跳出循环执行循环紧后的语句。
执行序列为:首先执行A再判断条件,条件为真时一直循环执行A,一旦条件為假结束循环,执行循环紧后的下一条语句
1) 在循环体中,必然对条件要判断的值进行修改使得经过有限次循环后,循环一定能
2) 当型循环中循环体可能一次都不执行而直到型循环则至少执行一次循环体。
3) 直到型循环可以很方便地转化为当型循环而当型循环不一定能轉化为直到型循环。

七用N-S图描述算法

VIP专享文档是百度文库认证用户/机構上传的专业性文档文库VIP用户或购买VIP专享文档下载特权礼包的其他会员用户可用VIP专享文档下载特权免费下载VIP专享文档。只要带有以下“VIP專享文档”标识的文档便是该类文档

VIP免费文档是特定的一类共享文档,会员用户可以免费随意获取非会员用户需要消耗下载券/积分获取。只要带有以下“VIP免费文档”标识的文档便是该类文档

VIP专享8折文档是特定的一类付费文档,会员用户可以通过设定价的8折获取非会員用户需要原价获取。只要带有以下“VIP专享8折优惠”标识的文档便是该类文档

付费文档是百度文库认证用户/机构上传的专业性文档,需偠文库用户支付人民币获取具体价格由上传人自由设定。只要带有以下“付费文档”标识的文档便是该类文档

共享文档是百度文库用戶免费上传的可与其他用户免费共享的文档,具体共享方式由上传人自由设定只要带有以下“共享文档”标识的文档便是该类文档。

解决复杂的流程图思考之流程图:如何规范并描绘易于理解的流程图

在推进工作的过程中,有效的沟通至关重要

最近负责公司流程再造这个项目,这个项目的背景是:为了跟上公司业务的发展要将公司已有内部系统中的业务流程功能全部梳理和重构,解决大部分历史遗留的混乱问题并增强扩展性系统由两个ERP系统和一个CRM系统及一些独立工具构成,包含销售、运营、市场、财务、人事、客户管理等模块

在推进工作的过程中,不断的遭遇了大量问题并努力解决这次主要聊一个由于系统的复杂的流程图性,影响概念设计及沟通交流的问题由于系统本身既庞大又结构複杂的流程图,且设计时需要协调沟通极多的的部门负责人与项目干系人配合而他们对于软件工程或组织系统的认识水平又参差不齐,僦导致很难在统一的概念上进行沟通尤其是在业务层面到开发层面的鸿沟,着实给我造成了许多困惑

仔细细考后,基于易理解性和工莋流合理性提出以下几点假设原因:

  1. 与业务部门来说更多的关注从自己视点出发的内容,甚至可能完全忽视与自己工作相关的其他部门笁作流程例如,销售人员可能根本不在意财务人员怎么审核资金到账而只在乎完成签约销售立刻获取自己的业绩。而于此相反财务囚员就更关注,资金到账的信息一定要自己牢牢匹配确认以致牺牲时间的延迟
  2. 抽象的概念图表达方式并不容易被所有人理解。这些图抽潒的能力让我们在设计上得心应手却让一些没经过训练的非专业人员难以接受。
  3. 业务概念与系统概念的严重脱节例如在现实业务流程Φ需要业务管理人员审核的过程,在系统内部的概念却是***审核类似的许多功能与概念极度脱节,以至于业务人员也仅熟悉常用的小蔀分功能
  4. 我自己对于系统复杂的流程图程度的低估,没能完全穷举出系统内的所有相关流程接手这种唯一的文档就是代码,又遍布历史遗留问题的复杂的流程图系统真的就差把自己埋坑里了。

而其中第一点问题从解决真实问题的角度适合引入系统论思考第三点问题則正是项目立项之初就明确需要解决的问题,第四点就只剩降低我的自我效能感这一个用处了

于是这篇文章将主要从第二点问题出发,哃时引入第一点问题的影响因素记录我的思考、逻辑及解决方案。也就是如何规范设计流程并描绘让各部分干系人都更易理解的表达。

(这里不聊为什么选择用图的形式表达我认为信息可视化是在制作难度和可理解性中最平衡的沟通方式。)

先来熟悉一下惯用的几种莋图方式流程图、泳道图、时序图、用例图、原型图,不过下文的图并没有按照严谨的UML方式作图(现在连开发都不用严格的UML了吧),僅作参考使用好,开始一个个分析优缺点仔细研究问题。

优点:逻辑、概念清晰且很容易做颗粒度把控。

缺点:更多表达系统的行為较为忽视人员角色与系统的互动,实际制图中更多是偏向开发侧表达对跨部门沟通不够友好;表达数据、状态等信息时略显力不从惢,因为如果引入其他形式表示会导致图表过于复杂的流程图都用同一种形式展示又很难区分。

优点:较为完整描述流程相当于在普通流程图中加入角色,展示所有涉及模块的交互;能直观感受特定泳道内的所有行为

缺点:系统高于复杂的流程图的时候,图极大极复雜的流程图可读性很差;且信息展示方式不够直观,与常规认知习惯不匹配

优点:可以说是很细了,甚至能完全表达系统各细节环节嘚最细小行为不但能表示各行为顺序,还能在数据层面表示网络请求的方式能达到一张图不用解释的境地,可以算泳道图的升级版

缺点:以我目前的经验来看,这种图如果开发同学不需要就没什么用因为它的可读性也差,且颗粒度很细的时候也有信息量过载问题當涉及回调及同步异步问题时需要更专业的读图技巧,增加沟通成本不如让开发同学自己处理设计。

优点:好处是很容易理解尤其是茬遍历单角色任务时很实用,且容易按照颗粒度划分层次

缺点:在概念设计上容易忽视整体,流程完整性难以直观感受除了对单个角銫做MECE分析的时候比较有用,其余用处不大毕竟测试同学会自己处理用例。

优点:这应该是所有人都最喜欢看的图好处很多,既直观叒能很好的展示功能,还可以做交互标记按颗粒度可分低保证高保真,低保证便于沟通高保真方便用户测试。

缺点:原型图已经很贴菦实际开发的阶段了而不是所有项目(甚至不建议任何项目)都是直接到原型阶段的,前期的思考和论证至关重要原型只不过是之前所有阶段的结果总结,反复修改原型极易导致严重的项目进度管理问题所以直达原型的设计流程是很成问题的。

  • 角色表示场景下涉及嘚角色
  • 行为,表示场景下作出的动作
  • 数据表示场景下信息数据的流动
  • 状态,表示场景下引起的状态变化
  • 界面表示场景下位于什么界面忣其样式

先细分几个设计阶段,方便明确在各个阶段的目标以选择需要的方案

  • 业务概念阶段,此阶段主要关注在现实业务场景下需要莋什么,和业务流程规范的设计
  • 功能概念阶段此阶段主要关注产品如何满足业务概念的要求,需要设计哪些功能以及各个功能模块之間如何组织协调
  • 交互原型阶段,此阶段主要关注产品具体实现的展示方案用户如何操作,界面如何反馈

在经历了一大波实际环境尝试之後得出了一些目前比较适用的方案。首先明确不存在一张解决所有问题的图表达方式这也是为了在可读性和完整性中寻求平衡。

首先茬业务概念阶段需要一种能表示系统内全部流程的图,并能展示角色的差别方便跨部门沟通。重点在于简单快速易理解在开始设计湔敲定所有业务影响的范围。

所以选用普通流程图易理解的表达方式直接引入角色的概念,若图表过于复杂的流程图则从颗粒度着手洅引入「包」和「领域」切分的概念就很完美了。

可调颗粒度行为并引入角色概念真是和概念思维较弱的同学沟通的利器,也方便进行整个系统架构的思考因为合理切分/加大颗粒度后,对大信息量的支持很友好

例图前半部分被我截掉了,实际是一整张业务流程图表達了全部主要的业务流程。图中也可以用一些小标签的方式表达一些额外概念例如我图例紫色的小图标表示该操作允许业务员协助客户唍成。

由于系统大小限制此处可能需要细分任务颗粒度,酌情增加细分阶段尝试利用类似DDD领域切分的思路分割复杂的流程图系统为独竝系统,概念或流程打包独立封装来简化自上而下设计时信息量过大的问题。

将「用户首次进入」流程封装在其他流程中直接引用,方便进行整体管理

能把流程简化到什么程度呢?见下图

其次我们需要在完善功能概念阶段需要一些能更好的表达抽象对象的图,来作為产品设计的工具补充思考边界问题并尽量穷尽所有可能性,避免出现设计BUG还有梳理状态和数据的关键变化。

数据如何产生由某种荇为,引起某处的变化产生数据。所以图中要表示「地点」(页面)「行为」(操作),「数据项」(输入输出)

由于怕干扰开发哃学数据库设计和选择数据存储方案的思路,就采用了一个「数据存储/记录」的概念集合来表示采集的数据集合需要表示数据项额外限淛的,可以在数据项后加括号例如:版本1-1(最大字符数25,disable状态)

表层交互即用户能感受到的交互,底层交互则为用户感受不到的系统內部交互分开主要因为有些时候底层交互触发的节点与表层交互触发节点不一致(系统总是会在背后默默地多做一些事情)。

同理状态吔是由行为产生变化所以每步状态变化必然带着一个前置动作。

括号「(-)」内的状态表示前台展示的状态对应的状态「 [ – ] 」处内容為注释。

最后在交互原型阶段需要一种表示界面元素的图来展示功能,并引入交互表达这个都很熟悉,不多说了

当设计过于复杂的鋶程图的系统时,采用自顶向下的设计方式更容易搭建合理的体系而稳步推进项目的好方法就是细分任务阶段,阶段性确认与阶段性设計(有点类似CI/CD的概念)。

多层确认与详细的沟通一定不会带来坏处让伙伴们明白「业务先行」与「集体参与」,会使设计方案更稳定苴耐受考验

内容均来源于个人思考,或有偏颇或有不足,期待你的交流这会让我们一起进步。

本文由 @Jokul 原创发布于人人都是产品经理未经许可,禁止转载

参考资料

 

随机推荐