1. 前言
能够学习和使用助于分析和解决问题的各种图形是计算机专业的专业素养体现。
前面讲了思维导图,倡导大家使用思维导图来学习知识,深化对知识的理解,并能够举一反三融会贯通。
在正式学习 UML 图之前,我们在本节学习做技术方案时常用的图形之一的流程图。
2.What?Why?When?
2.1 什么是流程图?
流程图是表示算法和计算机程序的工具,但现在已经被应用到各种流程中。
维基百科对流程图做出下面的描述 1:
流程图 (Flow Chart)是表示算法、工作流或流程的一种框图表示,它以不同类型的框表示不同种类的步骤,两个步骤之间通过箭头连接。
2.2 为什么要使用流程图?
流程图在信息展示中扮演着重要角色,它能够帮助我们将复杂的问题可视化,可以清楚地描述问题或任务的结构。流程图便于说明解决已知问题的方法,在分析、设计、记录及操控等很多领域的流程或程序中都有广泛应用。
在实际开发中,流程图是程序员设计技术方案,开发人员之间交流设计思想的一个主要图形之一。在交流技术问题时,很多优秀的程序员也会习惯性地,画流程图来交流思路。
同时流程图也是我们开发人员和产品、测试沟通的一个工具,他们可能看不懂你的代码,但是看得懂流程图。
2.3 何时使用流程图?
那么使用流程图的典型场景有哪些?
- 当需要描述复杂流程时;
- 当分析一些不必要的步骤时;
- 当我们需要帮助团队成员理解程序时;
- 当我们需要设计一个新的流程时。
3. How?
了解了流程图是什么,为什么需要流程图以及流程图的主要场景,接下来我们将学习如何画流程图。
3.1 画图工具
还是那句话:“工欲善其事必先利其器”2。
本小节将采用 Visual Paradigm 来学习 流程图。
3.2 核心符号
终端符号,表示流程的开始和结束:

流程,表示某个特殊的操作。

文档,表示一个输入或输出的介质,如输入或输出。

决策,表示一个决策或分支点。采用菱形表示,表示此时分为多个情况,每种情况可表示一种子任务,通常有两种情况:是,否。

数据,表示信息进入或离开处理程序。输入可能是一个外卖订单,输出可能是一个外卖包裹。

延时或瓶颈,表示程序的延时或者性能瓶颈。

流,表示流程处理的方向。

汇总,表示多个流程汇总到一处。通常用在多个流指向同一个处理流程,为了美观,可以先指向该组件再从该组件指向该处理流程。

或,表示多个流程之间是或关系。

数据库,表示文档和档案的存储。

页面内引用,表示上一个或下一个步骤在此绘图的其他位置,需设置一串字符串来标识,多用于大型流程图。

页面外引用,表示将使用单独的页面绘制子流程图,需设置一串字符串来标识,多用于大型流程图。

3.3 画图步骤
首先明确画流程图是将复杂的任务拆分为多个流程,核心是子步骤的顺序与条件。
核心步骤分为以下 4 步:
- 画一个只包含任务本身的流程图;
- 画一个将任务拆分成多个子任务的流程图;
- 考虑流程中可能出现的异常情况,在这些异常情况中添加决策节点和其它可能的路径;
- 如果不能够清晰表达流程,则重复上述步骤。
对应的流程图如下:

3.4 基本流程图举例
特别强调,画流程图的主要目的是让看此图的人能够清楚地表达执行流程,因此不必拘泥于细节。
3.4.1 简单示例
按照上述画流程图的步骤,我们以用拖把拖地为例作图如下:

3.4.2 模拟设计
比如产品让我们设计一个登录的功能,场景描述如下:
系统有两种登录方式,一种是通过手机号和短信验证码登录;一种是通过用户名密码登录。
如果是手机和短信验证码登录方式,用户点击获取验证码按钮,手机会收到验证码短信(60 秒内只能获取一次,验证码 5 分钟内有效),输入正确登录成功,输入错误提示失败。如果采用用户名密码登录,用户名和密码正确则登录成功,否则登录失败。
根据以上描述,我们可以作出下面的参考流程图:

上面给出了两个简单的案例,希望大家在实际学习和开发过程中多加练习,熟能生巧。在实际工作中能够更快速准确地画出流程图,清楚地说明自己的意图。
4. 总结
本节主要介绍了流程图的概念,为什么要使用流程图、何时使用流程图、以及作流程图的主要步骤,并给出了基本流程图的使用案例。
希望大家在设计技术方案时,在修改了某个功能提交提测文档时,在和其他开发人员沟通设计想法时,都可以尝试使用流程图,让自己的观点表达得更清楚。
下一节我们将一起学习用例图。
5. 课后作业
回忆一下自己在 ATM 取款流程,通过流程图将取款流程画出来。