国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
敏捷思維: 架構設計中的方法學(1)

2002 年 3 月 01 日

方法論對軟件開發(fā)而言意味著什么?我們?nèi)绾慰创浖_發(fā)中的方法論?方法論能夠成為軟件開發(fā)的救命稻草嗎?在讀過此文后,這些疑惑就會得到解答。

在第一篇文章中,我們來了解標題中的一些詞的含義。

  • 方法學是什么?
  • 敏捷是什么?
  • 為什么討論架構?

方法論

方法論的英文為Methodology,詞典中的解釋為"A series of related methods or techniques"我們可以把它定義為軟件開發(fā)(針對軟件開發(fā))的一整套方法、過程、規(guī)則、實踐、技術。關于方法論的出現(xiàn)的問題,我很贊同Alistair Cockburn的一句話,"方法論源于恐懼。"出于對項目的超期、成本失控等等因素的恐懼,項目經(jīng)理們從以前的經(jīng)驗出發(fā),制定出了一些控制、監(jiān)測項目的方法、技巧。這就是方法論產(chǎn)生的原因。

在Agile Software Development一書中,作者提到了方法論的十三個要素,基本能夠函蓋方法論的各個方面:

  • 角色(Roles)
  • 個性(Personality)
  • 技能(Skills)
  • 團隊(Teams)
  • 技術(Techniques)
  • 活動(Activities)
  • 過程(Process)
  • 工件(Work products)
  • 里程碑(Milestones)
  • 標準(Standards)
  • 質(zhì)量(Quality)
  • 工具(Tools)
  • 團隊價值(Team Values)

它們之間的關系可以用一幅圖來表示:


圖 1. 方法論的十三個要素

很多的方法論,都涉及了上面列舉的十三要素中的部分要素,因此,我們可以把方法論看作是一個抽象的、無窮的超集,而現(xiàn)實中的方法論都是指超集的一個有限的子集而已。它們之間的關系就好像有理數(shù)和1到100之間的整數(shù)的關系一樣。不論是XP,還是UI設計經(jīng)驗之類,都屬于方法論的一個子集,只是這兩個子集之間有大小的差別而已。我們還應該看到,討論一個完備的方法論是沒有意義的,因此這種方法論鐵定不存在,就好像你視圖窮舉出所有的有理數(shù)一樣荒唐。因此,我們關于一個通用的方法論的說法也是無意義的。好的方法論,比如說XP、水晶系列,它們都有一個適合的范圍,因為它們了解一點,自己并不是一個無所不能的方法論。

在現(xiàn)實中,我們其實不斷的在接觸方法論。比如說,為了控制項目的進度,項目經(jīng)理要求所有的開發(fā)人員每周遞交一份詳細的進度報告,這就是一種方法、一種技巧。如果把開發(fā)過程中的這些技巧系統(tǒng)的組織起來,就能夠成為一種方法論。你可能會說,那一種方法論的產(chǎn)生也太容易了吧。不,這樣產(chǎn)生的方法論并沒有太大的實用價值,沒有實用價值的方法論根本就沒有存在的必要。因此,一個成功的方法論是要能夠為多個的項目所接受,并且能夠成功實現(xiàn)軟件的交付的方法論。

我和我的同事在實踐中做了一些試驗,希望能夠把一些好的方法論應用于開發(fā)團隊。試驗的結(jié)果很無奈,方法論實施的效果并不理想,一開始我們認為是方法本身的原因,到后來,我們發(fā)現(xiàn)事情并不是這么簡單。在試驗的過程中,開發(fā)人員一致認同方法論的優(yōu)勢所在,但是在實施過程中,鮮有堅持的下來的。在Agile Software Development中,我發(fā)現(xiàn)作者遇到了和我們一樣的問題。

Alistair Cockburn在和大量的項目團隊的訪談之后,寫成了Agile Software Development一書。在訪談之前,他篤定自己將會發(fā)現(xiàn)高度精確的過程控制是成功的關鍵所在,結(jié)果他發(fā)現(xiàn)事實并非如此,他把他的發(fā)現(xiàn)歸結(jié)為7條定律。而我在實際中的發(fā)現(xiàn)也包含在這七條定律中,總結(jié)起來就只有兩點:溝通和反饋。

