解决复杂流程图的方法:抽象、分层、解耦

优普丰敏捷之旅:从A-CSM到CSP-SM的持续前行 | 敏捷CSM认证&Scrum培训
2023年10月13日
从初探到专职Scrum Master:在敏捷风潮中实现蜕变
2023年10月27日

前言

许多人对于绘制复杂流程图感到困惑,不知道如何绘制出优质的流程图或泳道图。以下以派车流程为例,说明如何绘制流程图或泳道图。

派车流程的复杂版本

这个流程只是一个例子,在实际的业务沟通过程中,会出现更多细节,并且需要不断调整。例如,修改用车计划、取消用车计划、更换司机、更换车辆、车辆和人员容量是否匹配等等。这些变更会导致流程图变得不稳定且越来越复杂。

解决方案

对于大多数流程,可以将复杂的流转方向简化为Yes/No,并将复杂的逻辑放在子流程中处理。这样可以提高流程图的可读性和可维护性。对于复杂的流程图,可以采用抽象、分层、解耦的方法进行解决。

抽象

抽象的好处在于可以提取相似对象的共通部分,从而降低维护成本。通过在抽象层次上进行通用需求设计,可以减少对现有设计的影响,并将修改控制在明确和有限的范围内。

抽象思维的设计可以帮助我们从众多的业务场景中找到通用结构或逻辑。通过应用抽象思维进行设计,可以引导面向对象编码或函数式编程,确保代码的可扩展性和可变更性。

抽象策略

具体来说,抽象可以分为对相同事物的抽象和对相似事物的抽象。对相同事物的抽象是找出事物的共同点并进行抽象,而对相似事物的抽象是找出事物的相似之处并进行抽象。

通过抽象策略,可以更好地应对增加新功能或选项的需求,而无需改变抽象部分的设计。当需要变更时,只需修改抽象层,而具体变更只会影响某个具体需求。在扩展新功能时,也不会对原有处理产生影响。

分层

需求过大时,采用分层的方式描述,可以减少顶层的变化可能性。分层结构的需求勾画,通过逐层下钻,可以逐渐看到细节,且每层修改不影响上层。采用分层的方式可以将需求由粗到细表达,易于管理和阅读,且在变更发生时可以更快定位。

对于较大体积的需求,线性组织的方式会导致查找困难和阅读不便。分层法将庞大的需求分层处理,最高层描述主要流程,细节放在下沉的层中。通过快速阅读最高层需求,可以理解整体系统的目标和流程。

想了解某个步骤的细节,下钻到下一层阅读对应文档。每层的文档描述需求的细节,如果某层仍庞大,可进一步分解到下一层,如此循环直至最后一层足够详细。

采用分层法不仅可管理和描述需求,还可利用分层解耦合,减少需求变更的影响范围。分层降低需求的僵硬度,避免变更牵一发动全身,减少重新设计逻辑的次数,降低错误概率,避免重复编写相同逻辑,减少每次需求变更时的修订工作。

分层策略

(1)采用树形目录
树形目录是一种常见的文档管理结构,可以方便地进行文档的规划和阅读。通过不同的视角,如分模块视图、多角色视图和项目管理视图,可以更好地链接到具体的内容。这种管理方式还可以确保文档始终保持最新,并支持快速阅读和版本比较。

分模块视图:以模块的方式来组织目录,这种方式也最常见。想要阅读哪个模块的内容就从哪个模块入手。
多角色视图:通常是利用Tag等方式,让不同的角色可以看到自己最关注的内容,比如说,UI设计师关注的是UI的原型;后端工程师注重的是业务逻辑,存储对象;前端工程师则对交互方式比较在意。
项目管理视图:对于Scrum的管理方式来说,可以是以用户故事为单位组织的任务。

(2)需求文档分层
将系统整体的介绍文档独立出来,可以帮助新人快速了解项目,并让开发人员快速定位到自己负责的模块。

(3)解决共通的依赖
统一定义术语和概念、界面布局规定和消息定义,可以减少重复工作和保持一致性。

解耦

解耦是一种重要的需求分析方法,可以有效响应需求变更。通过解耦,可以以较低的成本进行开发,并以易读的方式向开发团队和业务部门展示需求变更。

解耦的方法是将关注点分离,突出重点,将能够引起变化的点分开阐述。这样,当需求发生变化时,影响范围更受控且更容易调整。解耦具有以下特点:

(1)增强需求文档的灵活性。
(2)引导开发人员进行同样解耦的代码设计。
(3)通过高度抽象,提高信息的可复用性。

解耦策略

(1)界面解耦:将显示界面与数据分离,以便在界面需求发生变化时,只需改写界面的代码,降低耦合度,提高项目的易维护性。

(2)适配器解耦:采用适配器模式,将一个类的接口变换为另一种接口,使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。适配器不仅解决开发阶段的问题,也适用于正在进行的项目。

流程图的抽象

很多复杂的流转方向都可以归结为Yes/No,然后把复杂的逻辑放在子流程里。

在抽象流程图时,将通用的处理放在最上层流程图中。这样,最上层的流程图会给人一种“看起来像什么也没说”的感觉,而具体的细节则在子流程中进行处理。

对于第二层的处理,如果存在多种分支,可以考虑将每种分支单独起一个文档来描述,而不是将它们放在一起。这样可以进一步解耦合,使得每个分支的逻辑更加清晰和独立。

以上优化方法可以应用于本例中,使得流程图更加简洁、易读和易于维护。

流程图的细节

每一层的子流程不一定要使用流程图来表达,可以使用其他类型的可视化工具来表达。这样可以根据具体情况选择最适合的工具,以减少流程的复杂度。

通过使用其他类型的可视化工具,可以更直观地展示子流程的逻辑和处理过程。例如,使用状态图、决策树、时序图等工具来表达子流程,可以更清晰地展示不同状态、决策路径和时间顺序。

选择合适的可视化工具可以根据子流程的特点和需求来决定。这样可以提高流程图的可读性和可理解性,减少复杂度,使整个流程更易于管理和维护。

车辆状态判断-查询条件

结果判定

司机状态判断和司机状态判断的方式一样,但对于子流程部分应该选取何种可视化需求分析工具,可以根据实际情况来选择。具体的后续可以提供工具选取指南,以供大家使用。

拨打免费咨询电话 021-63809913