[隨筆] 你的程式碼活著嗎?

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

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

blog 與課程更新內容,請前往新站位置:http://tdd.best/