Neal Ford

軟體不像「硬」工程#

開發者喜歡用受折磨的比喻來向家人、配偶和非技術人員解釋軟體開發是什麼。我們經常訴諸橋梁建造和其他「硬」工程學科。但當你開始深入推敲這些比喻時,它們很快就站不住腳。事實上,軟體開發在許多重要方面都不像「硬」工程學科。

造橋與寫軟體的差異#

相較於「硬」工程,軟體開發的世界大約處於橋梁建造者用「在上面滾重物看會不會倒」來測試橋梁的階段。過去幾千年來,工程師已發展出數學和物理學,讓他們不需要實際建造就能驗證結構方案。軟體沒有這樣的東西,也許永遠不會有,因為軟體本質上是非常不同的。

Jack Reeves 在 1992 年發表的經典文章 “What is Software Design?” 深入比較了軟體「工程」與傳統工程,至今仍然非常準確。Reeves 描繪了一幅相當悲觀的圖景,但 1992 年缺少的正是軟體的強大測試文化

測試是軟體的工程嚴謹度#

測試「硬」的東西很困難,因為你必須先建造才能測試,這阻止了投機性的建造。但軟體的建構過程成本極低。我們已經發展出一整套工具生態系統——單元測試(unit testing)mock 物件、**測試工具(test harness)**等——讓建造和測試變得容易。其他工程師會很羨慕能夠在真實條件下建構並測試的能力。

作為軟體開發者,我們應該擁抱測試作為軟體的首要(但非唯一)驗證機制。與其等待某種軟體微積分出現,我們已經擁有確保良好工程實踐的工具。

測試需要時間,正如結構分析需要時間一樣。兩者都是確保最終產品品質的活動。是時候讓軟體開發者承擔起對自己產出負責的責任了。測試本身並不充分,但它是必要的。測試就是軟體開發的工程嚴謹度。