楊 鵬
(陜西工業(yè)職業(yè)技術(shù)學(xué)院,陜西咸陽 712000)
為了能夠在變幻莫測的現(xiàn)實(shí)環(huán)境中以可預(yù)期方式交付結(jié)果,“迭代”方法應(yīng)運(yùn)而生?!安淮_定性”將持續(xù)存在,需要采用一種與之抗衡的技術(shù),這種技術(shù)就是迭代和增量開發(fā),借助這種技術(shù)賦予的力量,能夠克服不確定性,或至少能系統(tǒng)降低不確定性,使其處于可控范圍,以達(dá)到預(yù)期的目標(biāo)。
迭代——反復(fù)說念和執(zhí)行動(dòng)作。
增量——(1)增加量;(2)變大、增加。
如何在軟件開發(fā)領(lǐng)域應(yīng)用此方法呢?在某種意義上,軟件開發(fā)項(xiàng)目的很多方面是“理論”,更準(zhǔn)確地講是需要予以評(píng)估的“斷言”。“計(jì)劃”本身由多個(gè)描述任務(wù)用時(shí)的斷言組成。“要求”是描述適當(dāng)解決方案的特點(diǎn)的斷言。不能僅憑某些利益相關(guān)方或主題專家的判斷來確定要求是否有效。甚至,需要評(píng)估這些要求,判斷它們是否針對(duì)當(dāng)前問題提出了合理的解決方案。
此推理引導(dǎo)采用這樣一種軟件開發(fā)風(fēng)格:通過設(shè)計(jì)和開發(fā)多個(gè)可論證的系統(tǒng)版本,來反復(fù)驗(yàn)證和評(píng)估計(jì)劃的斷言;會(huì)客觀地評(píng)估每一版本確認(rèn)它是否降低了項(xiàng)目風(fēng)險(xiǎn);在前一版本的基礎(chǔ)之上構(gòu)建新的版本,直至完成解決方案。
通常更多地將這種開發(fā)風(fēng)格定義為迭代和增量開發(fā),它具有以下特點(diǎn):
迭代運(yùn)用一組活動(dòng)來評(píng)估一組斷言、消除一組風(fēng)險(xiǎn)、完成一組開發(fā)目標(biāo),并逐步生成和提煉有效的解決方案。
之所以稱為“迭代”,是因?yàn)樗ㄟ^反復(fù)運(yùn)用核心開發(fā)活動(dòng),不斷增進(jìn)對(duì)問題的理解程度、完善解決方案的定義和促進(jìn)實(shí)現(xiàn)解決方案。
之所以稱為“增量”,是因?yàn)槊拷?jīng)歷一個(gè)迭代循環(huán),都可以增進(jìn)對(duì)問題的了解,增強(qiáng)解決方案的能力。
通過連續(xù)多次應(yīng)用迭代循環(huán)來打造一個(gè)項(xiàng)目。
真正有效的開發(fā)活動(dòng)必須兼具迭代和增量特點(diǎn)。如果開發(fā)活動(dòng)僅有迭代特點(diǎn),沒有增量特點(diǎn),那么,雖然可以一次次地迭代執(zhí)行活動(dòng),卻不能朝著項(xiàng)目既定目標(biāo)前進(jìn);換句話說,不能降低風(fēng)險(xiǎn),也不能逐步構(gòu)建解決方案。循序漸進(jìn)地降低風(fēng)險(xiǎn)和穩(wěn)步邁向項(xiàng)目目標(biāo)是迭代和增量開發(fā)的品質(zhì)保證。
1.軟件開發(fā)存在巨大的風(fēng)險(xiǎn),但問題到底出在哪里呢?這對(duì)于問題的解決至關(guān)重要。
1)在沒有深刻理解業(yè)務(wù)需求的情況下就必須完成需求分析;
2)客戶在沒有弄明白自己的真正需求的情況下就被要求確定軟件的業(yè)務(wù)需求;
3)在沒有與客戶再次溝通的情況下埋頭苦干,直到完成開發(fā)并交付客戶。
2.既然問題出在這里,就可以制訂解決辦法:
1)業(yè)務(wù)需求的分析不再是一蹴而就,而是貫穿軟件開發(fā)的始終。一方面,在與客戶的持續(xù)溝通中加深業(yè)務(wù)領(lǐng)域的理解,進(jìn)而加深對(duì)業(yè)務(wù)需求的理解,另一方面,客戶也在加深對(duì)軟件的理解,進(jìn)而完善自己的需求。
2)軟件開發(fā)的過程不再是單反面的埋頭苦干,而是雙方的良性互動(dòng)。定期的用戶體驗(yàn),可使用戶及時(shí)了解項(xiàng)目進(jìn)度,發(fā)現(xiàn)軟件問題,并及時(shí)提出來予以糾正,使軟件的開發(fā)不斷朝著正確的方向前進(jìn)。
這就是迭代式開發(fā)。它是對(duì)以往開發(fā)模式的一種革新,但不是對(duì)以往開發(fā)模式的完全否定與摒棄,而是一種改造。
以往的瀑布式軟件開發(fā)模式將整個(gè)軟件開發(fā)過程分為四個(gè)階段:需求分析、設(shè)計(jì)、開發(fā)、測試。與瀑布式軟件開發(fā)不同,迭代式軟件開發(fā)首先將整個(gè)開發(fā)過程分為一個(gè)又一個(gè)的小段,每個(gè)小段大概在20個(gè)工作日左右,被稱為“迭代(Iteration)”。一個(gè)迭代就是一個(gè)小的開發(fā)過程,如同瀑布式開發(fā)一樣被分為四個(gè)階段:需求分析、設(shè)計(jì)、開發(fā)、測試。
采用迭代式開發(fā),就是將以往的一個(gè)瀑布,變成了數(shù)個(gè)循環(huán)往復(fù)的瀑布,使軟件以進(jìn)化的方式逐漸推進(jìn)。
最初的迭代,開發(fā)的是軟件最基本最主要的功能,經(jīng)過第一次迭代以后交付給客戶。這時(shí)候客戶看到的,不再是虛無縹緲的需求描述,而是實(shí)實(shí)在在的軟件界面。在此基礎(chǔ)上,客戶可能會(huì)認(rèn)可設(shè)計(jì),也可能提出一些改進(jìn)意見。修改這些意見,開始進(jìn)入第二次迭代。第二次迭代可能是在第一次迭代的基礎(chǔ)上進(jìn)一步豐富和完善功能,也可能是進(jìn)一步實(shí)現(xiàn)其它第一次迭代還未實(shí)現(xiàn)的功能,之后再次交付客戶。
如此循環(huán)往復(fù),使不斷在需求分析、設(shè)計(jì)、開發(fā)、測試,以及交付中,推進(jìn)軟件開發(fā)。這樣的開發(fā)過程,注定最終交付給客戶的是他們滿意的軟件。這就是迭代式軟件開發(fā)。
迭代開發(fā)的本質(zhì)是一種以團(tuán)隊(duì)為基礎(chǔ)的解決問題和開發(fā)解決方案的方法。它需要各參與方(包括開發(fā)團(tuán)隊(duì)、客戶團(tuán)隊(duì)和管理團(tuán)隊(duì))采用多種協(xié)作技術(shù)。為了研究這種理念,需要考慮迭代開發(fā)對(duì)參與軟件開發(fā)項(xiàng)目的最常見角色的影響。
想一想?yún)⑴c軟件開發(fā)的角色,會(huì)發(fā)現(xiàn)這些角色分為三大類。
核心開發(fā)團(tuán)隊(duì) 這些人員關(guān)注于按照要求設(shè)計(jì)和開發(fā)解決方案,包括應(yīng)用核心開發(fā)原理(架構(gòu)、分析、設(shè)計(jì)、實(shí)現(xiàn)和測試等)開發(fā)優(yōu)質(zhì)組件和解決方案。
客戶團(tuán)隊(duì) 這些人員關(guān)注于確定要解決的問題以及要構(gòu)建的內(nèi)容(包括更改業(yè)務(wù)流);他們必須確保完成的解決方案為委托方提供足夠大的利益。
管理團(tuán)隊(duì) 這些人員關(guān)注于確保客戶、業(yè)務(wù)和開發(fā)目標(biāo)是一致的,確定問題是正確的,構(gòu)建了解決這些問題的正確方案,開發(fā)工作正以高效和受控方式進(jìn)行。
1.站在核心開發(fā)團(tuán)隊(duì)的角度分析迭代
站在核心開發(fā)團(tuán)隊(duì)的角度分析項(xiàng)目的變化。該團(tuán)隊(duì)負(fù)責(zé)應(yīng)用開發(fā)原理生成滿足客戶要求的系統(tǒng)的發(fā)布版本,開發(fā)原理包括分析、設(shè)計(jì)(包括架構(gòu))和實(shí)現(xiàn)(包括單元和集成測試)。即使分配客戶代表或業(yè)務(wù)分析師直接參與工作或永久加入開發(fā)團(tuán)隊(duì),也認(rèn)為應(yīng)由客戶團(tuán)隊(duì)提出要求。下一節(jié)將站在客戶團(tuán)隊(duì)的角度分析迭代。
2.站在客戶的角度分析迭代
為了兌現(xiàn)迭代和增量開發(fā)的所有承諾,您必須確保這種實(shí)踐的影響超出了技術(shù)和開發(fā)社區(qū)。在理想情況下,應(yīng)用的迭代實(shí)踐將深入地、持續(xù)地影響到參與項(xiàng)目的所有業(yè)務(wù)人員,還從根本上改變了這些人描述、支付和實(shí)現(xiàn)商業(yè)利益(由成功開發(fā)軟件解決方案帶來)的方式。
如果迭代和增量開發(fā)的采用沒有影響到業(yè)務(wù),也不影響實(shí)現(xiàn)迭代開發(fā)解決方案提供的利益的方式。那么這種采用僅起技術(shù)保障作用,對(duì)開發(fā)團(tuán)隊(duì)之外的圈子幾乎沒什么影響。為了釋放全部潛力,還必須改變項(xiàng)目與利益相關(guān)方的交互方式。
絕大多數(shù)迭代和增量開發(fā)文獻(xiàn)都濃墨重彩地分析開發(fā)人員和開發(fā)團(tuán)隊(duì)領(lǐng)導(dǎo)者。雖然此方法對(duì)開發(fā)團(tuán)隊(duì)的影響至關(guān)重要,但迭代和增量開發(fā)的真正價(jià)值在于其極大地提升商業(yè)效果的潛力。為了取得這樣的利益,客戶代表、業(yè)務(wù)分析團(tuán)隊(duì)、系統(tǒng)的最終用戶、業(yè)務(wù)領(lǐng)導(dǎo)者(贊助方)等業(yè)務(wù)人員必須積極參與到項(xiàng)目中來,而且需要改變他們與開發(fā)團(tuán)隊(duì)的交互方式。本節(jié)將分析這些變化及影響。將分別考慮這四類客戶的觀點(diǎn),以及采用迭代和增量的變化如何對(duì)整個(gè)業(yè)務(wù)產(chǎn)生積極影響。
3.站在管理團(tuán)隊(duì)的角度分析迭代
前面介紹了在一系列迭代(專注于提供業(yè)務(wù)價(jià)值)中開展協(xié)作的業(yè)務(wù)團(tuán)隊(duì)和開發(fā)團(tuán)隊(duì),下來需要站在管理人員的角度分析迭代,并了解這種做法的重要性。
首先,設(shè)想一個(gè)缺乏管理指導(dǎo)的軟件開發(fā)項(xiàng)目(可能親身經(jīng)歷過這樣的項(xiàng)目)的場景。這樣的項(xiàng)目通常缺少中長期發(fā)展規(guī)劃,進(jìn)展方向隨意而為,幾乎沒有哪個(gè)團(tuán)隊(duì)成員了解要去往何方。如果沒有迭代計(jì)劃,將無從了解項(xiàng)目將在何時(shí)結(jié)束,完成項(xiàng)目需要哪些資源,或者何時(shí)需要這些資源。沒有估算系統(tǒng)來幫助判斷項(xiàng)目成本,客戶和投資方只會(huì)為最小的項(xiàng)目注資,人們幾乎不知道項(xiàng)目如何發(fā)展,以便達(dá)到交付解決方案的目標(biāo)。
落入理想主義的陷阱將認(rèn)為,如果團(tuán)隊(duì)致力于實(shí)現(xiàn)目標(biāo),將會(huì)自行組織、履行對(duì)組織的所有承諾,并快速高效地交付高質(zhì)量的軟件。在現(xiàn)實(shí)中,即便是最優(yōu)秀的團(tuán)隊(duì)也需要進(jìn)行必要的監(jiān)督才能確保日復(fù)一日的工作向著長期目標(biāo)邁進(jìn)。更重要的是,通過管理才能將團(tuán)隊(duì)擰成一股繩。
缺乏管理往往是造成很多項(xiàng)目失敗的根本原因。人們(特別是那些非管理者)很容易誤認(rèn)為,管理基本上就只需要一些官僚主義,管理者的職責(zé)就是保持這種官僚色彩,而讓其他團(tuán)隊(duì)成員去努力工作。實(shí)際上,許多平庸的管理者在一定程度上也確實(shí)是這樣做的;如果管理者所做的就是這些,項(xiàng)目將很可能失敗。
管理不僅是做筆記、監(jiān)督時(shí)間表和留意預(yù)算;領(lǐng)導(dǎo)力和工作方向是取得成功的基礎(chǔ)。正確的管理為以下基本問題給出了清晰的答案。
“正在解決正確的問題嗎?”
“有資源交付解決方案嗎?”
“正在做正確的事嗎?正在逐漸靠近最終目標(biāo)嗎?”
“在愚弄自己,誤認(rèn)為們真的可以在規(guī)定的時(shí)間內(nèi),使用分配的資源交付解決方案嗎?”
規(guī)劃和評(píng)測不會(huì)自行發(fā)揮作用,它們是幫助管理者回答上述問題的工具。有人會(huì)指出,優(yōu)秀的管理者是懷有進(jìn)取心的懷疑論者:他們找出問題并在問題仍處于管理和控制范圍時(shí)克服問題。管理是一門智能預(yù)測藝術(shù)。
采用迭代和增量的開發(fā)技術(shù)不完全是技術(shù)決策,不只影響參與到項(xiàng)目中的開發(fā)人員和其他技術(shù)人員。它代表項(xiàng)目構(gòu)思和進(jìn)展方式的根本變革,變化影響著參與項(xiàng)目的每個(gè)人。迭代開發(fā)要求改變整個(gè)項(xiàng)目團(tuán)隊(duì)的工作和交互方式,其中包含改變項(xiàng)目管理方式。
在開發(fā)團(tuán)隊(duì)成員看來,迭代和增量開發(fā)賦予他們力量,使他們能使用自認(rèn)為最恰當(dāng)?shù)姆绞椒e極主動(dòng)地消除項(xiàng)目風(fēng)險(xiǎn)和挑戰(zhàn)。通過設(shè)定清晰目標(biāo)和客觀度量結(jié)果(而非規(guī)定活動(dòng)細(xì)節(jié))來管理迭代,確保開發(fā)成員找到交付結(jié)果的最佳途徑。
從客戶和商業(yè)團(tuán)隊(duì)角度看,由于引入了清晰、有意義的目標(biāo),而且能夠評(píng)審可演示的結(jié)果,新軟件的最終使用者將在項(xiàng)目開發(fā)中扮演積極角色,并與開發(fā)團(tuán)隊(duì)共享所有權(quán)。迭代對(duì)于所有參與到項(xiàng)目的商業(yè)人士都有著深遠(yuǎn)持久的影響,從根本上改變了他們指定、支付和實(shí)現(xiàn)軟件解決方案的商業(yè)利益的方式。
在管理團(tuán)隊(duì)看來,每個(gè)項(xiàng)目都分成了一系列較小項(xiàng)目(稱為迭代),后一個(gè)迭代基于前一個(gè)迭代的結(jié)果進(jìn)行構(gòu)建,以循序漸進(jìn)地實(shí)現(xiàn)宏觀項(xiàng)目目標(biāo)。這種劃分方法引入了可以按標(biāo)準(zhǔn)方式加以評(píng)估的里程碑,使項(xiàng)目一直在正確軌道上前進(jìn),同時(shí)使開發(fā)團(tuán)隊(duì)能夠創(chuàng)建具有革新意義的高效解決方案,盡量確保項(xiàng)目取得成功。