2009年6月8日 星期一

W07 一般工程設計與軟體設計的不同

最近參與公司內的討論,聽到了"因為軟體本質上的不同,所以一般工程方法難以適用在軟體工程"的話語。發言者強調軟體是易變的,所以無法像工廠一樣產出固定不變的元件,同時設計也常因需求改變而隨時變動,建立在易變產出上的方法自然無法固定。

依照慣例,我還是仔細地思考了一下話中的含意。

根據自己的經驗推論,建築工程是三度空間的設計,但是軟體設計就像是四度空間的思考。像建設高速公路時只要在必要的通道上設收費站就一定收得到過路費,但是軟體即使規定好設計的層次,但任誰都可以修改為完全不經過那一個點而進入;汽車的動力從引擎經過傳動軸再傳到輪胎,但是在程式定義上直接讓動力直接轉動輪胎也是可行的作法;還有就是蓋房子時九樓往上一層一定是十樓,但是在軟體裡卻可以跳躍到任何一層,完全不受空間限制。

就製作的成本考量,一般工程需要零件時因為自己開模製作很慢於是會開好規格訂購現成零件,但是軟體元件卻因程式修改快速且成本不大,所以就在該要的地方直接作出可以應付的結果,全然不去考慮日後重用的兼容問題,反正複製一個後再改程式微調差異即可。

只注重結果的思維造成跳躍式的使用、零成本的修改(指非人力的)造成隨意的改變,雖然執行的結果相同,卻使得產出的程式碼有難以統一的多變風格、修改時也不易找出問題的真正原因。也由於同樣的需求會觸發各種不同的想法與設計,我們又無法像一般工程那樣證明哪個作法是最好的而規定下來,更增加了產出的不確定因素。

邏輯上只要檢查不出錯誤就可以說是對的。在沒法證明哪一種作法具有全部好處時,大家只能針對自己著重的方向使用自己覺得好處最多的方法。然而在對應種類眾多的時刻,選擇作法時比照一般工程嚴謹地讓每個零件限定只能接續特定的零件,是否就能適用一般工程的作法呢?

沒有留言:

張貼留言