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