張友生 李 雄
隨著軟件系統(tǒng)的規(guī)模越來越大,復雜程度越來越高,軟件設計的核心已經超越了傳統(tǒng)的“算法+數(shù)據(jù)結構=程序”的設計模式,取而代之的是對系統(tǒng)的總體結構的設計和規(guī)范。軟件架構在軟件系統(tǒng)中充當著重要的角色,軟件架構也是軟件工程中迅速發(fā)展的一個研究實踐領域,有很多的文獻討論了如何構架一個好的軟件系統(tǒng)。軟件架構師作為軟件架構的設計者是關系到軟件成敗的關鍵因素。然而,有關軟件架構師的角色定位以及教育培養(yǎng)問題,仍然比較模糊,沒有一致的結論。
作者近年來在軟件架構的理論研究和實踐方面做了一些工作,也取得了一定的成績。負責起草了全國計算機技術與軟件專業(yè)技術資格(水平)考試中的系統(tǒng)分析師和系統(tǒng)架構設計師考試大綱,主編了有關考試教材。本文主要討論軟件架構師的角色和培養(yǎng)問題。
1 軟件架構與軟件架構師
1.1 軟件架構
軟件架構(Software architecture,軟件體系結構)一詞早在20世紀60年代就被E.W.Dijkstra提出,但是直到20世紀90年代初才開始流行起來。為了提高軟件需求和軟件設計的質量,軟件工程界提出了需求分析工程技術和各種軟件建模技術。但是在需求和設計之間仍然存在一條很難逾越的鴻溝,即缺乏能夠反映作決策的中間過程,從而很難有效地將需求轉化為相應的設計。為此,軟件架構的概念應運而生,并試圖在軟件需求與軟件設計之間架起一座橋梁,著重解決軟件系統(tǒng)的結構和需求向實現(xiàn)平坦過渡的問題。
目前,軟件架構的研究已發(fā)展為軟件工程領域的一個獨立學科分支,具有比較嚴格的理論基礎和工程指導原則。軟件架構已經成為軟件工程領域的研究熱點以及大型軟件系統(tǒng)與軟件產品線開發(fā)中的關鍵技術之一。有許多相關的研究人員對軟件架構描述語言,軟件架構的描述與表示,軟件架構的分析與驗證,基于架構的軟件維護與演化,軟件架構的可靠性等方面進行了研究。
1.2 軟件架構師
一直以來,絕大多數(shù)的軟件組織都缺乏軟件架構師的編制。架構設計的工作基本上由項目經理、系統(tǒng)分析師與軟件設計師兼任或分攤,導致普遍輕視軟件架構專業(yè)人才的培養(yǎng)與任用。事實上,軟件構架師是目前很多軟件組織最急需的人才,也是一個軟件組織中的高級技術人才。那么,究竟什么是軟件架構師、軟件架構師在項目開發(fā)中起什么作用、如何定位一個軟件架構師和如何成為一個軟件架構師呢?這是許多組織、技術人員和管理人員都希望知道的或希望參與討論的話題。下面對軟件架構師這一概念作簡單的闡述。
所謂架構師,通俗的說就是設計師或結構設計者,這些定義如果用在建筑學上,則是很容易理解的。在軟件工程領域中,軟件架構師實際上就是軟件項目的總體設計師,是軟件組織新產品的開發(fā)與集成、新技術體系的構建者。對一些大型軟件產品或項目的開發(fā),這一角色顯得很關鍵,因為缺乏好的軟件架構師而導致項目失敗的例子不勝枚舉,一個沒有經驗和能力的軟件架構師也會使軟件項目失敗的速度加快。正因如此,Martin Fowler指出:架構師是對所有重要事情作出決定的人。
軟件架構師在整個軟件開發(fā)過程中都起著重要作用,并隨著開發(fā)進程的推進而其職責或關注點不斷地變化。在需求階段,軟件架構師主要負責理解和管理非功能性系統(tǒng)需求,比如軟件的可維護性、性能、復用性、可靠性、有效性和可測試性等。此外,架構師還要經常審查客戶和市場人員所提出的需求,確認開發(fā)團隊所提出的設計;在需求越來越明確后,架構師的關注點開始轉移到組織開發(fā)團隊成員和開發(fā)過程的定義上;在軟件設計階段,架構師負責對整個軟件架構、關鍵構件、接口的設計。在編碼階段,架構師則成為程序員的顧問,并且經常性地要舉行一些技術研討會、技術培訓班等;隨著軟件開始測試、集成和交付,集成和測試支持將成為軟件架構師的工作重點;在軟件維護開始時,軟件架構師就要開始為下一版本的產品是否應該增加新的功能模塊進行決策。
因此,軟件架構師是軟件項目的總體設計師,是軟件組織新產品開發(fā)與集成、新技術體系的構建者,是從宏觀上駕馭大型系統(tǒng)的戰(zhàn)略家,是對軟件項目中所有重要架構事情作出決策的人,是策略制定者、組織協(xié)調高手、稱職的顧問與領導者。
作為一個軟件架構師,在整個軟件系統(tǒng)的開發(fā)過程中是樂趣無窮的,因為這個角色很具有挑戰(zhàn)性,有時需要左右逢源八面玲瓏,有時又需要果斷堅定不留情面。Philippe Kruchten曾經說過:當一個偉大的架構師領導開發(fā)團隊時,團隊的每個成員都感覺不到他的存在。次一點的架構師使開發(fā)團隊的每個成員都喜歡他,再次一點的是害怕他,最次的是鄙視他。在國內,軟件組織幾乎沒有獨立的架構師,通常一個軟件高手身兼數(shù)職,既是項目經理,又是軟件架構師,甚至還是軟件開發(fā)者,有時還要客串一個測試人員,這對軟件的開發(fā)周期和產品質量是不利的。
2 軟件架構師的角色
2.1 軟件架構師的職責
好的軟件架構師不只是一位受到尊敬的資深技術人員,通常也是策略制定和組織協(xié)調的高手,稱職的顧問與領導者。這是因為軟件架構規(guī)劃與設計主要是以宏觀的角度切入系統(tǒng)架構,一般所謂的設計則是以微觀的角度切入。軟件工程師和程序員所考慮的是單個構件的功能,而軟件架構師必須從全局的角度理解軟件項目的業(yè)務目的和期望結果,能夠定義不同的構件是如何組裝在一起的。軟件架構師規(guī)劃系統(tǒng)的角度主要是從自上而下的方式著手,而軟件設計師則多半從自下而上的方式著手。這種從宏觀/微觀的角度進行劃分,在其他學科也??匆姡绾暧^經濟學與微觀經濟學等。這種宏觀角度的本質,就是軟件架構師專業(yè)領域與其他軟件開發(fā)人員最根本的區(qū)別。
從宏觀的角度,舉凡架構規(guī)格與決策、排定架構審閱時程、解決所有架構相關的問題、所有主要技術決策的核準、維護架構規(guī)格等都是架構設計的主要工作。通常在項目一開始,需求與初始分析等工作流程會產生規(guī)劃的企業(yè)流程與預期系統(tǒng)完成的功能。有了這些信息,軟件架構師就能草擬最初的高層架構藍圖,并列出影響架構的可能的因素清單。另外,軟件架構師也要擔負估算項目成本的職責,評估項目計劃對系統(tǒng)既有基礎結構與架構的沖擊,以及計算可能付出的成本與所帶來的效益。
除了上述任務以外,檢查初期架構規(guī)劃設計、影響因素與成本,維持與組織架構決策的一致性也是架構設計師的重要職責之一。這通常要找出制定項目的架構決策與其優(yōu)先級的判斷基準、定義問題領域、決定可能解決方案的制約條件、確認有關可能解決方法的假設狀況以及辨識模塊重用的可能性。軟件架構師也必須負責確保需求的達成,以及硬件、軟件、基礎結構、性能、安全性、容量、可用性和系統(tǒng)運行、管理與維護等屬于系統(tǒng)層次相關技術之間的協(xié)調與平衡。在某些關鍵時刻,軟件架構師也要做出系統(tǒng)與架構在協(xié)調、平衡上種種必須當機立斷但又很難判斷的決策。
軟件架構師必須設法降低可能的技術風險對系統(tǒng)的沖擊。在規(guī)劃初期,技術風險對一般人來說通常都是不可知、不可驗證也不可測的。風險大多與系統(tǒng)層次的需求有關,有時也會與組織需求有關。不論任何類型的風險,有經驗的架構設計師都可在項目的先期也就是構建架構時期,預先列出這些可能的風險,然后在后續(xù)的開發(fā)時期配合開發(fā)人員予以適當?shù)靥幚砼c解決。另外,架構設計師也必須領導開發(fā)團隊,保持與其他成員的良好互動,確保開發(fā)人員是根據(jù)架構藍圖來構建系統(tǒng)。
總之,軟件架構師的主要任務就是規(guī)劃與系統(tǒng)架構層次相關的事務,評估可能的風險與成本,并有效運用有限的人力、物力資源滿足系統(tǒng)層次的需求。優(yōu)秀的軟件架構師是保證軟件系統(tǒng)強大生命力的核心人物。專業(yè)架構師能夠幫助組織全面研究現(xiàn)有架構和設計模式、評估系統(tǒng)設計的優(yōu)缺點和可能存在的風險,通過一系列的專題指導和具體案例幫助組織掌握先進的、成熟的設計模式,簡化復雜的業(yè)務邏輯和需求,確定系統(tǒng)最佳方案。在必要的情況下,還可就特定領域或課題,為開發(fā)人員提供定制指導。
2.2 軟件架構師與系統(tǒng)分析師的區(qū)別
在一個較大規(guī)模的軟件組織里,一般都有項目管理師、軟件架構師、系統(tǒng)分析師、軟件設計師、測試工程師、數(shù)據(jù)庫工程師、程序員、過程改進、質量保證等不同的職位。在這些職位中,人們容易混淆的是系統(tǒng)分析師和軟件架構師。對于系統(tǒng)分析師的角色,業(yè)界有兩種觀點,一種是把系統(tǒng)分析師當成既懂技術又懂管理的全能冠軍,另一種是把系統(tǒng)分析師當作需求分析師,而架構師才是靈魂。那么,系統(tǒng)分析師與軟件架構師在角色方面的分配究竟有什么區(qū)別呢?
當軟件規(guī)模比較小時,系統(tǒng)分析師所完成的工作是把真正的業(yè)務需求(這個需求不是指客戶簡單所說的哪一個功能,而是需要去挖掘的,可能是潛在的但又是系統(tǒng)必需的,條例清楚、邏輯清晰的業(yè)務功能,而且需求不僅僅只是來自業(yè)務上的,系統(tǒng)所依賴的運行環(huán)境也會產生一些需求)轉換成計算機可理解、可實現(xiàn)、可計算的模型。但由于現(xiàn)在的系統(tǒng)規(guī)模越來越大,復雜程度越來越高,而且應用領域也越來越廣,所以很難由一個工種的人來全面完成這項艱巨的任務。
在具體的軟件設計過程中,現(xiàn)在把它分解為由系統(tǒng)分析師與軟件架構師合作共同來完成這一任務。其中系統(tǒng)分析師側重的是前一部分的工作,軟件架構師側重的是后一部分的工作。系統(tǒng)分析師的主要工作內容包括業(yè)務需求分析、系統(tǒng)需求分析、可行性分析以及建模等,其特點是更多地與行業(yè)專家、用戶溝通,再及時與項目經理(項目管理師)、軟件架構師以及老板商討,分析項目具備的特點、成本、風險等,考慮實現(xiàn)的模型。系統(tǒng)分析師所面臨的往往是有許多不確定性的事件,需要對這些不確定的事件進行分析、總結,使之得出一個相對可靠的確定性結論或實施方案模型。
軟件架構師的主要工作內容就是在系統(tǒng)需求比較清晰的條件下進行系統(tǒng)總體的架構設計,當然它也可能會涵蓋一些系統(tǒng)分析師和軟件設計師的工作內容,但其特點是確定性的東西會多一些,力求為系統(tǒng)找到或架構一個最優(yōu)的模型。這里面雖然可能有很多創(chuàng)新的成分,但更重要的是如何充分運用現(xiàn)有的各種模型、結構、方案,并根據(jù)項目的特點,在各種方案中取長補短,找到一個最好的平衡點和結合點,使之最適合當前項目的解決方案。所以,軟件架構師實際上是使系統(tǒng)細致化、完善化,為擁有更好的可靠性提供保障。
在實際的職責上,軟件架構師比系統(tǒng)分析師所站的角度更高一些。在大規(guī)模的軟件系統(tǒng)中,系統(tǒng)分析師可能就系統(tǒng)的某個子系統(tǒng)進行分析與設計,而軟件架構師應該對整個系統(tǒng)的結構負責。
3 軟件架構師的培養(yǎng)與認證
3.1 軟件架構師的培養(yǎng)
軟件架構師一般都是具備計算機科學或軟件工程的知識,由程序員做起,然后再慢慢發(fā)展為架構師的。在國內,很多大學目前還沒有設立軟件架構的學位課程,雖然IT業(yè)界對設計和架構的興趣日漸高漲,但各學校還無法在課程中增加相應的內容來體現(xiàn)這一趨勢。從這個方面來說,學校教育已經遠遠落后于產業(yè)發(fā)展。因此,促進和發(fā)展軟件架構學課程的任務將落在現(xiàn)在的軟件架構師身上。目前的軟件架構師應該幫助各大院校建立相關課程體系,一旦教育課程建立起來,知識體將不僅通過新畢業(yè)生的工作成果來得到擴展,同時也會從適合軟件架構的教育研究和出版物中得到擴展。
雖然大學要加強軟件架構學課程的建設,但是,軟件架構師的成長應該有一個實踐的教育過程,并不是簡單的學校的理論學習或者通過大型軟件公司的認證就能成為合格的軟件架構師。除了信息系統(tǒng)綜合知識在學校學習外,軟件架構師的大部分知識和經驗將來自實際開發(fā)工作。一般來說,一名合格的軟件架構師的成長應該經歷8年以上的軟件項目開發(fā)實際工作經驗。一般需要經歷程序員、軟件設計師等階段,然后再發(fā)展成為軟件架構師。
當然,并不是每一位程序員經過8年后都可以成長為軟件架構師的。一個軟件工程師在充分掌握了軟件架構師工作所必需的基本理論和技能后,如何得到和利用機會、如何利用所掌握的技能進行應用系統(tǒng)的合理架構、如何不斷地抽象和總結自己的架構模式、如何深入行業(yè)成為能夠勝任分析、架構為一體的精英人才,這就在于機遇、個人的努力和天賦了。
就目前來看,國內軟件架構師的培養(yǎng)途徑主要有兩種方式,一種是大學(軟件學院)教育方式,另一種是個人自我培養(yǎng)然后再進行相應的培訓和認證。但是,不管哪種方式都有其不足之處。
軟件學院的培養(yǎng)方式能夠系統(tǒng)地傳授軟件架構師必需的知識體系,但是,軟件架構師不是簡單的通過理論學習就能夠培養(yǎng)出來的,軟件學院的學生可能缺乏必要的設計、開發(fā)經驗和相關的領域知識。盡管軟件學院也強調給予學生實踐的機會,但畢竟這種機會是有限的。有關“三分之一的師資來自企業(yè)”的規(guī)定,在部分軟件學院中也沒有得到真正落實,導致傳授給學生的還是一些純理論知識。
自我培養(yǎng)方式的主要對象是具有一定年限的軟件開發(fā)和設計人員,如Microsoft、IBM、Sun等公司的軟件架構師認證對學員的基礎并沒有具體的要求,只要交納規(guī)定的費用,然后進行幾天的集中培訓,通過考試就發(fā)給學員證書,甚至不需要考試就直接發(fā)放證書。這些開發(fā)人員在自我培養(yǎng)的過程中不一定能夠系統(tǒng)地學習軟件架構師的理論知識,他們只具有一定的開發(fā)和設計經驗,僅僅經過幾天的培訓,是不太可能培養(yǎng)出合格的軟件架構師的。而且,作為某個廠商的培訓和認證,其最終目的是培育自己的市場,培養(yǎng)一批忠誠的用戶,而不是為中國培養(yǎng)軟件架構師。因此,也存在很大的問題和缺陷。
3.2 尋求合適的培養(yǎng)方法
針對軟件架構師在軟件組織中的作用和其在國內的培養(yǎng)現(xiàn)狀,作者認為有必要將軟件架構師的教育、培訓和認證作為發(fā)展民族軟件產業(yè)的一個基本決策,制定詳細的軟件架構師培養(yǎng)方案。
(1) 確定軟件架構師在軟件組織中的職責和充當?shù)慕巧?,確定其相應的必須具備的知識體系,確定軟件架構師的職業(yè)及其相關制度,制定軟件架構師的培養(yǎng)目標和培養(yǎng)方案。
(2) 堅持以大學教育為主(特別是各軟件學院在這方面可以大施身手),以項目實踐為輔的教育方針。大學可以聘請現(xiàn)有的軟件架構師擔任核心課程的講師,通過學校教育,系統(tǒng)學習軟件架構師所必需的知識體系;通過項目實踐使其具有初步的軟件開發(fā)和設計經驗,逐步成長為一名合格的軟件架構師。
(3) 對國外一些大公司的軟件架構師的培訓和認證予以支持,但是在認證的過程中必須堅持符合我國實際情況的原則。例如,在認證考試之前對考生的知識體系進行系統(tǒng)的測試和評估,在通過認證后的適當時間內進行重新認證和繼續(xù)教育。
(4) 建立完善的軟件架構師教育和認證制度,使得通過認證的人員能夠在實際的軟件開發(fā)中成為稱職的和優(yōu)秀的軟件架構師,并通過此制度能夠為國家培養(yǎng)出更多、更優(yōu)秀的軟件架構師,解決當前軟件架構師急缺問題。
4 結束語
軟件架構師是軟件組織中必不可少的人才,對軟件整體結構及性能都起著重要的作用,直接關系到軟件產品的成功與否。但是當前絕大多數(shù)軟件組織都沒有配備專門的軟件架構師,這對軟件組織和軟件產品都存在一定的隱患。因此對軟件架構師這一角色必須有一個新的認識,對軟件架構師的培養(yǎng)也要有一個詳細的方案和措施。
本文根據(jù)作者的實踐經驗,基于作者的理解和認識,討論了軟件架構師的角色定位和培養(yǎng)問題,旨在拋磚引玉。由于作者學識有限,其中觀點可能不完善,甚至有錯誤之處,歡迎同行和專家斧正。