你的代碼活著嗎?
什么是 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 打交道的感覺,我腦袋不自覺地浮出一個「無間道」的畫面。琛哥說:「你見過有人跟死尸握手的嗎?」。

你的測試程序與產品代碼,有達到梵我合一的境界嗎?