你的代码活着吗?
什么是 legacy code? 没有自动测试保护的就是 legacy code 。
-Michael Feathers, 《Working Effectively with Legacy Code》
讲直白一点,legacy code 就是没爹没娘没靠山,被人射后不理的产物。谁都可能欺负它、弄坏它,简直就是一直像死了般却仍在线上活着的产品代码。没有任何一个人喜欢跟死气沉沉的代码打交道。
图片来源:史上最强哲学入门
梵我合一中的重要概念:我存在的意义取决于感知这个世界,所以我存在。
-古印度哲学家,耶耆尼伐尔克
Production code 本身的存在,其实是没有任何意义的,那就只是骨子里 0 与 1 的组合,以一种符合规则、特殊文法限制的一种语言方式所呈现的文字罢了。而这样的东西静静地摊在萤幕上,存在于某种形式的储存体中,其实一点意义都没有。
Production code 只有动起来,才有生命。
而它的意义取决于当它动起来时,能为谁带来什么样的好处,为谁解决什么样的问题,也就是 user story 的三个关键点,这说明了这段 code 为什么需要存在,为何而活。
但只有这样的解释仍然不足以让它真实的活着,只有动起来才是真实的活着。怎么让它动起来呢?使用者该怎么用它呢?使用者的需求是什么呢?
最简单的方式就是用测试程序去模拟该怎么使用它,它会怎么动起来,当它如同预期动起来时会有什么样的改变,就能为某些人带来价值,这才是 production 活着的意义。
测试程序的目的,在于让 production 能活着,确定它能如同预期般的运作。
测试程序的意义,在于描述着什么样的情况下 production code 会怎么运作,在于描述:使用者应该怎么使用 production code 。
与死气沉沉的 legacy code 相比,另一种则是跟着测试程序共生,一直活着的 production code 。
那是种活跳跳、新鲜的程序代码,充满活力真实活着的程序代码,需求喜欢找它互动,因为感觉放心可靠而总是无后顾之忧。
产品代码、测试程序、活文件他们三兄弟总是团结一致,这才叫「活着」的产品、「活着」的程序代码。
测试程序就是 production code 的心跳,就是 production code 活着的证明,就是 production code 的维生器,就是 production code 的使用说明书,就是使用者故事的出路,就是解决使用者需求的方式。
想找个例子比喻一下大家都不喜欢和 legacy code 打交道的感觉,我脑袋不自觉地浮出一个「无间道」的画面。琛哥说:「你见过有人跟死尸握手的吗?」。
你的测试程序与产品代码,有达到梵我合一的境界吗?