我們要在一個交通近海又有充足水源的地方,建一棟「循環工廠 (Circular Factory)」。交通近海是因為要方便運輸海岸廢棄物,充足水源是因為需要淡水做廢棄物處理與生物使用。接下來我們要發展的方法論,是從需求出發,先有單元測試,後才有開發代碼,這就是所謂的「測試驅動開發」,所以接下來的幾篇文章都會用這樣的方法作為行文架構。
「單元操作 (Unit Operation)」是化工的專有名詞,意指各種不同的工業,其製造程序雖然很繁複,但每一個程序可分為若干步驟,每一步驟所發生的物理變化具有相似性,此每一步驟稱為一個單元操作。同一個單元操作可以在不同之化工程序中出現,例如在糖液濃縮或海水淡化的程序中,由溶液中蒸發液體的原理是相同的,因此蒸發是單元操作的一種,許多其他的步驟也是具有單元操作的特性,包括萃取、乾燥、蒸餾、吸附、調濕、過濾、結晶、混合、研磨、分離及固體輸送等。其精神是不是與「軟體單元 (Software Unit)」有異曲同工之妙呢?接下來,我們就會試著把這兩個領域的相似概念整合起來,並應用到實際工業中。
值得一提的是,V Model 開發方法其實是一種測試驅動開發方法,特別從接受度測試來看,在工業中常常是由法規驅動開發,法規就包含了一系列的測試項目,所以一開始我們就知道要面臨這些測試、有這些需求,因而再展開為架構設計與細部設計,最後實作。所以這是一個大尺度和小尺度有趣的地方,當中的串連就靠需求管理,也就是可追溯性 (Traceability) 管理。
軟體工程就像是一座橋樑,連接著現實世界與虛擬世界,你來我往是雙向的。它將現實世界中的需求轉為代碼,又將代碼實現對應回需求,我們稱之為驗證與確效 (V&V)。所以這顯然是一門藝術,什麼是「藝術」?藝術是憑藉技巧、意願、想像力、經驗等綜合人為因素的融合與平衡,以創作隱含「美學」的器物、環境、影像、動作或聲音的表達模式,也指和他人分享「美的感覺」,或「有深意的情感與意識」的人類用以表達既有感知,且將個人或群體體驗沉澱與展現的過程。
說穿了,軟體工程是一個設計過程,循環經濟也跟設計有關,是一種設計思維。什麼是「設計」呢?設計簡單講就是一種「有目的的創作行為」,而循環經濟就是我們的目的。同時設計的過程要經歷情報的收集及分析,再將不同的情報漸漸地築起為各種產品或工作產品 (Work Product)。
關於 Clean Architecture,安教授個人認為是很重要的,原因是無論是從頂而下,或是自底而上,都有可能落入架構失敗、不好改的困境,也有可能花的時間太長、在有限資源內達到不目的而失敗。因此,我們理當帶著異象與目的出發,以終為始,Clean Architecture 是一個經驗總結,是所有設計原則、設計模式、設計實務的總結建議,我們所需要注意的就是讓它保持彈性,所以,一開始我們的起點會長這樣: