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