只要能夠保證良好的溝通和即時的反饋,那么開發(fā)團隊即使并沒有采用先進的方法論,一樣可以成功。相反,那些"高質(zhì)量"的團隊卻往往由于缺乏這兩個因素而導致失?。ㄎ覀冞@里指的失敗是用戶拒絕使用最終的軟件)。最有效,而成本也最低的溝通方法就是面對面(face to face)的溝通,而隨著項目團隊的變大,或是另外一些影響因素的加入(比如地理位置的隔絕),面對面的溝通越來越難實現(xiàn),這導致溝通的的成本逐漸加大,質(zhì)量也慢慢下降。但這并不是說非面對面的溝通不可,重要的是我們需要知道不同的溝通方式的成本和質(zhì)量并不相同。XP方法尤為強調(diào)面對面的溝通,通過現(xiàn)場客戶、站立會議、結(jié)對編程等方式來保證溝通的有效。在我的經(jīng)驗中,一個開發(fā)團隊其實是需要多種溝通方式的結(jié)合的。完全的面對面的溝通對某些團隊來說是很難實現(xiàn)的,那么問題的關鍵就在于你如何應用溝通的方式來達到你希望的效果。在前不久結(jié)束的歐萊雅創(chuàng)業(yè)計劃大賽上,有一支團隊特別引人注目,他們彼此間素未謀面,僅僅憑借Internet和電話完成了高效的合作。他們雖然沒有使用面對面的溝通方式,但是仍然達成了既定的目標。軟件開發(fā)也是一樣的,面對面的溝通是非常有必要的,但其它的溝通方式也是需要的。

再看反饋,不論是控制進度,還是保證客戶的滿意度,這些活動都需要管理成本。軟件開發(fā)中的管理成本的一個通性就是伴隨有中間產(chǎn)出物(intermediate delivery)。比如說我們的需求規(guī)約、分析文檔、設計文檔、測試計劃,這些都屬于中間產(chǎn)出物。中間產(chǎn)出物的增加將會帶來效率下降的問題,因為開發(fā)人員的時間都花在了完成中間產(chǎn)出物的工作上,花在給軟件新功能上的時間就減少了。而中間產(chǎn)出物的主要目的是兩個,一個是為了保證軟件如客戶所愿,例如需求規(guī)約;另一個是為了作為團隊中的其他成員工作的輸入,例如開發(fā)計劃、測試計劃等。因此,我們也可以針對這兩點來商討對策,一種是采用迭代的思想,提高軟件發(fā)布的頻率,以保證客戶的需求被確實的滿足,另一種就是縮小團隊的溝通范圍,保證成員能夠從其他人那里得到新的思路,而不是撰寫規(guī)范的內(nèi)部文檔(內(nèi)部文檔指那些僅為內(nèi)部開發(fā)人員之間的溝通所需要的文檔)。

因此,一個軟件項目的成功和你采用的開發(fā)方法論并沒有直接的關系。





回頁首


重量

我們根據(jù)把擁有大量artifact(RUP官方翻譯為工件,意思是軟件開發(fā)過程中的中間產(chǎn)物,如需求規(guī)約、設計模型等)和復雜控制的軟件開發(fā)方法稱為重型(Heavy Weight)方法,相對的,我們稱artifact較少的方法為輕型(Light Weight)方法。在傳統(tǒng)的觀念中,我們認為重型方法要比輕型安全許多。因為我們之所以想出重型方法,就是由于在中大型的項目中,項目經(jīng)理往往遠離代碼,他無法有效的了解目前的工程的進度、質(zhì)量、成本等因素。為了克服未知的恐懼感,項目經(jīng)理制定了大量的中間管理方法,希望能夠控制整個項目,最典型的莫過于要求開發(fā)人員頻繁的遞交各種表示項目目前狀態(tài)的報告。

