曾水根 陳海燕
【摘 要】隨著軟件行業的快速發展,軟件工程的規模越來越大,復雜程度越來越高,軟件設計的核心已經超越了傳統的“算法+數據結構=程序”的設計模式,取而代之的是對系統的總體結構的設計和規范。軟件架構師在軟件開發過程中充當著越來越重要的角色,在整個軟件的生命周期中的重要性日益突出。本文通過剖析軟件架構師的定義分析了其在軟件開發過程中的作用。
【關鍵詞】軟件;軟件架構;軟件架構師
0 引言
大部分軟件企業正在遭遇“軟件危機”,主要表現在:軟件開發效率低,開發周期長,開發成本高,可維護性和使用性差,不能很好的滿足用戶個性化和頻繁的業務變化的需求。而日益激烈的市場競爭和經濟全球化,賦予軟件工程以新的特征:有效率、有效用地滿足用戶個性化需求的定制,快速響應和適應市場及業務的變化,以及低成本、高收益等[1-2]。
低成本、高收益軟件工程的實現離不開軟件架構(Software Architecture),軟件架構是一個軟件系統中的核心元素,軟件架構師則是這個核心元素的實施人,是一個軟件工程成敗的關鍵。
1 關于軟件架構
軟件架構的定義不是唯一的,在不同的著作上,不同的作者,對于軟件架構的定義也不統一,角度不同,定義不同。
在“軟件構架簡介”中,David Garlan和 Mary Shaw認為軟件構架是有關如下問題的設計層次:“在計算的算法和數據結構之外,設計并確定系統整體結構成為了新的問題。結構問題包括總體組織結構和全局控制結構;通信、同步和數據訪問的協議;設計元素的功能分配;物理分布;設計元素的組成;定標與性能;備選設計的選擇。”
也有觀點認為軟件架構考慮的是相對的宏觀問題,它是重要模塊、過程和系統數據的集合,包括軟件的結構、彼此的準確關系、擴展與修改方式,依賴的技術、系統性能和靈活性獲得方法,以及系統實施或修改計劃等。
筆者更贊同后一種觀點。
2 軟件架構師的定義
軟件架構師是軟件行業中一種新興職業,工作職責是在一個軟件項目開發過程中,將客戶的需求轉換為規范的開發計劃及文本,并制定這個項目的總體架構,指導整個開發團隊完成這個計劃。主導系統全局分析設計與實施、負責軟件架構和關鍵技術決策的人員[3]。
軟件架構師應能迅速抓住問題要害,并做出合理的關鍵決定的能力,具備戰略性和前瞻性思維能力,善于把握全局,能夠在更高抽象級別上進行思考,主要包括如下:
(1)對項目開發涉及的所有問題領域都有經驗,包括徹底地理解項目需求,開展分析設計之類軟件工程活動等;
(2)具備領導素質,以在各小組之間推進技術工作,并在項目壓力下做出牢靠的關鍵決策;
(3)擁有優秀的溝通能力,用以進行說服、鼓勵和指導等活動,并贏得項目成員的信任;
(4)以目標導向和主動的方式來不帶任何感情色彩地關注項目結果,構架師應當是項目背后的技術推動力,而非構想者或夢想家(追求完美);
(5)精通構架設計的理論、實踐和工具,并掌握多種參考構架、主要的可重用構架機制和模式(例如J2EE架構等);
(6)具備系統設計員的所有技能,但涉及面更廣、抽象級別更高;活動確定用例或需求的優先級、進行構架分析、創建構架的概念驗證原型、評估構架的概念驗證原型的可行性、組織系統實施模型、描述系統分布結構、描述運行時刻構架、確定設計機制、確定設計元素、合并已有設計元素、構架文檔、參考構架、分析模型、設計模型、實施模型、部署模型、構架概念驗證原型、接口、事件、信號與協議等。
3 軟件架構師的工作
軟件架構師在軟件開發中的重要性日漸突出。可以這樣說,一個軟件架構師工作的好壞決定了整個軟件開發項目的成敗。
作為軟件架構的設計者是關系到軟件成敗的關鍵因素,缺少了軟件架構師的工作,軟件產品的生產率、上市時間、質量和成本等諸多方面就不能得到應有的保障。
(1)軟件架構創建的意義
使用合適的軟件架構可以在需求變動的情況下迅速的進入變動之后的軟件開發。如果拿一棟大樓來比喻整個的軟件產品。那么軟件架構就好比大樓的骨架。沒有好的軟件架構,軟件產品的質量可想而知。軟件架構是軟件產品的精髓,只有在合適的產品上采用合適的軟件架構才能真正的提高軟件產品的質量。
(2)軟件架構的創建過程
一旦項目立項,系統分析師把項目的需求分析提交過來之后.根據該項目的整體解決方案,軟件架構師就必須找到適合該軟件的架構。
確定了軟件架構之后就可以依據它來組建項目團隊,并創建一個骨架系統作為增量式開發的基礎,把傳統的軟件開發模式和敏捷開發(Agile Development)模式結合起來。
為了軟件產品的升級及復用,小型的軟件產品也應該設置軟件架構的設置環節,大型的軟件產品則必須要有軟件架構的設計環節。那么,大型軟件產品的開發模式就變成了傳統軟件開發模式、軟件架構設計和敏捷開發模式的綜合。小型軟件產品的開發模式就變為了軟件架構設計和敏捷開發模式的綜合。軟件架構設計不論在大型軟件產品還是小型軟件產品的開發模式中所處的位置基本上是一樣的.都是處在需求分析后進行軟件架構的設計。對于需求不確定或者軟件架構師認為變動頻繁的功能模塊采用敏捷開發的模式。如果需求變動,采用敏捷開發的方式修改相應的功能模塊。
(3)軟件架構資源庫的創建與維護
把不同的軟件架構形成一種知識,供以后的項目或其它軟件架構師、系統分析師使用。軟件資源庫中包括所包含每一種軟件架構的文檔說明,實例圖,使用該軟件架構的軟件產品等,最好能創建一個輔助工具軟件來維護軟件架構資源庫。
(4)其它作用
隨著開發進程的推進,軟件架構師的職責或關注點不斷地變化:
1)在需求階段配合系統分析師;
2)需求明確后,軟件架構師要進行軟件架構的設計;
3)隨后,軟件架構師的關注點開始轉移到組織開發團隊成員和開發過程定義上;
4)在編碼階段,架構師則成為詳細設計者和代碼編寫者的顧問。并且經常性地要舉行一些技術研討會、技術培訓班等;
5)隨著軟件開始測試、集成和交付,集成和測試支持將成為軟件架構師的工作重點;
6)在軟件維護開始時,軟件架構師就要分析該軟件架構在該軟件產品上的實施效果,是否存在問題,為下一個軟件項目的軟件架構設計做準備。
4 結論
軟件架構的設計和規范可以實現開發工作的簡單性和系統對未來更改的適應性。所以軟件企業要正確的認識軟件架構師的工作,認真的對待軟件架構師這個職位的必要性。
【參考文獻】
[1][美]RogerS Pressman.軟件工程-實踐者的研究方法[M].黃柏素,梅宏,譯.北京:機械工業出版社,1999.
[2]A W Brown,K C Wallau.The current state of CRSE[J].IEEE Software,1998,15(5):37-46.
[3]張友生,李雄.軟件架構師的角色和培養[J].計算機教育,2006,11.
[責任編輯:謝慶云]