敏捷軟件開發(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)勢有:
- 能夠,在任何時候,改變其對最小成本的觀點。
- 能夠根據(jù)來自市場或其他地方的反饋進行調(diào)整和應(yīng)變。
- 在任何時候都知道項目的狀態(tài),并具備可預(yù)見能力。
- 能夠從業(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)驗收測試的想法。
驗收測試
驗收測試用來保證:
- 客戶確信給定的功能能夠滿足設(shè)計的要求。
- 給予開發(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ā)有三個層次的策劃:
- 高層次的發(fā)布策劃,在這里策劃項目的所有發(fā)布。這通常取決于項目的規(guī)模,但是某些項目的多次發(fā)布要求對長達18個月的期限的高層次策劃。
- 發(fā)布策劃,第一次發(fā)布在這里被策劃。每次發(fā)布之間的間隔為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)系上。
?