在Planning XP一書中有一段討論輕重型方法論的精辟論述,它把重型方法論歸結(jié)為一種防御性的姿態(tài)(defensive posture),而把輕型方法論歸結(jié)為一種渴望成功(Plan to win)的心態(tài)。如果你是采用了防御性姿態(tài),那么你的工作就集中在防止和跟蹤錯誤上,大量的工作流程的制定,是為了保證項目不犯錯誤,而不是項目成功。而這種方法也不可謂不好,但前提是如果整個團隊能夠滿足前面所提到的兩個條件的話,項目也肯定會成功,但是重型方法論的一個弊端就在于,大家都在防止錯誤,都在懼怕錯誤,因此人和人之間的關系是很微妙的,要達到充分的溝通也是很難的。最終,連對人的評價也變成是以避免錯誤的多寡作為考評的依據(jù),而不是成就。我們在做試驗的時候,一位項目經(jīng)理開玩笑說,"方法論源自項目經(jīng)理的恐懼,這沒錯。但最糟糕的是整個團隊只有項目經(jīng)理一個人恐懼,如果能夠做到人人的恐懼,那大家也就沒有什么好恐懼的了。"這句話提醒了我們,如果一個團隊的精神就是力求成功,那么這支團隊的心態(tài)就和其它的團隊不同了,尤其是對待錯誤的心態(tài)上。根本就沒有必要花費大量的精力來預防錯誤,錯誤犯了就犯了,即時改正就可以了。這其實就是渴望成功的心態(tài)。





回頁首


方法論的藝術

管理,被稱為科學和藝術的融合體,而管理的藝術性部分很大程度的體現(xiàn)為人的管理上。我說,方法學,一樣是科學和藝術的融合體。這是有依據(jù)的,其實方法論和管理學是近親關系,管理學中有一門分支是項目管理,而在軟件組織中,項目管理是非常重要的,方法學就是一種針對軟件開發(fā)的一種特定的項目管理(或是項目管理的一個子集)。

重型方法最大的一個問題就在于他不清楚或忽略了藝術這個層次,忽視了人的因素,把人做為一個計量單位,一種資源,一種線性元素。而人的要素在軟件開發(fā)中是非常重要的,軟件開發(fā)實際上是一種知識、智力的轉(zhuǎn)移過程,最終形成的產(chǎn)品是一種知識產(chǎn)品,它的成本取決于開發(fā)者的知識價值,因此,人是最重要的因素。而人這個要素是很難衡量的,每個人都有不同的個性、想法、經(jīng)驗、經(jīng)歷,這么多復雜的因素加在一起,就導致了人的不可預見性。因此,我們強調(diào)管人的藝術。

最簡單的例子是,在重型方法中,我們的基本假設是對人的不信任。項目經(jīng)理要控制項目。但不信任就會產(chǎn)生很多的問題,比如士氣不高,計劃趕不上變化,創(chuàng)新能力低下,跳槽率升高等等。人都是希望被尊重的,技術人員更看重這一點,而很多公司也口口聲聲說自己多么多么以人為本,可是采用的卻是以不信任人為前提的開發(fā)方法,言行不一。我們說敏捷方法的出發(fā)點是相互信任,做到這一點是很難的,但是一旦做到了,那這個團隊就是非常具有競爭力的。因此,這就產(chǎn)生了一個問題,在沒有做到完全的相互信任之前,我們到底相不相信他人呢,這就是我提到的藝術性的問題,什么時候你要相信人?什么時候你不相信人,這些都是需要權衡的問題,也都是表現(xiàn)你藝術性的問題。





回頁首


敏捷

敏捷代表著有效和靈活。我們稱那些輕型的、有效的方法為敏捷方法。在重型方法中,我們在一些不必要、重復的中間環(huán)節(jié)上浪費了太多的精力,而敏捷則避免了這種浪費。我們的文章將會重點的討論敏捷(Agile)方法論的思想,敏捷這個名字的前身就是輕型。目前已經(jīng)有了一個敏捷聯(lián)盟,他們制定了敏捷宣言:

  • Individuals and interactions over processes and tools.
  • Working software over comprehensive documentation.
  • Customer collaboration over contract negotiation.
  • Responding to change over following a plan.

