系統架構與軟體架構
再深一層分析,無論是建築工程領域,還是其他工程領域(包括電腦科學),從它們的演化曆史來看,直覺上我們似乎能夠發現其共同點:即從哲學的角度上來說,它們都是人類為了克服與生俱來的恐懼而進行的創造、演化和發展。
人類到底恐懼什麼呢?
我們可以注意到,人類本能當中有這樣一個重要的共同點:對不確定的、感覺到威脅的事物具有強烈的不安全感。這就激發了人類盡量把這些恐懼的因素控制在最小範圍內的願望。這也就是各個工程學科(包括系統及軟體工程領域)在日積月累的發展曆程中,逐步正常化、科學化、系列化以及統一化,最終保證人類在複雜環境中,當不確定的因素存在時,依然能夠進行有效控制和協調。
基於同樣的目的,電腦科學中也誕生了一個重要的概念,即“系統架構(System Architecture)”。
1997年,Eberhardt Rechtin與MarkW.Maier在其著名的研究論著中,為電腦科學界總結了人類在系統架構方面的實踐成果,從而奠定了系統科學和系統架構在電腦科學中的基石。他們通過實踐總結,列舉了一系列系統架構的應用領域:工業系統、航空系統、軟體與資訊技術系統等。無論是什麼樣的系統架構應用領域,應用系統架構原理的目的都是一樣的,即完整地、高一致性地、綜合全面地、平衡各種利弊地、有技術和市場前瞻性地設計系統和實施系統。Eberhardt Rechtin 與MarkW. Maier這樣的方法論級的實踐總結,當然立即受到了工程界的熱烈歡迎。因為本能的不安全感,會讓我們不由自主地摒棄那些不確定的、不系統化的架構經驗。
我們平常還能看到這樣一種現象:有的行業的架構設計從業人員把自己叫做“系統架構師”(System Architect);有的軟體工程領域的架構人員把自己也叫做“系統架構師”,而不是“軟體架構師”。從比爾•蓋茨稱呼自己為“軟體架構師”(Software Architect)來看,他非常明白這兩個詞的聯絡和區別。嚴格地講,Eberhardt Rechtin與MarkW.Maier提出的“系統架構”或“系統設計”,與我們平時所談到的“軟體架構”或“軟體設計”既有千絲萬縷的聯絡,又有比較明顯的區別。
當我們把軟體技術與其他技術(例如物理技術、化學技術、機械技術、電子技術等)一起放在曆史的河流中進行比較時,我們就會發現:為了開發和生產一個產品,其他相關技術的投入和花費的逐年增長率,要遠遠低於軟體設計與開發投入的逐年增長率。
在軟體技術方面投入的增長率高於在其他技術方面投入的增長率,其主要原因是系統或產品不像過去那樣嚴重受制於硬體或其他技術,而是更加依賴那些非功能方面的要求,這體現在更加依賴於系統對軟體及其架構品質的要求。
我們可以以一個醫學行業的CT機(Computed Tomography,電腦X線斷層攝影機)系統為例來進行分析。CT機是現代醫學診斷中不可缺少的裝置。通過X線束對人體的某一部分按一定厚度的層面進行掃描,由於人體各種組織的疏密程度不同,X線的穿透能力也不同,所以檢測器接收到的射線就有了差異。由此產生的訊號轉變為數字資訊後由電腦進行處理,並輸出到顯示屏上,顯示出人體組織的映像,以發現病變並確定病變的相對空間位置、大小、數目等。
由於CT機的關鍵組件包括X線系統、高壓發生器、檢測器、成像系統、機架與床等,涉及電子、機械、影像處理、電腦等學科。綜合考慮,針對CT機品質方面的系統級要求(CT機系統級的要求其實很多,僅列出部分作為參考)如下:
安全性(Safety)
保密性(Security)
可靠性(Reliability)
健壯性(Robustness)
可製造和裝配性(Manufacturability and Assembly,機械設計的人員對這個詞不會陌生)
可測試性(Testability)
可服務性(Serviceability)
可配置性(Configurability)
可安裝性(Installability,你可以在國際軟體測試資質認證委員會ISTQB提供的軟體測試標準術語表裡找到這個詞)
可演化性(Evolvability)
可移植性(Portability)
可升級性(Upgradeability)
可擴充性(Extendability)
可維護性(Maintainability)
可處置性(Disposability,環境工程的人員對這個詞不會陌生)
除了CT機系統級的品質要求外,我們還可以列出CT機在其他非功能性方面的要求,例如:
可用性(Useability)
有吸引力的映像介面
強輸送量的生產能力(Throughput or Productivity)
快速的回應時間(Response Time)
高品質的影像處理
狀態可重現性(Reproduceability)
狀態可預測性(Predicatability)
高精度計算
低廉的成本
低廉的運行操作成本
與周邊環境的強互動能力(CT機操作人員、病人、維護人員等)
耗電低
較低的其他資源消耗(水、空氣、化學藥劑等)
CT機的大小和重量適中
資源使用率高
運輸和移動方便
CT機市場技術領先性
CT機設計與行業標準吻合
如果把上述所有CT機系統的非功能性要求做一下匯總和分析,我們就能發現:這些要求都是系統級的設計要求;如果加上CT機的功能要求,就能夠代表要生產的CT系統是什麼樣子、未來會如何運作;這些非功能性的要求,有些是與機械和電子設計相關的,但絕大多數是與軟體架構和設計相聯絡的。這也就意味著,一個完整的CT機系統的非功能性指標要求是由多個子系統和多種技術結合在一起才能得以實現,即一個系統往往是軟硬結合的。
從CT機系統這個例子,我們可以清晰地看到:一個系統的實現是結合了各種子系統和各種技術的實現。系統架構的主要任務是界定系統級的功能與非功能的要求、規劃要設計的整體系統的特徵、規劃並設計實現系統級的各項要求的手段,同時利用各種學科技術完成各子系統的結構構建。
而 軟體架構首先要理解系統架構,並從軟體架構學科的視角對系統架構提出相應的意見,同時從軟體的視角協助規劃、設計那些實現系統級的各項要求的手段,並最終為各軟體子系統提供架構和設計。
從中可以看出,在系統架構活動中,由於對軟體越來越深入的依賴,軟體架構的任務也顯現出重要的作用。而且系統架構與軟體架構是緊密聯絡和互相依賴的。本書的重點將主要集中在“軟體架構”,而非“系統架構”上。