测试大局观:如何理解尾部风险

尾部风险我们通常理解为那些发生概率很小,但破坏力很大的风险。以QA层面为例,那些发生一次就无法复现的bug以及code层面看出的触发概率很小的bug,如果会引起流程阻塞或者其他大破坏,就可以被认为是尾部风险。我们大部分人都本能具有防范尾部风险的意识,所谓“君子不立危墙之下”,那我们究竟是为何要花大力气来防止小概率的风险呢?

一. 似是而非的朴素理论

对尾部风险的朴素理解是,因为其破坏力极大,会引起灾难性的无可挽回的后果,所以无论风险有多小都要竭尽全力去避免。这个观点初看非常正确,但经不起细致的推敲。

我们以航空行业为例说明。空难的可怕之处可谓人尽皆知,在如此高速运动状态下,任何发动机、液压等系统的故障都很有可能导致团灭,属于典型的“发生概率很小,但破坏力很大”。生命只有一次,每次坐飞机都相当于拿自己的命在豪赌。如果君子不立危墙之下,那君子更不应坐飞机之上。但现实是,以移动距离为指标对比,飞机反而是最安全的交通工具,同时几乎没有人会因为担心空难而拒绝坐飞机,航空行业非常发达,各种长短途航班遍布世界。

这是因为空难的概率实在是太小了,比吃饭噎死这种纯粹偶然事件还小,以至于有一种说法是坐飞机最危险阶段的是在去机场的路上。从数学期望的角度看,这样的风险完全可以忽略不计。

与航空行业对比,QA层面的尾部风险看起来严重性就更小了。软件的发展摆脱了材料技术和供应链的限制,其更新迭代频次远远高于传统行业,在其他行业很罕见的重构似乎也不是特别新鲜。相比于空难的灾难性,线上的问题可以通过快速响应hotfix,错误的数据理论上可以回退,前者的代价是人命,后者是资金、时间、信誉的损失。

因此如果秉持“所以无论风险有多小都要竭尽全力去避免”的朴素原则,那需要付出的额外成本很可能会高于bug爆发造成的综合损失,这显然是划不来的。那么认识尾部风险的正确姿势应该是如何的呢?

二. 埃博拉病毒与诱发风险

单纯考虑风险爆发的大小这一个维度显然无法正确的认识风险的,上文分析了只考虑破坏性大就畏首畏尾结果是得不偿失,但如果过于“理性”的通过概率*损失的数学期望模型来判断风险大小,则又会陷入另一误区。

以埃博拉病毒为例,当年病毒流行的时候,全世界各国政府、医院和科研机构都高度紧张,密切关注病理学和临床动态。可是稍微已统计就会发现,其实每年死于埃博拉病毒的人数远少于每年洗澡淹死在自家浴缸里的人数!如果说横竖都是死,损失是一样大的,而病毒致死的概率更低,因此数学期望更小。那埃博拉病毒可怕在哪呢?为什么会引起各界高度关注?

答案是,一个人在自己浴缸洗澡淹死是个“稳定主义事件”,无论再过多少年,除非浴缸被我们的文化理念彻底抛弃,这个概率是不会有太大的波动的,一个人淹死在浴缸里也不会导致周围其他人淹死在浴缸里的概率增加。但病毒致死则是个“达尔文主义事件”,与环境关系重大,条件“成熟”的时候,其概率会显著增长。 如果不加以重视防范,今年死亡人数可能是几百人,明年就可能变成几百万人!回头看之前举的航空行业的例子,看过空中浩劫系列就知道,每次空难都会推动整个行业变得更加完善(例如911事件改善了安检流程),结果就是坐飞机越来越安全,其风险特征越来越稳定。

我们再回到QA的层面上再来看小概率风险,任何小概率的bug都是不容忽视的,原因就在于互联网业务与软件环境的快速变化。一个被忽略的,没有及时处理或记录的bug可能在当前环境运行一万年都不会爆发,但可以肯定的是一两周之后就没人记得了。也许半年之后经历几次迭代,由于环境变化其爆发概率大增,在某次发布后引起了线上问题。但这时排查的第一反应一定是这次上线的发布内容有问题,几乎没有可能准确定位到半年前的一个小概率bug,这大大影响了hotfix的效率,也大大增加了修复成本和损失。因此对于不能立即修复的小概率bug,需要留档并对其在线上的复现保持密切关注。

小结一下,同样是小概率事件,有些属于“稳定主义”,受外部环境影响不大,长期存在但不必为此焦虑;而有些属于“达尔文主义”,与环境紧密相关,随时准备突变黑天鹅,这样的概率再小也不能忽视。

三. 恐怖主义与共识基础

这一部分我们从哲学角度来思考一下。有一派主流观点认为,人类之所以能秒杀其他一切物种创造文明,是因为我们有想象层面的共识。这里不详细展开说,举几个例子,货币是对国家信用的共识,我们接受用物品换货币是相信国家信用保障将来货币能换回我们想要的物品;公司是员工对组织存在的共识,无论业务变更、硬件替换还是人员流动公司仍然在那。

从这个角度我们来看一下恐怖主义为什么让世界所有国家如临大敌(当然诱发风险也能解释部分原因)。在欧洲中世纪时,各王国间战争暴力随处可见,人民受到的威胁甚至远大于今天的恐怖主义,但不会有哪个国王因此受到退位的威胁,因为当时暴力手段是政治博弈的基础,而对国王地位合法性的共识也不包括保护民众免受战争。虽然暴力的破坏力很大,但属于“皮外伤”,不会动摇一个王国的政治共识基础,在这种氛围中是不可能存在恐怖主义的。而现代的国家政权不一样,其合法性主要建立在和平手段保障公民人身财产安全免受暴力侵害上,恐怖主义事件尽管一次造成伤害有限,但直接动摇了现代国家的共识基础,是严重的“内伤”,因此成为所有现代国家的公敌。

对于QA而言,保障代码可靠和线上运行平稳就是我们存在的共识基础。纵容小概率bug上线不一定引起线上问题,即便bug爆发可能也不一定引起严重后果,但这样的事件如果经常发生则势必有损于大家对QA的共识认同。我们记录bug评估风险、跟进线上问题对整体效率的贡献可能有限,但这些行为恰恰是对共识的重要塑造

小结一下,同样是破坏性事件,有些属于“皮外伤”,看着可怕但不危及生命,恢复容易;有些属于“内伤”,会动摇我们的共识基础,影响深远,不可容忍。

四 总结

现在回头看尾部风险,其实开头的描述“那些发生概率很小,但破坏力很大的风险”并不完全准确。更加精确的描述是:目前发生概率小但可能被诱发的,会破坏共识基础的风险。所以我们不应该杞人忧天仅凭破坏力大就草木皆兵,也不该自恃理性仅凭数学期望小而掉以轻心。“达尔文主义”和“内伤”才是我们真正需要防范的风险。

欢迎留下你的思考和评论,愿我们共同进步~

你可能感兴趣的:(测试大局观:如何理解尾部风险)