軟件架構(gòu)師是軟件行業(yè)中一種新興職業(yè),工作職責是在一個軟件項目開發(fā)過程中,將客戶的需求轉(zhuǎn)換為規(guī)范的開發(fā)計劃及文本,并制定這個項目的總體架構(gòu),指導整個開發(fā)團隊完成這個計劃。主導系統(tǒng)全局分析設(shè)計與實施、負責軟件架構(gòu)和關(guān)鍵技術(shù)決策的人員。軟件架構(gòu)師應能迅速抓住問題要害,并做出合理的關(guān)鍵決定的能力,具備戰(zhàn)略性和前瞻性思維能力,善于把握全局,能夠在更高抽象級別上進行思考。
(1)對項目開發(fā)涉及的所有問題領(lǐng)域都有經(jīng)驗,包括徹底地理解項目需求,開展分析設(shè)計之類軟件工程活動等;
(2)具備領(lǐng)導素質(zhì),以在各小組之間推進技術(shù)工作,并在項目壓力下做出牢靠的關(guān)鍵決策;
(3)擁有優(yōu)秀的溝通能力,用以進行說服、鼓勵和指導等活動,并贏得項目成員的信任;
(4)以目標導向和主動的方式來不帶任何感情色彩地關(guān)注項目結(jié)果,構(gòu)架師應當是項目背后的技術(shù)推動力,而非構(gòu)想者或夢想家(追求完美);
(5)精通構(gòu)架設(shè)計的理論、實踐和工具,并掌握多種參考構(gòu)架、主要的可重用構(gòu)架機制和模式(例如J2EE架構(gòu)等);
(6)具備系統(tǒng)設(shè)計員的所有技能,但涉及面更廣、抽象級別更高;活動確定用例或需求的優(yōu)先級、進行構(gòu)架分析、創(chuàng)建構(gòu)架的概念驗證原型、評估構(gòu)架的概念驗證原型的可行性、組織系統(tǒng)實施模型、描述系統(tǒng)分布結(jié)構(gòu)、描述運行時刻構(gòu)架、確定設(shè)計機制、確定設(shè)計元素、合并已有設(shè)計元素、構(gòu)架文檔、參考構(gòu)部署模型、構(gòu)架概念驗證原型、接口、事件、信號與協(xié)議等。架、分析模型、設(shè)計模型、實施模型。
架構(gòu)師的主要任務(wù)不是從事具體的軟件程序的編寫,而是從事更高層次的開發(fā)構(gòu)架工作。他必須對開發(fā)技術(shù)非常了解,并且需要有良好的組織管理能力??梢赃@樣說,一個架構(gòu)師工作的好壞決定了整個軟件開發(fā)項目的成敗。
1、領(lǐng)導與協(xié)調(diào)整個項目中的技術(shù)活動(分析、設(shè)計和實施等)。
2、推動主要的技術(shù)決策,并最終表達為軟件構(gòu)架。
3、確定和文檔化系統(tǒng)的相對構(gòu)架而言意義重大的方面,包括系統(tǒng)的需求、設(shè)計、實施和部署等“視圖”。
4、確定設(shè)計元素的分組以及這些主要分組之間的接口。
5、為技術(shù)決策提供規(guī)則,平衡各類涉眾的不同關(guān)注點,化解技術(shù)風險,并保證相關(guān)決定被有效的傳達和貫徹。
6、理解、評價并接收系統(tǒng)需求。
7、評價和確認軟件架構(gòu)的實現(xiàn) 專業(yè)技能。
軟件架構(gòu)師一般都是具備計算機科學或軟件工程的知識,由程序員做起,然后再慢慢發(fā)展為架構(gòu)師的。在國內(nèi),很多大學還沒有設(shè)立軟件架構(gòu)的學位課程,雖然IT業(yè)界對設(shè)計和架構(gòu)的興趣日漸高漲,但各學校還是無法在課程中增加相應的內(nèi)容來體現(xiàn)這一趨勢。從這個方面來說,學校教育已經(jīng)遠遠落后于產(chǎn)業(yè)發(fā)展。因此,促進和發(fā)展軟件架構(gòu)學課程的任務(wù)將落在軟件架構(gòu)師身上。軟件架構(gòu)師應該幫助各大院校建立相關(guān)課程體系,一旦教育課程建立起來,知識體將不僅通過新畢業(yè)生的工作成果來得到擴展,同時也會從適合軟件架構(gòu)的教育研究和出版物中得到擴展。
雖然大學要加強軟件架構(gòu)學課程的建設(shè),但是,軟件架構(gòu)師的成長應該有一個實踐的教育過程,并不是簡單的學校的理論學習或者通過大型軟件公司的認證就能成為合格的軟件架構(gòu)師。除了信息系統(tǒng)綜合知識在學校學習外,軟件架構(gòu)師的大部分知識和經(jīng)驗將來自實際開發(fā)工作。根據(jù)軟件架構(gòu)師的任職條件,一名合格的軟件架構(gòu)師的成長應該經(jīng)歷8年以上的軟件項目開發(fā)實際工作經(jīng)驗。一般需要經(jīng)歷程序員、軟件設(shè)計師等階段,然后再發(fā)展成為軟件架構(gòu)師。
當然,并不是每一位程序員經(jīng)過8年后都可以成長為軟件架構(gòu)師的。一個軟件工程師在充分掌握了軟件架構(gòu)師工作所必需的基本理論和技能后,如何得到和利用機會、如何利用所掌握的技能進行應用系統(tǒng)的合理架構(gòu)、如何不斷的抽象和總結(jié)自己的架構(gòu)模式、如何深入行業(yè)成為能夠勝任分析、架構(gòu)為一體的精英人才,這就在于機遇、個人的努力和天賦了。
國內(nèi)軟件架構(gòu)師的培養(yǎng)途徑主要有兩種方式,一種是大學(軟件學院)教育方式,另一種是個人自我培養(yǎng)然后再進行相應的培訓和認證。但是,不管哪種方式都有其不足之處。
軟件學院的培養(yǎng)方式能夠系統(tǒng)的學習軟件架構(gòu)師必需的知識體系,但是,軟件架構(gòu)師不是簡單的通過理論學習就能夠培養(yǎng)出來的,軟件學院的學生可能缺乏必要的設(shè)計、開發(fā)經(jīng)驗和相關(guān)的領(lǐng)域知識。盡管軟件學院也強調(diào)給予學生實踐的機會,但畢竟這種機會是有限的。有關(guān)“三分之一的師資來自企業(yè)”的規(guī)定,在部分軟件學院中也沒有得到真正落實,導致傳授給學生的還是一些純理論知識。
自我培養(yǎng)方式的主要對象是具有一定年限的軟件開發(fā)和設(shè)計人員,如Microsoft、IBM、Sun等公司的軟件架構(gòu)師認證對學員的基礎(chǔ)并沒有具體的要求,只要交納規(guī)定的費用,然后進行幾天的集中培訓,通過考試就發(fā)給學員證書,甚至不需要考試就直接發(fā)放證書。這些開發(fā)人員在自我培養(yǎng)的過程中不一定能夠系統(tǒng)的學習軟件架構(gòu)師的理論知識,他們只具有一定的開發(fā)和設(shè)計經(jīng)驗,僅僅經(jīng)過幾天的培訓,是不太可能培養(yǎng)出合格的軟件架構(gòu)師的。而且,作為某個廠商的培訓和認證,其最終目的是培育自己的市場,培養(yǎng)一批忠誠的用戶,而不是為中國培養(yǎng)軟件架構(gòu)師。因此,也存在很大的問題和缺陷。
針對軟件架構(gòu)師在軟件組織中的作用和其在國內(nèi)的培養(yǎng)現(xiàn)狀,有分析家認為有必要將軟件架構(gòu)師的教育、培訓和認證作為發(fā)展民族軟件產(chǎn)業(yè)的一個基本決策,制定詳細的軟件架構(gòu)師培養(yǎng)方案。因此,提出以下一些關(guān)于軟件架構(gòu)師培養(yǎng)的基該方法和途徑。
⑴確定軟件架構(gòu)師在軟件組織中的職責和充當?shù)慕巧?,確定其相應的必須具備的知識體系,確定軟件架構(gòu)師的職業(yè)及其相關(guān)制度,制定軟件架構(gòu)師的培養(yǎng)目標和培養(yǎng)方案。
⑵堅持以大學教育為主(特別是各軟件學院在這方面可以大施身手),以項目實踐為輔的教育方針。大學可以聘請現(xiàn)有的軟件架構(gòu)師擔任核心課程的講師,通過學校教育,系統(tǒng)學習軟件架構(gòu)師所必需的知識體系;通過項目實踐使其具有初步的軟件開發(fā)和設(shè)計經(jīng)驗,逐步成長為一名合格的軟件架構(gòu)師。
⑶作位第2條的補充,聘請現(xiàn)有的軟件架構(gòu)師,個人認為適合以講座的形式在學校開展。
⑷對國外一些大公司的軟件架構(gòu)師的培訓和認證予以支持,但是在認證的過程中必須堅持符合中國實際情況的原則。例如,在認證考試之前對考生的知識體系進行系統(tǒng)的測試和評估,在通過認證后的適當時間內(nèi)進行重新認證和繼續(xù)教育。
⑸建立完善的軟件架構(gòu)師教育和認證制度,使得通過認證的人員能夠在實際的軟件開發(fā)中成為稱職的和優(yōu)秀的軟件架構(gòu)師。并通過此制度能夠為國家培養(yǎng)出更多、更優(yōu)秀的軟件架構(gòu)師,解決當前軟件架構(gòu)師急缺問題。
好的軟件架構(gòu)師不只是一位受到尊敬的資深技術(shù)人員,通常也是策略制定和組織協(xié)調(diào)的高手,稱職的顧問與領(lǐng)導者。這是因為軟件架構(gòu)規(guī)劃與設(shè)計主要是以宏觀的角度切入系統(tǒng)架構(gòu),一般所謂的設(shè)計則是以微觀的角度切入。軟件工程師和程序員所考慮的是單個構(gòu)件的功能,而軟件架構(gòu)師必須從全局的角度理解軟件項目的業(yè)務(wù)目的和期望結(jié)果,能夠定義不同的構(gòu)件是如何組裝在一起的。軟件架構(gòu)師規(guī)劃系統(tǒng)的角度主要是從自上而下的方式著手,而軟件設(shè)計師則多半從自下而上的方式著手。這種從宏觀/微觀的角度進行劃分,在其他學科也常看見,如宏觀經(jīng)濟學與微觀經(jīng)濟學等。這種宏觀角度的本質(zhì),就是軟件架構(gòu)師專業(yè)領(lǐng)域與其他軟件開發(fā)人員最根本的區(qū)別。
從宏觀的角度,舉凡架構(gòu)規(guī)格與決策、排定架構(gòu)審閱時程、解決所有架構(gòu)相關(guān)的問題、所有主要技術(shù)決策的核準、維護架構(gòu)規(guī)格等都是架構(gòu)設(shè)計的主要工作。通常在項目一開始,需求與初始分析等工作流程會產(chǎn)生規(guī)劃的企業(yè)流程與預期系統(tǒng)完成的功能。有了這些信息,軟件架構(gòu)師就能草擬最初的高層架構(gòu)藍圖,并列出影晌架構(gòu)的可能的因素清單。另外,軟件架構(gòu)師也要擔負估算項目成本的職責,評估項目計劃對系統(tǒng)既有基礎(chǔ)結(jié)構(gòu)與架構(gòu)的沖擊,以及計算可能付出的成本與所帶來的效益。
除了上述任務(wù)以外,檢查初期架構(gòu)規(guī)劃設(shè)計、影響因素與成本,維持與組織架構(gòu)決策的一致性也是架構(gòu)設(shè)計師的重要職責之一。這通常要找出制定項目的架構(gòu)決策與其優(yōu)先級的判斷基準、定義問題領(lǐng)域、決定可能解決方案的制約條件、確認有關(guān)可能解決方法的假設(shè)狀況以及辨識模塊重用的可能性。軟件架構(gòu)師也必須負責確保需求的達成,以及硬件、軟件、基礎(chǔ)結(jié)構(gòu)、性能、安全性、容量、可用性和系統(tǒng)運行、管理與維護等屬于系統(tǒng)層次相關(guān)技術(shù)之間的協(xié)調(diào)與平衡。在某些關(guān)鍵時刻,軟件架構(gòu)師也要做出系統(tǒng)與架構(gòu)在協(xié)調(diào)、平衡上種種必須當機立斷但又很難判斷的決策。
軟件架構(gòu)師必須設(shè)法降低可能的技術(shù)風險對系統(tǒng)的沖擊。在規(guī)劃初期,技術(shù)風險對一般人來說通常都是不可知、不可驗證也不可測的。風險大多與系統(tǒng)層次的需求有關(guān),有時也會與組織需求有關(guān)。不論任何類型的風險,有經(jīng)驗的架構(gòu)設(shè)計師都可在項目的先期也就是構(gòu)建架構(gòu)時期,預先列出這些可能的風險,然后在后續(xù)的開發(fā)時期配合開發(fā)人員予以適當?shù)靥幚砼c解決。另外,架構(gòu)設(shè)計師也必須領(lǐng)導開發(fā)團隊,保持與其他成員的良好互動,確保開發(fā)人員是根據(jù)架構(gòu)藍圖來構(gòu)建系統(tǒng)。
總之,軟件架構(gòu)師的主要任務(wù)就是規(guī)劃與系統(tǒng)架構(gòu)層次相關(guān)的事務(wù),評估可能的風險與成本,并有效運用有限的人力、物力資源滿足系統(tǒng)層次的需求。優(yōu)秀的軟件架構(gòu)師是保證軟件系統(tǒng)強大生命力的核心人物。專業(yè)架構(gòu)師能夠幫助組織全面研究現(xiàn)有架構(gòu)和設(shè)計模式、評估系統(tǒng)設(shè)計的優(yōu)缺點和可能存在的風險,通過一系列的專題指導和具體案例幫助組織掌握先進的、成熟的設(shè)計模式,簡化復雜的業(yè)務(wù)邏輯和需求,確定系統(tǒng)最佳方案。在必要的情況下,還可就特定領(lǐng)域或課題,為開發(fā)人員提供定制指導。