而我對敏捷的理解包括了幾個方面:

  • 較低的管理成本和高質(zhì)量的產(chǎn)出。軟件開發(fā)存在兩個極端:一個是沒有任何的管理成本,所有的工作都是為了軟件的產(chǎn)出,但是這種方式卻往往導致軟件開發(fā)過程的混沌,產(chǎn)品的低質(zhì)量,團隊士氣的低落。另一個是大量管理活動的加入,評審、變更管理,缺陷跟蹤,雖然管理活動的加入能夠在一定程度上提高開發(fā)過程的有序性,但是成本卻因此提高,更糟糕的是,很容易導致團隊的低效率,降低創(chuàng)新能力。因此,敏捷方法視圖尋找一個平衡點,用低成本的管理活動帶來最大的產(chǎn)出,即軟件的高質(zhì)量。

  • 尊重人性。敏捷方法尊重人性,強調(diào)效率。軟件開發(fā)可以說是一種腦力的投入,如果不能保證開發(fā)人員的自愿投入,產(chǎn)品就肯定要打折扣。事實多次的證明,一個愿意投入的開發(fā)人員和一個不愿意投入的開發(fā)人員效率相差在三倍以上,對組織的貢獻更是在十倍以上。

  • 溝通和反饋是一切的基礎。我們已經(jīng)討論過溝通的重要程度,而即時的反饋是擁抱變化的前提條件。

  • 客戶是上帝。沒有客戶就沒有一切,客戶的重要性可以用一句話來形容,就是以合理的成本建造合適的軟件(build the right system at the right cost)。

敏捷其實也有輕重之分,關鍵在于是否能夠做到有效和靈活。因此,敏捷方法論提倡的一個思想是"剛好夠(barely sufficient)"。不過這個"剛好夠"可不是那么容易判斷的。一支8個人的團隊采用XP方法,隨著方法的熟練使用,團隊的能力在不斷的增強,能夠處理的問題越越來越復雜,也許他們能夠處理采用重型方法的20個人團隊能夠處理的問題??墒侨绻麍F隊的人數(shù)突然增加到12人,這支團隊肯定就會出問題,他的表現(xiàn)可能還不如那支20個人的團隊了。人數(shù)增加了的時候,原先的方法肯定還做適當?shù)恼{(diào)整,比如說,在原先的敏捷方法上增加一些重型方法的技巧。我們不能夠要求一支6個人的團隊和一支20個人的團隊用同樣的方法,前者可能采用輕一些的敏捷方法,后者可能采用重一些的敏捷方法,關鍵的問題在于,兩支團隊都把重點放在溝通、反饋、頻繁交付軟件這些關鍵的因素上,也就是做到有效和靈活。





回頁首


架構設計

架構(Architecture)(也有被稱為體系結(jié)構的)是軟件設計中非常重要的一個環(huán)節(jié)。軟件開發(fā)的過程中只要需求和架構確定之后,這個軟件就基本上可以定型了。這就好比骨骼確定了,這個人的體形就不會有很大的變化。因此我選擇了架構設計來討論敏捷軟件開發(fā)(需求我已經(jīng)寫過了)。我們在前面討論過超集和子集的概念,因此我們接下去要討論的架構設計也是一個很小的子集。方法論如果沒有經(jīng)歷過多個項目的檢驗是不能稱為成功的方法論的,我也并不認為我的架構設計就是一個好的方法論,但引玉還需拋磚,他的主要目的是為了傳播一種思想。因此,我采用了模式語言(PLOP)做為寫作架構設計的形式,主要的原因就是模式是一種很好的組織思想的方法。

因此,在我們接下去的歷程中,我們集中討論的東西就圍繞著架構、方法學、敏捷這三個要素展開。這篇文章并不是討論如何編碼實現(xiàn)軟件架構的,也不要單純的把它看作架構設計的指南,其實文中的很多思想來自于方法論,因此提到的很多架構設計的思想也適用于其它工作,如果能夠了解這一點,看這篇文章的收獲可能會更多一些。



本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
敏捷思維- 架構設計中的方法學(7)
SOA和敏捷:是朋友?還是敵人?
敏捷開發(fā)方法學及應用
現(xiàn)代軟件開發(fā)方法
MDA模型驅(qū)動介紹
正確地做事與做正確的事同樣重要
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服