分析:項(xiàng)目團(tuán)隊(duì)需要重新認(rèn)識架構(gòu)師的職責(zé)
51CTO 發(fā)表于:12年08月21日 00:50 [轉(zhuǎn)載] 51CTO
架構(gòu)師是對所有重要事情做出決定的人。但是行業(yè)內(nèi)對于架構(gòu)師的負(fù)面認(rèn)識正越來越多,看來我們需要重新認(rèn)識架構(gòu)師的職責(zé)
成為一個優(yōu)秀的架構(gòu)師還有很長的路要走(軟件架構(gòu)案例分析和最佳實(shí)踐培訓(xùn)收獲)
2009-12-25到27日我們參加了某軟件培訓(xùn)機(jī)構(gòu)的的《軟件架構(gòu)案例分析和最佳實(shí)踐》課程培訓(xùn),開拓了眼界,收獲很多,劉老師講得不錯,非常有實(shí)戰(zhàn)經(jīng)驗(yàn),跟他學(xué)到了不少有關(guān)軟件架構(gòu)的知識,可惜的是3天的培訓(xùn)課程不可能完全掌握所有知識,師傅只是給我們打開了一扇門,指出了一個方向,成為一個優(yōu)秀的架構(gòu)師還有很長的路要走。
新視野 “軟件架構(gòu)”定義的決策因素
定義1:架構(gòu)是一系列重要決策的集合
一直以來,學(xué)習(xí)架構(gòu),使用架構(gòu),關(guān)注點(diǎn)都僅限于技術(shù)層面,沒有認(rèn)識到架構(gòu)和“決策”的關(guān)系,這說明架構(gòu)是一個很重要的概念,從軟件架構(gòu)概念產(chǎn)生的背景可以得出:
——-其實(shí),軟件架構(gòu)(Software Architecture,軟件體系結(jié)構(gòu))一詞早在20世紀(jì)60年代就被E.W.Dijkstra提出,但是直到20世紀(jì)90年代初才開始流行起來。為了提高軟件需求和軟件設(shè)計(jì)的質(zhì)量,軟件工程界提出了需求分析工程技術(shù)和各種軟件建模技術(shù)。但是在需求和設(shè)計(jì)之間仍然存在一條很難逾越的鴻溝,即缺乏能夠反映做決策的中間過程,從而很難有效地將需求轉(zhuǎn)化為相應(yīng)的設(shè)計(jì)。為此,軟件架構(gòu)的概念應(yīng)運(yùn)而生,并試圖在軟件需求與軟件設(shè)計(jì)之間架起一座橋梁,著重解決軟件系統(tǒng)的結(jié)構(gòu)和需求向?qū)崿F(xiàn)平坦過渡的問題。
定義2:軟件架構(gòu)為軟件系統(tǒng)提供了一個結(jié)構(gòu)、行為和屬性的高級抽象,由構(gòu)成系統(tǒng)的元素的描述、這些元素的相互作用、指導(dǎo)元素集成的模式以及這些模式的約束組成。
軟件架構(gòu)不僅指定了系統(tǒng)的組織結(jié)構(gòu)和拓?fù)浣Y(jié)構(gòu),并且顯示了系統(tǒng)需求和構(gòu)成系統(tǒng)的元素之間的對應(yīng)關(guān)系,提供了一些設(shè)計(jì)決策的基本原理。
還有很多其它的定義方式,但從這兩個定義可以看出,架構(gòu)對于決策的重要性,架構(gòu)師的工作對于項(xiàng)目的成功運(yùn)作具有決定性的作用。
“架構(gòu)師”不是空頭銜
——不是項(xiàng)目經(jīng)理,開發(fā)人員,測試人員的兼職角色
在軟件工程領(lǐng)域中,軟件架構(gòu)師實(shí)際上就是軟件項(xiàng)目的總體設(shè)計(jì)師,是軟件組織新產(chǎn)品的開發(fā)與集成、新技術(shù)體系的構(gòu)建者。Martin Fowler(著名軟件架構(gòu)和設(shè)計(jì)大師,軟件設(shè)計(jì)模式創(chuàng)始人)指出:
架構(gòu)師是對所有重要事情做出決定的人。
軟件架構(gòu)師在整個軟件開發(fā)過程中都起著重要作用,并隨著開發(fā)進(jìn)程的推進(jìn)而其職責(zé)或關(guān)注點(diǎn)不斷地變化。
在需求階段,軟件架構(gòu)師主要負(fù)責(zé)理解和管理非功能性系統(tǒng)需求,比如軟件的可維護(hù)性、性能、復(fù)用性、可靠性、有效性和可測試性等。此外,架構(gòu)師還要經(jīng)常審查客戶和市場人員所提出的需求,確認(rèn)開發(fā)團(tuán)隊(duì)所提出的設(shè)計(jì);在需求越來越明確后,架構(gòu)師的關(guān)注點(diǎn)開始轉(zhuǎn)移到組織開發(fā)團(tuán)隊(duì)成員和開發(fā)過程的定義上。
在軟件設(shè)計(jì)階段,架構(gòu)師負(fù)責(zé)對整個軟件架構(gòu)、關(guān)鍵構(gòu)件、接口的設(shè)計(jì)。
在編碼階段,架構(gòu)師則成為程序員的顧問,并且經(jīng)常性地要舉行一些技術(shù)研討會、技術(shù)培訓(xùn)班等。
隨著軟件開始測試、集成和交付,集成和測試支持將成為軟件架構(gòu)師的工作重點(diǎn)。
在軟件維護(hù)開始時,軟件架構(gòu)師就要開始為下一版本的產(chǎn)品是否應(yīng)該增加新的功能模塊進(jìn)行決策。
軟件架構(gòu)視圖
——軟件架構(gòu)是一種無法以簡單的一維方式進(jìn)行說明的復(fù)雜實(shí)體。
——多重軟件架構(gòu)之所以必不可少,是因?yàn)楦黝惿姹?用戶,客戶,開發(fā)人員,測試人員,維護(hù)人員,內(nèi)部操作人員,其他人員)需要從各自的角度理解和使用架構(gòu)。
常用的軟件架構(gòu)視圖:
功能視圖
開發(fā)視圖
進(jìn)程視圖
部署視圖
場景視圖
數(shù)據(jù)視圖
實(shí)現(xiàn)視圖
注:在我們的實(shí)際項(xiàng)目中,用的最多的是功能視圖,其次是開發(fā)視圖,沒想到還有這么多的視圖需要考慮。比如,在MB一期的設(shè)計(jì)中,我曾考慮過是否有必要作一個軟件的部署形式圖,最后猶豫中還是出了一個,現(xiàn)在看來是很有必要的了,至少讓運(yùn)維人員明白了MB的軟件部署是怎么回事。
新觀念
架構(gòu)的質(zhì)量屬性
在現(xiàn)實(shí)的系統(tǒng)中,決定系統(tǒng)成功或者失敗的關(guān)鍵因素中,滿足非功能需求往往比滿足功能性需求更為重要。從技術(shù)角度看,質(zhì)量屬性影響重要的架構(gòu)和設(shè)計(jì)策略。
質(zhì)量屬性分為系統(tǒng)質(zhì)量屬性和商業(yè)質(zhì)量屬性,其中系統(tǒng)質(zhì)量屬性又分為運(yùn)行時期的質(zhì)量屬性和開發(fā)時期的質(zhì)量屬性;商業(yè)質(zhì)量屬性包括政治因素,上市時間,成本和收益等。
我們雖然常常把性能,安全,可擴(kuò)展等詞掛在嘴邊,但往往在實(shí)際開發(fā)中這些因素都忽略了,為了趕工期,功能實(shí)現(xiàn)是第一位的,最后軟件做出來了,質(zhì)量卻不好,問題一堆。實(shí)際上,軟件的質(zhì)量不只是產(chǎn)品經(jīng)理應(yīng)該關(guān)注的,軟件架構(gòu)師也必須關(guān)注,給出建議,供管理層做出決策。MB的開發(fā)就是最明顯的例子,上頭規(guī)定了上線時間,滿足必須的功能,及時上線是附在開發(fā)人員身上的魔咒,開發(fā)人員只得加班加點(diǎn)的工作,最后軟件及時上線了,但后來在運(yùn)行效率,易用性等方面成為詬病。
架構(gòu)是有生命力的
運(yùn)維人員說:軟件運(yùn)行這么慢,架構(gòu)太爛了!
開發(fā)人員說:代碼這么難寫,架構(gòu)太不靈活了!
客戶說:軟件太不穩(wěn)定了,架構(gòu)有沒有問題啊?
XXX說:YYY架構(gòu)師太差勁了,怎么就沒有設(shè)計(jì)出一個好架構(gòu)?
在所有人看來,架構(gòu)必須是完美的,對所有人感覺都是良好的,能夠適應(yīng)未來的種種變化,能夠一勞永逸!
起初我也是這么認(rèn)為的,但是老師告訴了我們一個新觀點(diǎn):
架構(gòu)是有生命力的!
“架構(gòu)是有生命的,是不斷變化的。因此,設(shè)計(jì)架構(gòu)不能只想著要考慮到所有的問題,設(shè)計(jì)出一個能夠包容所有可能問題的架構(gòu),這幾乎是不可能完成的任務(wù)。因?yàn)樽兓墙^對的,架構(gòu)總是會修改,關(guān)鍵問題是何時修改?一定不能在系統(tǒng)問題頻出、已經(jīng)來不及補(bǔ)救的時候才去考慮修改,而要在潛伏的問題逐漸露出端倪之前展開行動。”
——FreeWheel CTO和聯(lián)合創(chuàng)始人 于晶純
亞馬遜,MySpace(進(jìn)行了6次架構(gòu)重構(gòu)),eBay,淘寶網(wǎng),這些大型網(wǎng)站都是不斷地對架構(gòu)進(jìn)行重構(gòu),對應(yīng)用進(jìn)行升級來應(yīng)對業(yè)務(wù)發(fā)展的需要的。
所以,我們不能一味的去指責(zé)FT的架構(gòu)如何差勁,MB的架構(gòu)如何糟糕,公司的這些產(chǎn)品線都是逐漸發(fā)展起來的,功能是一點(diǎn)點(diǎn)增加起來的,在功能開發(fā)第一的市場戰(zhàn)略下,架構(gòu)成了次要考慮的問題,所以我們不能說當(dāng)初的架構(gòu)設(shè)計(jì)的不好,問題是在于功能增加了,應(yīng)用變復(fù)雜了,而架構(gòu)沒有跟上變化。
架構(gòu)的思維
全局觀
首先,架構(gòu)師要有全局觀,不能瞎子摸象,要看到架構(gòu)的多個層面,多個角度。如架構(gòu)的多個視圖,架構(gòu)的質(zhì)量屬性,架構(gòu)設(shè)計(jì),架構(gòu)模式等,都是從項(xiàng)目的全局視角來看待問題的。
設(shè)計(jì)的本質(zhì)就是一種權(quán)衡,是各類相互制約的模塊間的一種權(quán)衡。明白這一點(diǎn),就要求架構(gòu)設(shè)計(jì)上對各個模塊應(yīng)有靈活的控制,以保證用戶期望目標(biāo)為設(shè)計(jì)出發(fā)點(diǎn),平衡各類資源的使用。
一個好的架構(gòu)的概念是完整的,模塊間的關(guān)系是清晰簡潔,弱耦合的,模塊的接口是抽象穩(wěn)定的,模塊的實(shí)現(xiàn)是強(qiáng)內(nèi)聚和可擴(kuò)展的。
公司簡介 | 媒體優(yōu)勢 | 廣告服務(wù) | 客戶寄語 | DOIT歷程 | 誠聘英才 | 聯(lián)系我們 | 會員注冊 | 訂閱中心
Copyright © 2013 DOIT Media, All rights Reserved. 北京楚科信息技術(shù)有限公司 版權(quán)所有.