培训 · 第 7 课

自动化不工作时该看哪里

判断系统坏了,最省事的信号是它报错。真正难办的是不报错却跑错的系统:屏幕上一切正常,结果却悄悄错了。本课讲遇到这种情况时该看哪里、按什么顺序看。

这一课您将学到什么

这一课处理的是:已经建好的自动化不再按预期运转的那一刻。目标是让您靠有次序的收窄而不是靠猜来找到问题,并且让找到的修正长久有效。当诊断不再依赖搭建系统的那个人,而成为公司自己的本事时,自动化才站得住。

课程结束时您手里会有一套诊断次序、一张填好的故障单,以及一个显示修正确实起作用的验证步骤。缺了这三样就动手,往往会造出第二个故障。

本课目标

  • 分清故障的三种类型:停住的、无声的、变慢的
  • 把症状写成与猜测分得开的样子
  • 让故障能够被重现
  • 通过把流程对半切来收窄查找范围
  • 按次序排查五个部分:触发、数据、条件、对接、输出
  • 一次只改一处,验证之后再让修正长久有效

前置条件:第一课的流程图。查故障时用来比对的书面预期就是它。

故障的三种类型

不工作这句话一次盖住了三种不同的情形,而这三种的诊断各从不同的地方起步。在对话一开始就分清面对的是哪一种,查找范围立刻就窄了。

停住的流

自动化根本不动。触发没有到达,或者在第一步就掉了。这是最好处理的一种,因为症状看得见,通常也会在记录里留下痕迹。

无声的故障

流在跑,也生成记录,也不报警,可是结果是错的。这是代价最高的一种,因为错误会积上几周,发现时还得往回清理。

变慢的流

结果没错,却没能按时到。通常不是单一故障,而是积压的负荷或者新加进来的一步。没有测量,这一种就一直可以被争论。

三种的共同点是:只要预期没有写下来,故障就无法界定。不该是这样这句话,在没有应该是这样的书面记录时,变不成诊断。

什么是无声的故障?

自动化很少吵吵闹闹地坏掉。没有错误提示,没有红灯,流看上去是绿的。可输出还是错的:消息发给了错的人、某个字段空着、记录开了两次、日期写成了另一种格式。

无声故障的源头多半是输入换了形状。表单里多了一个字段,门户开始用另一种写法发手机号,某位员工把字段填得不一样。规则没变,输入变了,结果就悄悄跑偏。

无声故障的迹象

  • 记录数比预期少或者多
  • 同一个客户开出了两条记录
  • 某个字段总是空着进来
  • 消息照常发出,回复比例却降了
  • 团队开始用手工去修输出
  • 没人抱怨,可也没人信任这套系统

最后一条最重。团队一旦开始手工修输出,系统其实早就坏了;因为没人上报,故障也就没有进过任何记录。

诊断之前:什么变了?

昨天还行的东西今天不行了,说明中间有什么变了。这是诊断的第一个问题,多数故障就在这个问题上收口。在没有变更清单的系统里,同一个问题要花上几个小时。

变化不只发生在系统里。流程里、人身上、输入里也会发生。可能是员工走了,可能是门户改了字段名,也可能是供应商换了文件格式。查找请从这张清单开始,而不是从代码内部开始。

什么变了要去哪些地方问

  • 系统里:新增步骤、更新、新对接、改动过的设置
  • 输入里:表单字段、文件格式、字段名、字符集
  • 流程里:新规则、被取消的审批、改过的次序
  • 人身上:新来或离开的员工、交接出去的职责
  • 外部:门户、银行、物流或服务商那边的变动
  • 时间上:期末、假日、负荷上升

第一步:把症状写下来

诊断从写下症状开始。不工作不是症状,那是感觉。症状是这样的:在哪条记录上、什么时候、本来预期什么、结果发生了什么。这四栏没填满之前,查找范围不会变窄。

写症状时,预期结果要从第一课的流程图里取。没有流程图就先写它;没有书面预期的诊断,会变成拿一个人的记忆去比对系统的行为。

故障单

  • 在哪条记录、哪位客户身上看到的?
  • 什么时候发生的,最早什么时候被发现?
  • 预期结果是什么,对应流程图的哪一步?
  • 结果发生了什么?
  • 出现在多少条记录上:一条、全部,还是一部分?
  • 这个日期之前是已知能跑的吗?

最后两问决定诊断的方向。只在一条记录上出现,问题多半在输入;全部都出现,多半在规则;一部分出现,多半在条件。

