破門(mén)點(diǎn)滴(Java技術(shù)版)

          在日常學(xué)習(xí)和工作中記錄

            BlogJava :: 首頁(yè) ::  :: 聚合  :: 管理
            15 Posts :: 7 Stories :: 36 Comments :: 0 Trackbacks

          【破門(mén)點(diǎn)滴】敏捷究竟需要什么?

          簡(jiǎn)單、清楚的目的和原理引起了復(fù)雜、智能的行為
          復(fù)雜的規(guī)則和制度引起了簡(jiǎn)單、愚蠢的行為
          ——Dee Hock 1994Visa International CEO
          他在職期間使Visa全年收益由7.5億美金增長(zhǎng)到650億美金

           

          從貫徹敏捷原理的角度來(lái)說(shuō),過(guò)度強(qiáng)調(diào)對(duì)敏捷實(shí)踐的嚴(yán)格執(zhí)行其實(shí)反而會(huì)與敏捷背道而馳。因此任何一個(gè)團(tuán)隊(duì)準(zhǔn)備引入敏捷方法之前,必須要從最本質(zhì)的角度即敏捷原理來(lái)考察自己的項(xiàng)目(客戶、團(tuán)隊(duì)和資源),確定是否要執(zhí)行敏捷方法以及具體采用那些敏捷實(shí)踐。那么敏捷方法所依據(jù)的核心原理是什么呢?實(shí)踐敏捷究竟需要做到什么呢?本文談?wù)劽艚菰硪约耙恍?shí)踐應(yīng)用體會(huì)。

          破門(mén)

          2007517

          1        交付有用的產(chǎn)品

          敏捷團(tuán)隊(duì)必須時(shí)刻提醒自己,軟件項(xiàng)目的目標(biāo)就是向客戶交付有用的產(chǎn)品。如果沒(méi)有能上線的系統(tǒng)產(chǎn)品,無(wú)論你怎么強(qiáng)調(diào)你的團(tuán)隊(duì)實(shí)力、項(xiàng)目的進(jìn)展,從最本質(zhì)的角度來(lái)看,沒(méi)有可用的產(chǎn)品,項(xiàng)目就是失敗的!“必須把紅旗插在山頭上!不然,死多少人都沒(méi)有用!”——這是我在一個(gè)項(xiàng)目中客戶領(lǐng)導(dǎo)對(duì)我說(shuō)過(guò)的話。

          因此,敏捷方法學(xué)首先考慮這個(gè)原理提供了一系列非常有用的實(shí)踐。

          1.1 現(xiàn)場(chǎng)客戶

          在集成公司做過(guò)項(xiàng)目的朋友們絕大多數(shù)都應(yīng)該經(jīng)歷過(guò)現(xiàn)場(chǎng)開(kāi)發(fā)了,客戶總是希望能夠與開(kāi)發(fā)人員面對(duì)面的交流,并且他們希望能在出現(xiàn)問(wèn)題的時(shí)候第一時(shí)間找到能夠解決問(wèn)題的人。現(xiàn)場(chǎng)開(kāi)發(fā)讓客戶以為能夠很好地解決上面兩個(gè)問(wèn)題。但實(shí)際上,效果可能并不如客戶所想像。

          這里的問(wèn)題其實(shí)就是軟件項(xiàng)目最初遇到的難題,需求獲取和實(shí)現(xiàn)。現(xiàn)場(chǎng)開(kāi)發(fā)項(xiàng)目往往將全部的精力放在滿足用戶需求方面了,但是誰(shuí)又能保證說(shuō)滿足項(xiàng)目中說(shuō)了算的那個(gè)客戶提出的需求就是對(duì)產(chǎn)品最有用的呢?

          這個(gè)實(shí)踐就是要解決如果最快速提供有用的產(chǎn)品,必須滿足需求你不滿足肯定不行,但是全部的需求都去滿足也肯定不行。因此,敏捷方法在這里要求現(xiàn)場(chǎng)客戶的用意就是要時(shí)刻保持與客戶的溝通,以便確定最合適的需求范圍,讓團(tuán)隊(duì)能否高效運(yùn)作,用最小的代價(jià)提供出有用的產(chǎn)品。

          1.2 小發(fā)布

          敏捷方法要求最短時(shí)間內(nèi)發(fā)布可用的產(chǎn)品,小發(fā)布是十分有效的實(shí)踐。要實(shí)踐小發(fā)布就必須有大幅裁剪需求的能力,結(jié)合現(xiàn)場(chǎng)客戶實(shí)踐,可以更有效地定義小發(fā)布需要實(shí)現(xiàn)的特性,并且保證每次發(fā)布的產(chǎn)品都包含有實(shí)際可用的用戶價(jià)值。

          因?yàn)樾。院?jiǎn)單。如何將大的需求和系統(tǒng)變小卻是一門(mén)需要經(jīng)驗(yàn)和膽量的學(xué)問(wèn)。當(dāng)你沒(méi)辦法決定的時(shí)候,直覺(jué)也許是最可靠的了。沒(méi)有什么需要擔(dān)心,反正每次的發(fā)布都很小,所以改變方向起來(lái)也容易J

          小發(fā)布是敏捷方法響應(yīng)和控制需求變化的有效機(jī)制,第一時(shí)間將系統(tǒng)發(fā)布給現(xiàn)場(chǎng)客戶或是最終用戶,就可以在第一時(shí)間獲取反饋,從而降低需求變化對(duì)系統(tǒng)帶來(lái)的沖擊。

          1.3 測(cè)試優(yōu)先

          測(cè)試優(yōu)先是敏捷方法廣為接受的實(shí)踐了,先按照測(cè)試框架編寫(xiě)單元測(cè)試,再為系統(tǒng)添加實(shí)現(xiàn)的代碼,可以有效防止過(guò)度設(shè)計(jì)。讓程序員們自然而然的把注意力集中到提供客戶價(jià)值上,而不是將精力泛濫在無(wú)邊無(wú)際的代碼技巧之中。

          完善的測(cè)試也為系統(tǒng)重構(gòu)提供有效的屏障,檢驗(yàn)系統(tǒng)的重構(gòu)是否成功的標(biāo)準(zhǔn)仍然是系統(tǒng)是否有效地提供用戶價(jià)值。

          1.4 持續(xù)集成

          持續(xù)集成為項(xiàng)目提供了基線,為小發(fā)布提供便捷。每時(shí)每刻項(xiàng)目都有保障通過(guò)測(cè)試并且可以運(yùn)行的系統(tǒng)。再也不需要為準(zhǔn)備發(fā)布而辛苦地熬夜、匆忙地測(cè)試、混亂地運(yùn)行,然后準(zhǔn)備迎接無(wú)數(shù)的系統(tǒng)bug的煎熬了。持續(xù)集成讓這些過(guò)程每時(shí)每刻都在項(xiàng)目中自動(dòng)有序地進(jìn)行著。

          發(fā)布只需要從集成服務(wù)器上取出最新完成的版本就可以了。

          2        依賴于人和協(xié)作

          軟件項(xiàng)目的成功依賴于人和協(xié)作,在這點(diǎn)上沒(méi)有人能否認(rèn)。傳統(tǒng)軟件方法也是想盡一切辦法來(lái)加強(qiáng)協(xié)作的效率以及消除人對(duì)項(xiàng)目的負(fù)面影響。敏捷方法則從另一角度來(lái)強(qiáng)調(diào)要發(fā)揮人的積極因素以及強(qiáng)調(diào)直接的交流來(lái)提高協(xié)作效率,傳統(tǒng)的標(biāo)準(zhǔn)化管理流程和基于文檔的協(xié)作對(duì)于快速變化的項(xiàng)目要求已經(jīng)明顯不能適應(yīng)。因此,敏捷方法重新回到了發(fā)揮人和團(tuán)隊(duì)潛力的方向。任何系統(tǒng)和過(guò)程的適應(yīng)能力都無(wú)法與人來(lái)比,因此,充分發(fā)揮團(tuán)隊(duì)的個(gè)人和協(xié)作能力,就能夠得到最高的效率和最好的效果。

          2.1 白板

          白板是敏捷項(xiàng)目團(tuán)隊(duì)必備的利器,沒(méi)有白板的團(tuán)隊(duì)是無(wú)法想像的。

          在白板前面站立著的時(shí)候就是思維最活躍的時(shí)候,因?yàn)檎l(shuí)也。敏捷團(tuán)隊(duì)最常采用的方法就是所謂頭腦風(fēng)暴法,大家針對(duì)目標(biāo)主題在白板前討論,將所有能想到的概念、方法、詞句統(tǒng)統(tǒng)寫(xiě)到白板上,很快行之有效的解決方案就會(huì)突然之間出現(xiàn)在大家面前了。

          2.2 站立會(huì)議

          站著開(kāi)會(huì)往往效率更高,目標(biāo)更加清晰。每天團(tuán)隊(duì)之間需要時(shí)時(shí)刻刻保持高效的交流。夸張點(diǎn)說(shuō),敏捷團(tuán)隊(duì)的工作室往往更像一個(gè)熱鬧鬧的市集。安靜的環(huán)境并不一定就是軟件開(kāi)發(fā)最高效的環(huán)境。

          2.3 PP

          結(jié)對(duì)編程是提高個(gè)人效率非常有效的實(shí)踐,人們往往說(shuō)做什么都最好有個(gè)伴。巡警執(zhí)勤,飛行戰(zhàn)斗編隊(duì),拉力賽車,都是兩兩組合的生動(dòng)案例。軟件開(kāi)發(fā)中的結(jié)對(duì)編程要求更高,兩個(gè)人同時(shí)坐在電腦前面完成一個(gè)任務(wù),一個(gè)人負(fù)責(zé)實(shí)際操作,另外一個(gè)人負(fù)責(zé)即時(shí)審查,任何需要的時(shí)候兩人都可以互換角色。在PP對(duì)不同角色的名稱來(lái)說(shuō),更類似拉力賽車手。

          即時(shí)審查、點(diǎn)對(duì)點(diǎn)壓力、即時(shí)溝通、目標(biāo)導(dǎo)向、知識(shí)傳播,結(jié)對(duì)編程的好處不用在這里一一細(xì)數(shù)了。結(jié)對(duì)編程是將協(xié)作效率發(fā)揮到極致的實(shí)踐,不過(guò)認(rèn)真執(zhí)行它還真需要勇于嘗試,甚至需要強(qiáng)制性的約束。

          2.4 不加班

          加班是否真的無(wú)法避免?至少我經(jīng)歷的項(xiàng)目還沒(méi)有不加班的時(shí)候,有時(shí)候是必須,有些時(shí)候則是自愿,反正我個(gè)人是沒(méi)辦法做到每天8個(gè)小時(shí)滿負(fù)荷運(yùn)轉(zhuǎn)然后每周只工作5天。作為一個(gè)典型的中國(guó)程序員,我進(jìn)入工作狀態(tài)以及從工作狀態(tài)中退出都需要不少時(shí)間。不過(guò)身體狀態(tài)的確是一天不如一天,這也許是中國(guó)程序員的編程生命周期普遍比歐美短的重要原因吧。

          這個(gè)實(shí)踐,只有真正的高手才能做到罷。用中國(guó)的古語(yǔ)來(lái)說(shuō):靜如處子,動(dòng)如脫兔。能夠有效地控制自己工作狀態(tài)的人,誰(shuí)敢說(shuō)他不是高手?因此,對(duì)于這個(gè)實(shí)踐,我的建議是反過(guò)來(lái)考慮,努力不斷地嘗試控制自己的狀態(tài),應(yīng)該算是向高手邁進(jìn)的一個(gè)有效途徑吧J

          3        做盡可能簡(jiǎn)單的事情

          我個(gè)人認(rèn)為敏捷原理中最核心的原理就是簡(jiǎn)單了。一句話,簡(jiǎn)單可不簡(jiǎn)單!復(fù)雜、厚重的方法自然是稱不上敏捷的。因此,敏捷就是做盡可能簡(jiǎn)單的事情。簡(jiǎn)單的事情才有把握和可能去做好。當(dāng)項(xiàng)目中無(wú)數(shù)簡(jiǎn)單的事情都被做好以后,它必然就是一個(gè)不簡(jiǎn)單的成功項(xiàng)目了。

          3.1 將盡可能多的工作丟棄不做的藝術(shù)

          簡(jiǎn)單是將盡可能多的工作丟棄不做的藝術(shù)。在開(kāi)始動(dòng)手之前,要問(wèn)問(wèn)自己和團(tuán)隊(duì),如果我不做這件事情,會(huì)發(fā)生什么情況呢?會(huì)失去什么呢?

          敏捷方法會(huì)幫助我們來(lái)確定哪些工作是可能丟棄的,反過(guò)來(lái)說(shuō),丟棄盡可能多的工作,你所使用的方法就盡可能地趨于敏捷了。這也是一個(gè)不斷迭代和進(jìn)步的過(guò)程。

          3.2 更少的文檔

          敏捷方法最先倡導(dǎo)的一個(gè)實(shí)踐就是丟棄繁重的文檔,只用最少的時(shí)間和代價(jià)來(lái)記錄需求、設(shè)計(jì)和會(huì)議。文檔的目的也是為了交流,當(dāng)團(tuán)隊(duì)或者客戶能面對(duì)面交流的時(shí)候,我們就不要寫(xiě)文檔,直接面對(duì)面討論,然后用簡(jiǎn)單的方法記錄下結(jié)論,盡快去落實(shí)執(zhí)行。

          3.3 簡(jiǎn)單設(shè)計(jì)

          簡(jiǎn)單設(shè)計(jì)的目標(biāo)依然是為了減少工作,在沒(méi)有清晰地理解需求和目標(biāo)之前,我們不去做那些前置設(shè)計(jì)工作。換句話說(shuō),只針對(duì)已知的需求設(shè)計(jì)和實(shí)現(xiàn)。這是敏捷方法能夠快速適應(yīng)的重要實(shí)踐經(jīng)驗(yàn),設(shè)計(jì)的不足可以用不斷的重構(gòu)來(lái)彌補(bǔ)。重構(gòu)設(shè)計(jì)的驅(qū)動(dòng)過(guò)程也是針對(duì)變動(dòng)的需求來(lái)的,只不過(guò)是針對(duì)進(jìn)一步了解的更多已知需求來(lái)設(shè)計(jì)和實(shí)現(xiàn),為此我們要對(duì)原先的設(shè)計(jì)進(jìn)行調(diào)整和優(yōu)化。

          3.4 目標(biāo)和特征驅(qū)動(dòng)

          敏捷方法中需要不斷調(diào)整的內(nèi)容就是階段目標(biāo),因此我們采用快速迭代的過(guò)程,每次迭代都針對(duì)特定的功能需求和系統(tǒng)目標(biāo),在這點(diǎn)上敏捷也是特征驅(qū)動(dòng)的。這同樣也符合交付有用的產(chǎn)品原理。

          4        結(jié)語(yǔ)

          敏捷方法學(xué)提倡是知之而用的實(shí)踐精神,所有的敏捷方法都是實(shí)踐驅(qū)動(dòng)的。因此認(rèn)真地學(xué)習(xí)和理解敏捷原理才有助于我們理解敏捷實(shí)踐規(guī)則背后的相互關(guān)系。我們僅僅是引入幾條敏捷實(shí)踐不能說(shuō)就是實(shí)踐了敏捷方法,而要看我們項(xiàng)目實(shí)施是否時(shí)刻貫徹了敏捷原理的精神,針對(duì)項(xiàng)目的實(shí)際需要選擇甚至創(chuàng)造出最適合團(tuán)隊(duì)和項(xiàng)目環(huán)境的敏捷實(shí)踐,每個(gè)敏捷團(tuán)隊(duì)和敏捷項(xiàng)目都擁有自己獨(dú)特的敏捷方法。

           

          原文 PDF 下載

          不得窺道門(mén),不得悟佛門(mén),不得入窄門(mén),實(shí)乃破門(mén)。
          posted on 2007-05-17 19:18 破門(mén) 閱讀(1119) 評(píng)論(6)  編輯  收藏 所屬分類: brokendoor tips

          Feedback

          # re: 【破門(mén)點(diǎn)滴】敏捷究竟需要什么? 2007-05-17 20:52 yzgname
          不錯(cuò), 有收獲!!  回復(fù)  更多評(píng)論
            

          # re: 【破門(mén)點(diǎn)滴】敏捷究竟需要什么? 2007-05-17 21:19 劉甘泉
          測(cè)試優(yōu)先真的很重要,現(xiàn)在的公司為了節(jié)約成本,很多都沒(méi)有做單元測(cè)試,以至于在后面的維護(hù)時(shí)候是非常困難  回復(fù)  更多評(píng)論
            

          # re: 【破門(mén)點(diǎn)滴】敏捷究竟需要什么?[未登錄](méi) 2007-05-18 09:33 竹十一
          -------------堅(jiān)持這條早晚死人!-------------

          3.2 更少的文檔

          -------------堅(jiān)持這條早晚死人!-------------
            回復(fù)  更多評(píng)論
            

          # re: 【破門(mén)點(diǎn)滴】敏捷究竟需要什么? 2007-05-18 11:16 破門(mén)
          @竹十一
          需要強(qiáng)調(diào)的是少不等于沒(méi)有。
          文檔究竟少到什么程度不會(huì)死人,這個(gè)是需要按照項(xiàng)目情況、團(tuán)隊(duì)能力以及公司環(huán)境等等因素綜合考慮的。
          所以我們才說(shuō)敏捷方法中的簡(jiǎn)單是一門(mén)藝術(shù)!  回復(fù)  更多評(píng)論
            

          # re: 【破門(mén)點(diǎn)滴】敏捷究竟需要什么? 2007-05-18 12:28 G_G
          初DTD
          頂上先
            回復(fù)  更多評(píng)論
            

          # re: 【破門(mén)點(diǎn)滴】敏捷究竟需要什么? 2007-06-09 20:53 feettrace
          路過(guò),看過(guò),想過(guò)....  回復(fù)  更多評(píng)論
            

          主站蜘蛛池模板: 通城县| 庐江县| 清水县| 城固县| 襄城县| 彭州市| 中江县| 阿拉善右旗| 成安县| 临江市| 新蔡县| 休宁县| 上犹县| 凉城县| 石阡县| 绍兴市| 德令哈市| 海阳市| 阜城县| 内乡县| 阿克苏市| 项城市| 阿拉尔市| 芜湖县| 侯马市| 岳阳市| 托克逊县| 芮城县| 宝应县| 青阳县| 自治县| 横山县| 玛纳斯县| 昌平区| 平山县| 都兰县| 东方市| 新密市| 涡阳县| 和静县| 新蔡县|