隨筆 - 71  文章 - 15  trackbacks - 0
          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          因為口渴,上帝創(chuàng)造了水;
          因為黑暗,上帝創(chuàng)造了火;
          因為我需要朋友,所以上帝讓你來到我身邊
          Click for Shaanxi xi'an, Shaanxi Forecast
          ╱◥█◣
            |田|田|
          ╬╬╬╬╬╬╬╬╬╬╬
          If only I have such a house!
          〖總在爬山 所以艱辛〗
          Email:myesjoy@yahoo.com.cn
          NickName:yesjoy
          MSN:myesjoy@hotmail.com
          QQ:150230516

          〖總在尋夢 所以苦痛〗

          常用鏈接

          留言簿(3)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          Hibernate在線

          Java友情

          Java認證

          linux經(jīng)典

          OA系統(tǒng)

          Spring在線

          Structs在線

          專家專欄

          企業(yè)信息化

          大型設(shè)備共享系統(tǒng)

          工作流

          工作流產(chǎn)品

          網(wǎng)上購書

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          敏捷軟件開發(fā)(下篇)


          NetReptile推薦?[2005-7-17]
          出處:ZDNet
          作者:Brian Swan
          ?

          在敏捷軟件開發(fā)方法上中下系列的最后一篇文章里,我們將探討開發(fā)小組如何與客戶交互,如何讓其參與到開發(fā)過程里來。

          在《敏捷軟件開發(fā)》上中下系列的上篇里,我們了解了開發(fā)人員做法以及技術(shù)優(yōu)勢如何帶來質(zhì)量的顯著提高。在中篇里,我們探討了開發(fā)小組做法以及如何建立一個效率最高的開發(fā)小組,并重點研究了代碼編寫標(biāo)準(zhǔn)、連續(xù)集成和用于描述系統(tǒng)的通用語言。現(xiàn)在,我們要看看最外面的圓環(huán)——“統(tǒng)一小組做法(one team practice)”,這其中包括開發(fā)人員、測試人員和客戶——并幫助更好地協(xié)調(diào)業(yè)務(wù)和IT。

          協(xié)調(diào)業(yè)務(wù)和IT——“統(tǒng)一小組”做法
          敏捷軟件開發(fā)里的統(tǒng)一小組指的是敏捷開發(fā)小組和所有的利益相關(guān)人為了一個共同的目標(biāo)結(jié)成一個團隊工作。盡管小組里的每個成員都必須把各自主要精力放在具體的任務(wù)上,但是小組更喜歡開放的、真誠的和頻繁的溝通,而不是暗地里的操作。

          統(tǒng)一小組強調(diào)由開發(fā)人員作出技術(shù)決定而由客戶作出業(yè)務(wù)決定,一貫如此,毫無例外。高度的交流,例如每日例會以及項目輻射(在《中篇》里討論過)會幫助增加交流并不斷持續(xù)下去,以確保及時獲得頻繁的反饋信息。

          這一概念對于將敏捷開發(fā)的所有元素集中到一起是必需的。

          創(chuàng)建背景并取得需求——第一步
          在你開始敏捷開發(fā)的這一部分之前,從客戶、業(yè)務(wù)方和用戶取得需求信息;他們才是定義需求的人。由于業(yè)務(wù)方在這些做法中扮演了至關(guān)重要的角色,所以他們必須完全理解自己在敏捷開發(fā)環(huán)境里的角色是什么,以及他們能夠做到什么。讓其高速運轉(zhuǎn)起來肯定需要進行討論會和其他培訓(xùn)工作。

          在解釋敏捷開發(fā)的時候,需要向業(yè)務(wù)人員闡明的重要優(yōu)勢有:

          1. 能夠,在任何時候,改變其對最小成本的觀點。
          2. 能夠根據(jù)來自市場或其他地方的反饋進行調(diào)整和應(yīng)變。
          3. 在任何時候都知道項目的狀態(tài),并具備可預(yù)見能力。
          4. 能夠從業(yè)務(wù)的角度參與項目的指導(dǎo)工作。

          重要的成功因素

          • 理解——客戶將需要某種程序的培訓(xùn)才能確切地理解他們在敏捷開發(fā)環(huán)境里扮演的角色。
          • 溝通——以協(xié)作的形式與客戶進行交談和溝通是十分重要的。在整個項目過程中都應(yīng)該這樣,但是從一開始就堅持這樣顯得尤其重要。

          客戶/業(yè)務(wù)方介入——第二步
          在這一步驟里,我們要通過用戶的素材和驗收測試讓客戶參與到開發(fā)過程里來。很多客戶可能在編寫用戶素材或者驗收測試上經(jīng)驗不多或者完全沒有經(jīng)驗;再強調(diào)一次,可能需要某種程度的討論會或者培訓(xùn)來幫助其完成任務(wù)。

          用戶的素材
          用戶的素材就是“需求”。每個素材都代表系統(tǒng)需要如何解決某個特定的問題。然而,用戶的素材不是大量的寫滿需求的文檔,而是寫在素材卡上,應(yīng)該作為實現(xiàn)更進一步談話的引子。

          好的素材需要什么?
          客戶,或者更加常見的客戶小組,需要聚在一起,在一張5x3寸的素材卡上為系統(tǒng)編寫用戶素材。我們用財物管理軟件公司3Q Solutions來作為例子:

          “客戶希望能夠獲得一個規(guī)則引擎,從而可以用規(guī)則來評估顧客的經(jīng)濟狀態(tài)。”

          這一要求或者素材存在的問題是太不明確。編寫好素材卡的正確規(guī)則應(yīng)該是INVEST:

          獨立的Independent)
          可協(xié)商的(Negotiable)
          垂直的(Vertical)
          可估計的(Estimable)
          短小的(Small)
          可測試的(Testable)

          面的素材顯然是不可估計的(很難判斷它需要花多長時間)、不短小的(這是一個非常巨大的、不明確的要求),也是不可測試的(你如何能夠?qū)ο襁@樣的要求進行由測試驅(qū)動的開發(fā)工作?)。所以下面這樣一個素材可能會更好:

          “客戶希望能夠分析顧客當(dāng)前擁有的現(xiàn)金量——太多、太少,還是剛剛好(取決于生活方式的成本和對風(fēng)險的態(tài)度)。”

          這一素材就滿足了我們INVEST標(biāo)準(zhǔn)的所有要求。當(dāng)這個素材在小組(客戶和開發(fā)方)中討論的時候,它很明顯地就傳達了客戶真正需要的是具備說明規(guī)則引擎的能力。上面的例子表明,一條規(guī)則就足夠說明用戶的需要。這就是編寫素材的方法。重要的是,素材要引發(fā)產(chǎn)生對話,而對話帶來對客戶需求的明確和真正理解。

          溝通
          要記住,素材的主導(dǎo)思想是,它們是發(fā)生更進一步對話的引子。其原因是語言要以上下文和理解為基礎(chǔ)。沒有提問,沒有對話,我們將無法體會其中微妙的含義。我們就以Matt Cohn’s Buffalo這個短語為例子。Buffalo(布法羅市)是美國紐約州的一座城市,是野牛(bison)的同義詞,還有動詞“欺騙和困惑”的意思。所以這樣一個句子“Buffalobuffalobuffalobuffalo”是成立的。或者更加明確一點就是來自(紐約州)布法羅市的野牛欺騙了其他的野牛(bison from Buffalo (NY) intimidate and confuse other buffalo)。所以如果沒有上下文,這個短語就是毫無意義的。

          在每張素材卡的背面,我們建議客戶快速記下任何有關(guān)驗收測試的想法。

          驗收測試
          驗收測試用來保證:

          1. 客戶確信給定的功能能夠滿足設(shè)計的要求。
          2. 給予開發(fā)人員一個明確的停止點:當(dāng)驗收測試通過的時候,功能就被實現(xiàn)了。

          在敏捷開發(fā)項目里,客戶要編寫所有的驗收測試。在項目初期,開發(fā)人員可能需要與客戶緊密合作,以編寫驗收測試的內(nèi)容。

          我們還建議你使用AT框架并將測試自動化。開人員人需要能夠隨著他們不斷加入新功能而反復(fù)地運行這些測試。

          下面就是與上述素材相關(guān)的AT框架的例子。

          交互測試(示例)

          //概述
          “分析顧客的現(xiàn)金收支狀況,考察他們在給定的生活方式成本和對風(fēng)險的態(tài)度的條件下是否握有過多的現(xiàn)金。”

          //設(shè)置顧客數(shù)據(jù)

          ?

          ?

          UserClicksMainMenu

          MenuFinancialObjectives

          ?

          UserInputsText

          FinancialObjectivesAttitudeToRisk

          “3-低回報-長線投資”

          UserClicksMainMenu

          MenuCurrentBalanceSheet

          ?

          UserInputsText

          CurrentBalanceSheetTotalCash

          30000

          UserClicksMainMenu

          MenuFinancialObjectives

          ?

          UserInputsText

          FinancialObjectivesLifestyleCost

          25000

          //現(xiàn)金規(guī)則

          ?

          ?

          TestValueOfText

          AnalyseObservation

          “如果擔(dān)心風(fēng)險,你應(yīng)該維持不超過#12,500的現(xiàn)金結(jié)余。”

          TestValueOfText

          AnalyseRecommendation

          “考慮將#17,500從現(xiàn)金帳戶轉(zhuǎn)移到可投資的資產(chǎn)上。”

          TestValueOfText

          AnalyseDestination

          “查詢投資本金總額,將多余的現(xiàn)金轉(zhuǎn)移到現(xiàn)金存儲帳戶,除非用現(xiàn)金購買資產(chǎn)。”

          //hyperlink

          ?

          ?

          UserClicksControl

          AnalyseDestination

          ?

          TestValueOfLabel

          WorkAreaTitle

          “本金總額”

          在3Q公司,客戶會編寫驗收測試,并以電子文本的形式每天提交給開發(fā)小組。所有的驗收測試都會被盡早地提供給開發(fā)小組。這一過程與測試-編碼-重整循環(huán)配合得相當(dāng)好,它使得開發(fā)人員可以在進行驗收測試失敗之后,運行通過測試-編碼-重整循環(huán),然后重新運新驗收測試,直到看到其通過測試。每個素材都可能多次進行驗收測試,但是一旦所有的驗收測試都通過了,那么該素材/功能的實現(xiàn)就完成了。

          重要的成功因素

          • 不慌不忙——用戶素材不容易寫好,所以在進行首批任務(wù)和討論任務(wù)的時候給自己充裕的時間。
          • 驗收測試幫助——開發(fā)人員可能需要從一開始就與客戶一起編寫驗收測試。專門為這一任務(wù)撥出時間——好的驗收測試將帶來不同尋常的收獲。
          • 尋求幫助——如果意識到你和你的小組需要幫助——去尋求幫助吧,不要猶豫!
          • 已有的需求文檔——如果有現(xiàn)成的需求文檔,你要將它用作編寫素材的基礎(chǔ)。要記住,把這些文檔當(dāng)作“新的”素材。它們是對話的要點,而不是定好的要求。

          策劃——第三步
          敏捷軟件開發(fā)有三個層次的策劃:

          1. 高層次的發(fā)布策劃,在這里策劃項目的所有發(fā)布。這通常取決于項目的規(guī)模,但是某些項目的多次發(fā)布要求對長達18個月的期限的高層次策劃。
          2. 發(fā)布策劃,第一次發(fā)布在這里被策劃。每次發(fā)布之間的間隔為3個月。
          3. 反復(fù)策劃,通過其來策劃下兩個星期的工作。

          這一三級策劃過程的目的是讓小組首先理解最終的目標(biāo),但是只詳細策劃他們現(xiàn)在所知的內(nèi)容——未來兩周的工作。

          發(fā)布策劃
          在高層次發(fā)布策劃階段,客戶和開發(fā)人員應(yīng)該在一起共同討論和理解整個系統(tǒng)。通常已經(jīng)存在的需求文檔能夠用于啟動這一討論。在理想狀況下,客戶應(yīng)該在開會的時候帶上含有即將發(fā)布的大多數(shù)內(nèi)容的素材卡。

          在會議過程中,開發(fā)人員將需要估計素材的難度。這可以在會議過程中或者在會議之后進行。我們建議每個人相互比較各自素材,并把具有相同難度的素材集中到一起。然后,使用一個從最簡單到最難的測量表,你就可以開始估計每個素材(的難度了)。小組使用不同的方法來給素材評分,按照難度分別打上1到10分。

          現(xiàn)在客戶能夠策劃最初的高層次發(fā)布計劃了。高層次發(fā)布并不一定要十分精確,優(yōu)先順序和估計都不需要很可靠,但是它會為小組定下方向和提供決策的足夠信息。

          小型發(fā)布
          下一步,客戶需要拿走估計好的素材卡,并根據(jù)最近一個發(fā)布將素材的重要性的優(yōu)先順序排列好。客戶需要考慮它們需要系統(tǒng)立即實現(xiàn)什么,因而這些素材將構(gòu)成即將進行的發(fā)布。這些估計在這里變得十分重要,因為開發(fā)人員已經(jīng)估計的是他們能夠給定的發(fā)布時間里完成什么;(這個給定的時間)在大多數(shù)情況下是3個月。

          短期發(fā)布循環(huán)可以保證緊密的反饋循環(huán),還能讓小組把精力放在與項目緊密相關(guān)的重要目標(biāo)上。

          反復(fù)策劃
          現(xiàn)在小組需要為未來兩周制定具體的計劃。再強調(diào)一次,客戶必須將素材的優(yōu)先順序排列出來,詳細說明他們希望在未來兩周里看到的功能。

          這些素材卡然后就被放到兩周的反復(fù)(發(fā)布里)。最近的一次反復(fù)將是小組立即進行的工作。他們將交付這個反復(fù),也就是全力工作、軟件測試和取得反饋(即再次為未來兩周策劃),然后再次開始。如果素材在一個反復(fù)之前就完成了,開發(fā)人員會要求獲得更多的素材。如果所有的素材都看起來是無法完成的,那么開發(fā)人員和客戶要共同將素材移到下一個反復(fù)里或者適當(dāng)?shù)胤指钜幌滤夭摹?/p>

          兩周的反復(fù)讓客戶可以充分利用任何變化。例如,3Q公司碰到了一個很有預(yù)見能力的客戶。他意識到一個按計劃放在發(fā)布后期的素材事實上需要更早完成。在經(jīng)過一個簡短的討論之后,小組用客戶要求的素材替換掉了當(dāng)前發(fā)布里具有同等價值的素材。那么成本呢?只是一個15分鐘的對話。

          以上只是對策劃過程如何工作的簡要概述。我們建議尋求對該過程這一部分的一些幫助或者指導(dǎo),因為它可能會十分復(fù)雜,仔細調(diào)整常常也是必需的。

          這一反復(fù)過程和發(fā)布策劃分別要每兩個星期和每三個月進行一次。

          重要的成功因素

          • 在反復(fù)中期進行一次檢查——盡早檢查小組在反復(fù)中期的進展情況。
          • 估計就是這樣——小組一開始的估計常常會偏離甚遠——開發(fā)人員都是樂觀主義者!但是隨著小組進展到新的反復(fù)并適應(yīng)這一過程,估計(的準(zhǔn)確性)或者速度(小組工作有多快)就會確定下來。
          • 昨天的天氣——一旦完成了一個反復(fù),你將對小組的速度有一個粗略的概念——兩個星期里可以交付多少素材。這就是小組認可的在未來兩周里的速度和小組工作量。隨著小組的成熟,具備更好地進行估計的能力,你的速度可能會提高,然后固定在一個穩(wěn)定的速度上。
          • 速度不是一根棍子——而是對管理者的提醒——速度不是用來鞭打小組的大棒;它是用來測量自然波動的。
          • 決策——客戶或者客戶小組必須具有決策權(quán),或者能夠迅速進行決策,尤其是在需要變化或者適應(yīng)的時候。
          • 協(xié)商的意愿——客戶必須愿意就范圍等內(nèi)容進行協(xié)商。這才是敏捷開發(fā)的工作方式:就范圍進行協(xié)商,排列最具業(yè)務(wù)價值的功能的優(yōu)先順序。

          敏捷開發(fā)里的策劃可能會很困難,所以我們建議你去尋求一些幫助,并花時間來完成它。

          保持高效——第四步
          逐步推進這一過程的最佳方法之一是有一個在現(xiàn)場的客戶。最理想的方法是讓客戶坐在小組成員當(dāng)中,這樣就可以隨時回答問題。這限制了開發(fā)人員的隨意猜想。此外,在現(xiàn)場的客戶能夠以最快的速度回答開發(fā)人員的疑問。

          這并不意味著這個客戶不去從事他的“日常”工作,而是說他就在周圍準(zhǔn)備好回答問題。即使隔著一層樓也會影響溝通。要進行面對面的對話,而不是用電話或者電子郵件。

          顯然,設(shè)置現(xiàn)場客戶并不總是可能的,在這種情況下,他應(yīng)該盡可能地接近小組,并盡可能地參加每日例會。如果這也不可能,那么你就要讓他參加日常會議——至少一周一次——以確保你在不斷地去的反饋意見和溝通。

          對反饋和溝通的增加也需要定期進行回顧。這最好應(yīng)該在每個反復(fù)結(jié)尾的時候進行。這樣的回顧能夠讓小組有機會坐下來檢查上一個反復(fù),并弄清楚什么做得好、什么做得不好,以及下一次能夠把什么做得更好。應(yīng)該問三個問題:什么有用?什么沒有用?我們要改進什么?

          重要的成功因素

          • 現(xiàn)場與否?——現(xiàn)場客戶或許會帶來一些問題,但是如果可能的話還是要找一個現(xiàn)場客戶。如果無法實現(xiàn),就要尋找其他的途徑來確保定期的溝通。
          • 回顧——把在每次反復(fù)結(jié)束的時候進行回顧作為一條紀(jì)律定來下,并把人們的想法付諸行動。

          我們剛剛更加仔細地探討了《上篇》里第一個圖表的外層圓環(huán),它需要所有參與者的同意。這可能是敏捷開發(fā)里最困難的一部分,但是它能夠很好地協(xié)調(diào)業(yè)務(wù)和IT,而且其好處不僅對于業(yè)務(wù)而且對于IT也是很有價值的。

          總結(jié)
          盡管在本系列里我們向你講解了如何一步步地培養(yǎng)敏捷軟件開發(fā)的能力,以及如何從內(nèi)到外樹立開發(fā)人員的信心,然后是開發(fā)小組的信心,最后是整個項目小組的信心。從在Exoftware公司的經(jīng)驗可以看出,很多公司都選擇為某個項目建立一個完整的敏捷開發(fā)實驗小組,并讓一個指導(dǎo)老師手把手地幫助小組。如果你選擇這一方法,你將具有從所有做法直接獲得好處的優(yōu)勢,此外,它將給你適應(yīng)你具體環(huán)境的有價值的信息。簡單地說有:

          實驗性的敏捷軟件開發(fā)——如何開始
          你的目標(biāo)是什么?
          評估你現(xiàn)在所處的位置以及你想要去哪里,這對于使用敏捷開發(fā)做法來說是至關(guān)重要的。這將幫助你確定希望取得的預(yù)期成果。對其的外部評估常常也是很有用的,因為它們將為處理你的問題提供一個客觀的視角。

          實驗性的敏捷開發(fā)
          雖然我們已經(jīng)敘述了開發(fā)敏捷開發(fā)的一種方法,但是在一個項目上引導(dǎo)實現(xiàn)敏捷開發(fā)是理解敏捷開發(fā)方法是否適用于你的機構(gòu)的最佳方法,它還會幫助你了解如何適應(yīng)自己的環(huán)境。

          測量標(biāo)準(zhǔn)
          如果可能的話,你要在項目開始前或者在實現(xiàn)敏捷開發(fā)做法之前收集一些測量標(biāo)準(zhǔn)。即使這些標(biāo)準(zhǔn)來自于其他的項目,它們也將有助于為敏捷開發(fā)已經(jīng)實現(xiàn)的內(nèi)容提供一個良好的基準(zhǔn)。你還要確保能夠在敏捷開發(fā)項目過程中以及之后收集到一些高標(biāo)準(zhǔn)的測量標(biāo)準(zhǔn)。缺陷率、測試內(nèi)容或者最終期限都是很好的且簡單易行的高標(biāo)準(zhǔn)測量標(biāo)準(zhǔn)。

          環(huán)境
          要明白實驗性的敏捷開發(fā)可能要求對你的物理環(huán)境進行一些改變。例如,開放的工作空間是敏捷開發(fā)真正起效的必要條件。

          尋求幫助
          外部的幫助能夠指導(dǎo)你的實驗性項目邁向成功。它能夠幫助你理解你在哪里以及你想去哪里,并且能夠向你指明如何讓敏捷開發(fā)適應(yīng)你的環(huán)境,從而到達這一目標(biāo)。此外,外部幫助可以確保小組集中精力回答隨時出現(xiàn)的問題。為將敏捷開發(fā)應(yīng)用到其他工程小組里而樹立一個業(yè)務(wù)案例也是十分重要的。

          Brian Swan是Exoftware公司教授敏捷開發(fā)的指導(dǎo)老師。他在敏捷開發(fā)的技術(shù)和管理方面具有相當(dāng)豐富的經(jīng)驗,曾經(jīng)帶領(lǐng)很多小組成功地轉(zhuǎn)換到了敏捷開發(fā),并以敏捷開發(fā)的思想和做法來培訓(xùn)開發(fā)人員和管理人員。他在Exoftware公司和在敏捷開發(fā)方面的工作使他到過很多公司,并對其開發(fā)小組產(chǎn)生了持續(xù)的、積極的影響。Brian先前的經(jīng)驗還包括擔(dān)任Napier大學(xué)的講師,講授軟件開發(fā)和人機互動。Brian可以通過電子郵件聯(lián)系上。

          ?

          posted on 2006-08-09 23:33 ★yesjoy★ 閱讀(189) 評論(0)  編輯  收藏 所屬分類: 軟件工程學(xué)
          主站蜘蛛池模板: 柳江县| 共和县| 深水埗区| 准格尔旗| 门头沟区| 甘南县| 景宁| 萍乡市| 西藏| 通化县| 清新县| 安乡县| 甘肃省| 南投县| 海安县| 搜索| 辽宁省| 太原市| 革吉县| 遵义县| 驻马店市| 名山县| 岳阳县| 滨海县| 册亨县| 西平县| 湾仔区| 巨野县| 台南市| 县级市| 乐昌市| 额敏县| 长汀县| 峨边| 抚顺县| 丽水市| 江安县| 景谷| 武义县| 云和县| 沂南县|