第二步:把故障重现出来

重现不了的东西不要动手修。手里没有一个想复现就复现的例子,也就没法证明您改的那一下是否起了作用。许多被当作修好了的故障,其实只是那天没有再犯。

重现的意思是把同一条记录放到测试环境里,或者用一个无害的例子跑一遍。如果必须在线上试,请挑一个能撤回的步骤,并且事先告诉团队。

重现演练

  • 把出故障的那条记录和它的输入单独留存
  • 用同样的输入把流程从头跑一遍
  • 故障复现了,说明手里有了可测量的例子
  • 没有复现,就不要改输入,改时间、次序或者负荷再试
  • 完全不复现,说明故障是有条件的:去找它在什么条件下出现

第三步:把流程对半切

收窄查找范围最快的办法,是把流程从中间切开。在流程中间的某个点上,数据是对的还是错的?对的,故障在后半段;错的,故障在前半段。每切一次,要查的范围就少一半。

这个办法与工具无关。无论看记录界面、中间表、发出去的消息,还是系统留下的日志,问的都是同一个问题:数据到这里时还是对的吗?

切分时要问的

  • 触发真的动了吗,记录生成了吗?
  • 进入流程的数据,在进来的那一刻是对的吗?
  • 中间那一步的输出是预期的形状吗?
  • 条件走了哪条路,是预期的那条吗?
  • 最后一步被调用了吗,回来的是什么应答?

每切一次就把结果写下来。不写下来的切分会被重复,诊断就因为把同样的地方看第二遍而拖长。

第四步:按次序排查五个部分

范围收窄之后,按次序排查第一课的五个部分。下面六个来源在现场最常遇到,多数诊断都在它们里面收口。

1 触发

事件可能根本没到。连接可能断了,授权可能过期了,地址可能变了。如果记录没有生成,故障在流程的门口,不在里面。

2 输入格式

这是最常见的来源。字段可能被改名,日期可能换了格式,开头的零可能掉了,空格或者大小写可能不一致。

3 条件

可能出现了新情形,落在写好的路径之外。条件之外的记录通常会悄悄掉下去,因为没人为它们写过路。

4 权限与访问

密码可能改了,密钥可能到期了,某个账号可能被删了。这类故障往往某一天突然开始,事先并不打招呼。

5 次序与时间

两步可能跑反了次序,或者其中一步没等另一步的数据就开跑。忙时出、闲时不出的故障,通常就在这里。

6 目标系统

对方可能没有接受:某字段变成必填、额度满了、格式被拒绝。回来的应答没人读的时候,这类故障就一直是哑的。

第五步:只改一处,然后验证

不要同时改好几处。改了两处结果变好,不知道是哪一处让它变好;结果变坏,也不知道是哪一处让它变坏。到这一步,诊断就又变回了猜测。

每改一处,就把第二步的例子再跑一遍。验证既包括故障走了,也包括别处没被弄坏。为此,请在动手之前把哪些记录本来是跑得好的写下来。

验证的次序

  • 把故障单上的例子再跑一遍,结果是预期的吗?
  • 跑两个此前正常的例子,现在还正常吗?
  • 条件的另一条分支也试一下,那边可能坏了
  • 试一下例外通道:故意给一个错误的输入
  • 把结果连同日期写下来,记下谁改了什么

第六步:让修正长久有效

把故障弄走只是一半的活。另一半是放下标记,让同样的故障不能再悄悄形成。不做这一步,几个月后同样的诊断要从头再来一次。

长久有效来自三样东西:故障会显形的地方放一个提醒、一个探查输入边界的检查,以及一条定好的例外通道。三样都待在自动化内部,并不需要另起一套系统。

让它长久有效的步骤

  • 加一个提醒:预期结果没有形成时发出通知
  • 必填字段为空时,让流程停下并把记录挂起等待
  • 写下例外通道:记录在哪里等,谁来接手
  • 把故障单和解决办法作为笔记保存
  • 更新流程图,把改动过的规则写进去
  • 排查同样的故障在别的流里是否也存在

完整示例:报价邮件发不出去

我们把方法放在一个故障上,从头走到尾。例子走的是销售流程,不过这个次序在任何流程里都一样。

从症状到长久的修正

症状:新提出咨询的客户收不到报价邮件。销售团队最先发现,说上周有几位客户一直在等回复。记录看上去是建了的。

什么变了:最近两周表单里加了一个新字段,门户那边也做了一次更新。两个候选。

