Christopher Alexander 在「建築的永恆之道」中,開頭第一句就說了:「無心之心,道之所存」。作者認為建築或城市沒有所謂的「好」,而是要追求一種「永恆之道」。只有踏上此道,建築或城市才會生機勃勃。這是一個不能被「求取」的過程,而是要我們不斷「探索」的。
軟體工程何嘗不是如此?
終於來到這一天了,第三十天。
過去的二十幾天中,我們聊了很多有關單元測試的主題。我們對測試的基本概念有一些了解,我們釐清了單元測試與整合測試的異同,以及責任歸屬,並試寫了人生第一個單元測試。
接著,隨著應用場景的複雜化,我們分別使用直接操作與借力於 Mock 工具的方法,控制依賴,以完成對 Command 與 Query 的測試。更複雜的多線程與例外場景也沒難倒我們,值得慶祝!
有了測試的保護,我們膽子就大了,以前不敢做的「重構」,現在也敢做了,而且為了更好地掌握重構時機,我們還練習了一下如何聞出程式的「壞味道」。
我們知道測試是為了幫助開發,所以分別紹了「倫敦派」與「芝加哥派」的 TDD,同時聊了近年蠻紅的 Clean Architecutre 與 CQRS,然後交錯使用上述兩大派別的 TDD 方式,完成一個實際案例的操作。
波士頓派?圖片截自愛伯特吃喝玩樂全記錄
最後,在流程上,Git、XP、Scrum、DevOps 等近年常見的 Solution,我們也都聊了一輪。
說好的聊單元測試呢?
你沒發現嗎?上述的這麼多軟體工程實踐,沒有一個可以離開單元測試啊!或者說,沒有單元測試的話,這些東西就很難發揮它們完整的實力呀!隨便舉例,沒有單元測試你敢重構?沒有單元測試你敢用 CI/CD + 主線開發,一天發佈好幾個版本上產線?
如同一開始說的,測試是一種實驗,計算機是一種科學。科學的「正確」,是靠一而再、再而三,不斷重複同樣嚴謹的實驗而堆疊出來的。沒有這些實驗,現代人的日常生活不可能這麼便利。同樣的,沒有足夠多且品質好的單元測試,你的日常工作非常難變得方便有效率。
有人問過筆者,這麼多事情要做,我要從哪裡開始?我都喜歡舉同一個例子:
你在一個深山小屋,外面風雪交加,你又餓又凍,小屋中有壁爐、油燈、爐灶與一些生食,而你只有一根火柴,請問你應該先點哪一個?
「你應該先點火柴!」火柴不點,這些工具一個都派不上用場,再厲害也沒用。
在軟體工程的實踐中,「單元測試」就是那根火柴。所以,不用再問人家要先怎樣、什麼什麼才是 Best Practice 了。先開始你人生的第一個單元測試吧!接著再拿其他適合的 Solution 來解決問題,才會事半功倍!
不要想像有一天你會得到一個「乾貨」,上面寫著可以「長治久安一勞永逸」的軟體工程實踐方法集。世上不存在那種東西。如同 Chirstopher Alexander 說的,有一天當我們真正踏上了程式的永恆之道,將感受到的是和平安閒,就像在海邊散步,或是在草原上大步邁進一樣。
最後,醒醒吧,不要奢求老闆會多給你時間做單元測試,那本來就是你的工作。別忘了,單元測試是功能的一部份。
好了,2021 的單元測試 IT 鐵人就聊到這兒了。單元測試只是改善軟體工程實踐的第一步,後面還有很多要解決的事等待著我們,那就先去做了再說吧!祝各位長官一帆風順!
圖片截自電影 - 無間道
謎之聲:「道可道,非常道。」
IT 鐵人結束後,筆者的技術文章寫作不會停止,我還是會在我的個人 Blog 繼續寫作,對軟體工程與 Coding 技巧有興趣的朋友,別忘了:
訂閱我的部落格:https://medium.com/kuma%E8%80%81%E5%B8%AB%E7%9A%84%E8%BB%9F%E9%AB%94%E5%B7%A5%E7%A8%8B%E6%95%99%E5%AE%A4
按讚我的臉書粉絲團:https://www.facebook.com/kukumamaya
追蹤我的 YouTube 頒道:https://www.youtube.com/channel/UCR8o_Dmwv1Zevk7lFe-HqHQ
有緣再相會!
ithelp2021