乔梁在MTSC大会上分享了主题为《一致性是研效提升的必经之路》的演讲,演讲内容主要是如何提高软件研发效率。他从香农在信息论中的熵增定律出发,讲到像软件这样的复杂系统,必须尽可能减少不确定性因素的影响,努力提高软件研发的一致性,从而达到提高软件研发效率的目的。 本文主要基于熵增定律,探讨该定律对软件测试行业是否存在指导作用。
首先,我们回顾一下什么是熵增定律。 这原本是热力学中的概念,一个孤立系统总是趋向于熵增,最终达到熵的最大状态,也就是系统的最混乱无序状态。1948年,香农将热力学的熵,引入到信息论。对于一个信息系统,如果没有外力作用,最终也会达到信息熵最大的状态,信息系统会越来越混乱,不确定性会越来越强。
影响软件系统运行的因素非常多,每个因素之间都会相互影响,所以根本无法根据单一因素来预测软件最终的状态。这和股市很相似,你最好永远不要通过某个单一信息预测股市的走势,因为单一因素和最终的结果不是线性相关的。
Bug 是如何产生的
一个软件写好了之后,你直接部署好,过了一段时间再去看,它可能就不是你预期的样子了,可能早已经报了网关错误, 可能页面展示 500 错误,或者干脆无法访问了。 有很多原因都有可能造成这种混乱的状态,比如某个用户的操作触发了一个隐藏很深的缺陷,对程序造成了一个很小的修改,之后其他用户再进行了一些其他的操作, 也有可能是遭受恶意攻击等, 当然还有可能是你的服务器到期没续费,或者是云服务商倒闭了。
所以就算你的软件已经接近完美,不再需要任何修改和更新,你可以很长时间不去维护,软件也会变得越来越混乱。 而在一个产品的实际研发过程中,我们还需要不停的为软件系统添加新功能,增加新特性,带来更多信息(比特),导致系统更加复杂,这些新信息会进一步增加软件的信息熵。
一个软件系统越复杂,影响的因素越多,就越难通过人力控制。几乎所有的公司都想利用已经成熟的技术体系提高研发效率,但是实际上研发效率只会越来越低,一个产品往往是初创阶段研发效率高,越到后面效率越低。 原因之一就是因为业务增长必然导致信息熵增加,不确定性更高,干扰因素更多,从而拖慢研发进程,产生更多 bug。
在信息论中,信息熵通常用概率的倒数表示。概率越低表示程序的不确定性越高,信息熵越高,随机性事件就更容易形成 bug。
哪些主要因素会增加系统的不确定性?
第一种因素是依赖的环境不确定。比如操作系统发生变化、数据库品牌和版本发生变化、访问的文件权限发生变化。
第二种因素是状态管理。可能发生变化的任何数据都处于某种状态,比如程序中的变量、数据库中存储的数据、文件中的数据。 这些数据可能被同一个系统的不同阶段读取和修改,但是外部根本不知道他什么时候修改的,从而造成不确定性。