如何找出软件发布流程中的瓶颈

先把发布流程画成流程图,数清每个决策的出口,再用桑基图呈现计数。找出构建失败、被退回或等待最久的那道关卡。

发布瓶颈是工作堆积、失败或被退回的那道关卡。本指南先画出流程,让每道关卡都是带有命名出口的决策,然后统计有多少次发布走了这些出口。

简而言之

  • 先把流程画成带标签出口的决策,再开始计数。
  • 统计一个周期内每个出口通过的发布(或构建)数。
  • 回退分支很宽的关卡就是瓶颈,哪怕它本身很快。
  • 用桑基图呈现计数,用流程图解释这些计数。

先看关卡,再看数字

团队通常靠平均耗时来找慢的步骤。这能找到慢的任务,却找不到把工作送回去的关卡。一次发布在测试里只待一天,却仍可能损失一周,因为测试失败会把它退回修复步骤,整个循环重新来过。要看清这一点,办法是把流程连同其中的决策一起画出来,再数有多少次发布走了每个出口。

流程图给出结构:每个决策有带标签的分支,每个分支有一个计数。示例是一个有四个决策的发布流程:自动化测试、放行还是不放行、生产环境是否健康,以及生产环境是否发现缺陷。有了每个分支的计数,桑基图就用宽度把它们呈现出来。构建阶段请看 /zh/sankey/ci-pipeline-outcomes,在它之前的评审阶段请看 /zh/sankey/pull-request-review-flow。

结论要保守。计数显示工作从哪道关卡离开,而不是为什么。原因要靠阅读失败的条目,以及询问负责这道关卡的人。

分阶段搭建的发布流程

二十个步骤和四个决策。每个决策都是桑基图会显示工作向两个方向离开的地方。

  1. 构建与自动化测试

    流程从代码已可用于发布开始,冻结范围,然后运行自动化测试。第一个决策“自动化测试是否通过?”的“失败”分支会经过一个修复步骤回到构建。这个循环是第一个要统计的地方。

  2. 预发布环境、签字确认与放行决定

    通过的构建进入预发布环境、回归测试和 UAT,随后汇总并批准发布就绪文档。“放行还是不放行?”的“不放行”分支会回到修复步骤,所以一次发布可能从流程的后半段被退回。

  3. 生产环境与回退之路

    版本在发布窗口内部署并做冒烟测试。“这个版本是否健康?”分为监控,或回滚后回到修复步骤。回滚是代价最高的出口,所以它的计数最重要。

  4. 监控与热修复

    观察期结束后,“生产环境是否发现缺陷?”把版本送去热修复(从部署重新进入),或去发布版本说明并结案。统计热修复分支被走了多少次。

运作方式

  1. 画出带决策的流程

    把每道关卡画成带有标签出口的决策,例如“通过”和“失败”。把关卡画成普通步骤,就藏起了你想统计的那个出口。

  2. 选定周期和单位

    取上一个季度,统计发布次数;如果发布频繁,就统计构建次数。在数据说明里写明用的是哪个。

  3. 统计每个决策的出口

    对每个决策,数出有多少条目走了各个出口。数字取自你的 CI 系统、工单或发布日志。

  4. 把计数画成桑基图

    用决策作为节点,出口作为流。检查进入每个节点的数量等于离开它的数量。

  5. 先看最宽的回退分支

    最宽的、向后指的分支很可能就是瓶颈。阅读这些条目,找出原因。

应避免的错误

  • 只统计最终结果

    如果只数最终发布了什么,循环就消失了。要在每个决策处计数,否则桑基图会显示一个并未发生过的顺畅流程。

  • 混用单位

    构建、发布和工单是不同的单位。整张图选一个,并写明。

  • 把计数当作原因

    很宽的“失败”分支只说明测试经常失败,而没说为什么。改动流程之前,先看失败的条目。

打开软件发布流程图

打开发布模板,把关卡改成你自己的,然后统计各个出口。

打开软件发布流程图

相关指南

常见问题

如果我只想要桑基图,为什么还要画流程图?

因为流程图决定了节点是什么。没有它,桑基图显示的就是你的工具碰巧导出的阶段,而这些往往不是人们做决定的关卡。

我需要多少次发布的数据?

要让每个出口有多于几个条目。少于大约 20 个时,用表格显示计数,而不是图表。

这能代替测量前置时间吗?

不能。前置时间说明花了多久;桑基图说明工作从哪里离开或返回。两者都用,并比较同一个周期。

本指南所用的模板

软件发布流程图 — 软件发布流程图:范围冻结、自动化测试关口、预发布环境与 UAT、放行与否的审批、部署、回滚与热修复。