淺談正視架構設計的重要作用
總的來說,國內的多數企業仍然是采用“瀑布模型”作為軟件開發過程的主要模型。雖然在采用瀑布模型的同時可能會引入原型法以及諸如MSF等其它軟件開發方法與過程,但隨著項目時間的推進,這種“瀑布模型”會慢慢演化為“邊做邊改模型”。
從事過軟件項目開發的專業人士都有這樣的困惑:為什么到了項目接近尾聲的時候,仍然還有那么多沒有解決的問題?
理論上講,應該是先分析,后設計,再編碼,那為什么項目在交貨以后,我們還在不斷的編寫設計文檔?為什么每次客戶需求發生變更,我們又要投入大量的資源來應對不斷變化的客戶需求?為什么軟件開發會碰到這么多困難,我們天天加班加點,不斷地去解決開發中碰到的種種問題,可是問題越解決越多,得到的效果卻那么不盡人意?
項目出現這些問題,原因很多,概括起來可以分為兩種:管理因素和技術因素。國內普遍重視管理因素,而忽視技術因素,所以出現層出不窮的問題也就無法避免。
軟件架構設計屬于技術因素,它位于軟件開發過程的前期階段,架構設計的過程,是分析客戶需求、挖掘非功能性需求、并將客戶需求所定義的領域知識轉化為軟件系統模型的過程,由此可見,架構設計所涵蓋的范圍非常廣泛。
目前,國內對于軟件架構的認識,還存在這樣或那樣的誤區。難道只有當設計人員在為軟件項目配備了充足的資源,然而卻得不到預期的結果時,才會反思:是不是軟件開發本身出現了問題?
架構設計源于客戶需求
在進行需求分析的過程中,系統分析員將客戶需求轉化為計算機模型,然而在這個過程中,系統分析員本身的特性也就決定了這一角色很難把握住客戶的非功能性需求。
需求需要挖掘,尤其對于大型的軟件系統而言,光靠系統分析員這個單一的角色,很難完成需求分析與挖掘的艱巨任務。在需求分析的過程中,架構設計師更為關注的是系統的非功能性需求,例如穩定性、可擴展性、可維護性、安全性、高效性等等,這些需求都是需要挖掘的。
如何挖掘?挖掘方式取決于核心需求。舉個很簡單的例子,客戶需要實現兩個系統的數據傳輸,這是個核心功能性需求,而在這個需求的背后,還包括了“傳輸過程要求可靠”、“需要采用一種特定的數據格式進行傳輸”、“由于數據包含一定的機密因素,因此需要加密,并需要選擇合適的加密算法”等等一系列的非功能性需求。
此時,架構設計師不僅需要了解客戶本身的功能需求,還需要能夠發掘非功能需求。因此,優秀的架構設計師一定是一個經驗豐富的需求工程師,需求分析讓架構設計師知道,我需要考慮哪些因素,而深厚的軟件技術功底讓架構設計師知道,如何去考慮這些因素。可見,架構設計源于客戶需求。
架構設計源于對知識的不斷積累
首先應該認識到,沒有對領域知識、軟件系統特性與軟件技術等的深刻理解,就無從談及架構設計,而深厚的領域知識與技術經驗則是源于不斷的積累。
目前,市場上確實很多產品在架構上已經非常成熟和穩定,但這些產品的成熟架構也是通過長期不斷的實踐與積累才逐步形成的。經驗豐富的架構設計師可以在開發產品的同時總結出一套架構模式,這對維護產品的體系結構,以及開發同類產品都有深遠的意義。
從另一個角度講,產品的架構并非一成不變,隨著技術的不斷創新與發展,新技術一定會被應用到現有的系統架構中。此時,軟件架構可能需要進行調整,我們也不能再說,我們沒有必要去關心這些產品架構了。
架構設計是一種取舍過程
實現某一非功能性需求,可以有很多種方法,但并不是每種方法都是最合適的,這在架構設計的過程中需要做出取舍。例如,為了使得軟件系統具有易擴展、易更改的能力,我們可以采用插件體系結構或內嵌腳本系統結構,兩者都可以使得軟件系統具有方便擴展的能力。
然而,如果客戶的業務流程會經常變化,或者軟件系統產品會應用到具有不同業務流程的多個客戶時,采用后者可能會更加符合軟件本身的特點。
當今IT業技術層出不窮,在特定的應用場景中,采用何種技術何種模式最合適,這就是架構設計的取舍。JAVA和.NET孰好孰壞?討論這樣的問題也不再有意義。軟件工程大師Martin Fowler曾經說過:架構師是對所有重要事情做出決定的人,這一決定也囊括了取舍。
架構設計將服務于整個開發過程
良好的架構設計不僅使得軟件系統能夠滿足客戶需求,它更為軟件系統帶來了安全性、穩定性、可擴展性等屬性,而這些屬性在應對客戶需求變更、提高軟件可測試性與可維護性、降低維護成本、提高開發效率等各方面都起著非常重要的作用。
客戶所需要的是可以用于生產實踐的最終產品,他們自然不會去關心你的軟件系統采用何種設計和架構,但作為軟件系統的分析者、設計者和開發者,我們必須為軟件產品尋求一種合理的架構設計,因為它不僅能夠使系統滿足非功能性需求,而且能夠降低開發成本和維護費用。
總之,架構設計是軟件開發過程的重要組成部分,它不是單純的技術,也不具有一種特定的形式,更不是與客戶需求無關的。良好的軟件架構能夠服務于整個開發過程,有效地降低項目風險,確保項目能夠朝著健康的方向發展。因此,我們必須重視架構設計在軟件開發中的重要作用。
【編輯推薦】




