重现:把其中一条受影响的记录用同样的输入再跑一遍。故障复现了,也就是说手里有了可测量的例子。

对半切:去看流程中间的那张表。记录在,但邮箱字段是空的。那么故障在前半段,在输入这一侧。

五个部分:去看输入格式。表单里新加的字段把邮箱字段改了名。流程在找旧名字,找不到,就传了个空值,邮件那一步于是悄悄掉了。

只改一处并验证:把流程改成读取新的字段名。故障例子再跑一遍,邮件发出去了。再跑两条此前正常的记录,它们也仍然正常。

长久有效:邮箱字段为空时,流程现在会停下,记录挂起等待,并通知负责人。流程图上的字段名做了更新。用到同一字段的另一条流也被排查并改好。

练习:诊断预演

诊断不是等故障出现那天才学的本事。在平静的日子里演练过,需要它的那天它就在手边。下面的练习就是为此准备的。

这一周要做的

  • 挑一条正在跑的流程,把它的流程图放在手边
  • 故意给一个错误的输入:把必填字段留空
  • 看流程做了什么:停住了,还是悄悄过去了?
  • 填写故障单,四栏都写上
  • 把流程对半切,找出数据是在哪里坏掉的
  • 在找到的那个点上加一个提醒或者一个检查

每一条会悄悄放过去的流,都是日后会造出无声故障的流。这个练习在多数公司里都能翻出至少一条。

下载诊断检查清单(xlsx) · 故障单、什么变了、把流程二分、五个部件的排查,以及持久修正的步骤。

常见错误

直接去看规则

最先被看的通常是规则,可最常见的来源是输入。规则从昨天到现在没动过,那变的多半是送到它面前的数据。

一次改很多处

改两处再看结果,并不能把诊断做完,只会把它搅浑。哪一处起了什么作用无从判断,修正也变得无法重复。

不重现就修

在无法复现的故障上做的修正,没法验证。故障会消失一阵子,然后从同一个地方回来。

不看日志

多数流程都会把自己做过什么记在某处。不看日志的诊断,是不听系统说话就下判断。

不写症状

口头传递的症状,每传一次就变一次。没写下来的症状,会变成两个人在找两个不同故障的诊断。

修完就走

没有加提醒和检查就关掉的故障,会以同样的样子回来。第二次来的时候诊断从头再做,信任又被磨掉一层。

检查清单

在关掉一个故障之前,最好对下面每一条都能说是。缺哪一条,这个故障就不是关掉了,而是被推后了。

故障关闭检查清单

  • 症状写全了四栏:记录、时间、预期、实际
  • 问过什么变了,并且把答案写下来了
  • 故障能够被重现
  • 通过对半切找到了故障点
  • 只改动了一处
  • 修正经过验证,此前正常的例子也试过了
  • 加上了提醒、检查或者例外通道
  • 流程图已更新,笔记已保存

术语表

诊断对话里会用到的术语。团队有了共同的说法,故障交接就更快。

接下来是什么

这一课我们讲了怎样有次序地收窄故障、怎样让修正长久有效;您也看到,很大一部分故障出在输入这一侧。

课程里其余的模块正在准备中。发布之后就会归到课程里的位置上,并出现在培训页面。

第 8 课:例外与故障管理

例外记录簿、通知的路径,以及让无声错误显形的测量。

第 3 课:把客户数据收好

字段词典和格式规则。多数故障都是从这一侧开始的。

全部课程

整个培训板块,以及之后新增的模块。

如果怀疑某个系统正在悄悄跑错,写信给我们,一起看看。

通过WhatsApp获取报价

常见问题

系统不报错,怎么知道它坏了?
靠数输出。定期把预期的结果条数和实际产出的条数对一对。这两个数之间的差距就是故障的第一个迹象,哪怕屏幕上什么也没出现。
看日志就够了吗?
常常不够。日志记的是系统做了什么,不记它没做什么。压根没跑过的步骤不会留下痕迹。所以数输出必须和读日志放在一起。
修好了但心里没底,该怎么办?
试着有意把故障请回来。如果不再像原来那样出现,修复多半是站住了。如果照样出现,那次改动关掉的是症状而不是原因。
一次改好几处会有问题吗?
通常会。两处一起改,就分不出是哪一处起了作用。诊断时一次只改一处看着更慢,实际上更快走到答案。
这套办法适用于哪些工具?
和工具无关。输入、规则、输出这个顺序,在表格里和在自动化流程里同样成立。变的只是您盯着的那块屏幕的名字。