Contributed to RUP by Karl Wiegers (www.processimpact.com), with permission from Software Development Magazine.
Further edited by Rational Software Corporation.
簡介
這個準則說明可用來預估軟體開發工作的技術。Wideband Delphi 預估方法的摘要如下:
-
選取一個專家小組,提供每位專家一份要預估的問題說明。
-
要求每位專家預估工作(通常是匿名),其中包括將問題分析成作業清單,以及每項作業的工作預估。
-
之後,這些專家再協同作業,反複修訂他們的預估,直到意見一致為止。
使用 Wideband Delphi
方法比從單一個人取得預估好得多。首先,它有助於建置主要作業的完整作業清單或工作分解結構,因為每個工作者都會想到各項作業。一致的方法有助於消除自命的專家、經驗不足的預估者或隱藏了各種待辦事項或不同目標的有影響力的個人所產生之預估中的偏見。相較於其他人產生的預估,人們通常比較信任在他們協助之下產生的預估。在預估作業中,沒有人會知道「正確」的回答,建立多重預估便是確認這個不確定性。最後,Delphi
方法的使用者會在任何複雜作業上辨識反覆的值。
套用 Wideband Delphi
Wideband Delphi 幾乎可用來預估任何東西 - 實作特定子系統需要工作幾個月、整個產品有幾行程式碼、幾個類別,或重新裝修比爾蓋茲的家需要幾加侖油漆,或特定組織實現「功能成熟度模型」的第二層次所需要的工作。
Delphi 方法可協助您開發詳細的工作分解結構來提供基礎,以進行由下而上的工作及排程或大小評估。Delphi
會議的起點可能是一份願景文件、一份所評估問題更詳細的需求規格或起始高階架構說明,或一份專案排程。輸出是更詳細的專案作業清單,相關的品質、與流程相關和額外負荷等作業的清單,預估的假設,以及一組作業和整體專案預估,每個工作者各一份。
圖 1 說明 Wideband Delphi
會議的流程。在規劃期間,會定義預估的問題及選取工作者。起始會議將聚焦於問題的所有預估人員聚集起來。之後,每個工作者都會個別備妥他的起始作業清單和各項預估。他們會將這些項目帶到預估會議中,在會議期間,經過幾個預估循環之後,會產生更綜合性的作業清單及一組修訂過的預估。之後,主持人或專案管理人員會將分類過的預估資訊離線合併起來,小組再檢視預估結果。當符合某些預定的結束準則時,會議便告完成。預估的結果範圍可能是比任何單項預估都實際的未來預言。我們來依次查看這些流程的每個步驟。
當規劃一場 Wideband Delphi
會議時,會定義問題和選取工作者。起始會議將聚焦於問題的所有預估人員聚集起來。之後,每個工作者都會個別備妥起始作業清單和各項預估。在預估會議期間,若干循環往往會帶來更完整的作業清單和一組修正過的預估。之後,便離線合併這項資訊,小組再檢視預估結果。當符合結束準則時,會議便告完成。
規劃
Wideband Delphi
會議是從定義問題和設定問題範圍開始:願景、使用案例模型、現有系統、初步架構。大問題要分解成能夠更精確預估的可管理部分,可能是分別由不同的小組來負責。起始預估作業的人會組合出問題規格來提供足夠的資訊,供工作者產生有根據的可靠預估。
預估工作者包括規劃和協調作業的主持人、專案管理人員,以及兩到四位其他預估人員。主持人應該是所擁有的資訊足以參與作為預估人員,但作為一名公正無私的代理,並不以自己的偏見或見解來扭曲結果。工作者是因為瞭解問題或專案及相關的預估問題而獲得選拔。
起始
最初 1 小時內的起始會議,使所有工作者快速進入預估問題。主持人向不熟悉 Wideband Delphi 的小組成員解釋 Wideband
Delphi,並向其他預估人員介紹問題規格及任何假設或專案限制。主持人致力於提供足夠的資訊給預估人員做好工作,但不過當地影響他們的預估。
小組要檢視預估目標,並討論問題及任何預估爭議。工作者同意他們將使用的預估單元,如星期、工時、金額或程式碼行。如果主持人確定所有小組成員的知識都足以參與預估作業,這個小組便已準備好開始運作。否則,工作者可能需要接受將預估之問題更完整的簡報,或改由能夠更精確預估的其他人來參與。
如果要判斷您是否已準備好繼續參與 Wideband Delphi 會議,請檢查您的進入準則,也就是您必須滿足才能繼續後續流程步驟的必備條件。在深入預估練習之前,請確定已滿足下列條件:
-
已選取適當的小組成員。
-
已舉辦起始會議。
-
工作者已同意預估目標和單元。
-
專案管理人員可以參與會議。
-
預估人員具備有效參與所需要的資訊。
個別準備
讓我們假設您想要預估完成特定專案所需要的總工作量(一般用工時來表示)。預估流程開始於每個工作者利用如圖 2
所示的表單來獨立開發一份達到指示的專案目標所需完成的起始作業清單。之後,每個工作者便預估每項作業將花的工作。之後,再將每項作業分析成足以精確評估的小作業。
請清楚敘述這些作業,因為有人必須將所有工作者作業清單合併到單一組合清單中。請用一致同意的單位來算出各項專案作業所產生之預估的總計,以產生初步的整體預估。
預估流程開始於每個工作者利用這份表單來獨立開發一份達到指示的專案目標所需完成的起始作業清單。
您的預估應該與您認為專案管理人員或其他關係人想要聽的回答無關。這是一個好機會,讓預估落在可接受的專案排程、工作或成本界限之外,這個狀況會要求協議,結果可能會縮減範圍、延伸排程或調整資源。但不要讓外部壓力動搖您對於專案如何結束的最佳推斷。
除了識別專案作業之外,另外也要個別記錄相關作業或支援作業的任何作業。不要忘記在第一個循環列出處理管理、配置管理和流程相關作業的作業。請務必併入在測試或檢驗作業之後的重做作業。
更正問題的修訂重做是不得不做的事,因此,您應該規劃它。如果您在預估一項排程,任何額外負荷的作業,雖然它們並非可能需要內建在規劃中的專案所特有的作業,但您也要想到它們。這些作業包括會議、假期、訓練、其他專案指派工作,以及消耗您每日時間的其他大量事物。
由於假設極為不同,可能導致幅度很寬的預估變化,因此,在準備預估時,請記下您的任何假設。比方說,如果您假設將購買特定元件庫,或重複使用舊專案的元件庫,請將它寫下。另一個預估人員可能會假設專案會發展這個元件庫,因而造成兩項整體預估不符。
請記住下列預估準則:
-
假設一個人(您)將執行所有作業。
-
假設所有作業都會循序執行;這時不要擔心安排順序及前任的作業。
-
假設您可以不間斷地工作來處理每項作業(這似乎樂觀過了頭,但它簡化了預估流程)。
-
依照行事曆的單位,列出在作業之間預期會出現的任何已知的等待時間。這可以協助您稍後將預估工作轉換成預估排程。
預估會議
主持人收集工作者的個別預估並建立類似圖 3 的圖表來開始預估會議。每個工作者的專案預估總計都會在「第 1 回合」這行顯示成一個
X。每個預估人員都可以看出來,他的起始值在整個範圍內的位置。這些初步評估的涵蓋範圍,可能會大到令人吃驚。您只要想像一下,在詢問一位工作者的預估,並用它來規劃專案之後,您可能收集到的不同結論。
主持人收集工作者的個別預估並繪製圖表來開始預估會議。每個工作者的專案預估總計都會在「第 1 回合」這行顯示成一個 X。這些初步評估的涵蓋範圍,可能會大到令人吃驚。
在某些組織中,主持人不會識別每項預估是誰建立的;他們覺得這種匿名是 Delphi
技術的一個重要面向。匿名可以防止直言不諱的同僚脅迫其他工作者用他們的方式來看事情。另外,這也代表小組成員比較不會在他們自己的分析導出不同的結論時,去聽從最受尊重之工作者的判斷。但這並非必要。
每個預估人員都會閱讀他的起始作業清單,識別任何假設,提出任何問題或爭議,但不透露他的預估是哪一個。每個工作者都會列出必須執行的不同作業。組合這些個別作業清單,會產生一份比任何單一預估人員所可能生產者還要完整的清單。這種方法適用於多達數打的個別作業。如果您的作業超出這個數目,它們也未免太詳細了。您可以將問題分解成許多小問題,再個別預估它們。
在這項起始討論期間,小組成員也可能談到他們的假設、預估問題及他們對於問題所感到的問題。因此,小組會開始聚集於共有的一組假設和共同作業清單。請保留這份最終作業清單,下次必須預估相似 的專案時,就可以用它當做起點。
這項初步討論完成之後,所有工作者便在會議室中,各自靜悄悄地修改他們的預估。他們可能會根據討論期間所分享的資訊來修訂他們的作業清單,他們也將根據對於作業範圍的新認知或變動過的假設來調整個別的作業預估。所有預估人員都可以在他們的表單中加入新作業,記下他們對於初步作業預估所想進行的任何變更。所有作業的網路變更便等於這個工作者之整體專案預估的變更。
主持人收集已修訂的整體預估,將它們繪製在同一份圖表的「第 2 回合」這一行。為了更容易看出來,我已在白板上完成這項作業。如圖 4 所說明,第二輪可能以高於第 1
回合平均值的平均值為核心,縮小了預估的分佈。後面幾輪還應該再縮小這項分佈。修訂作業清單、討論問題和假設,再準備新的預估,這個循環會持續進行,直到符合下列狀況為止:
-
您已完成了四輪
-
預估已聚歛到可接受的小範圍內(事先定義)
-
符合分配的會議時間(通常是兩小時)
-
所有工作者都不想變更他們最後的預估
在討論起始預估之後,所有工作者便修改他們的預估。主持人收集已修訂的整體預估,將它們繪製在同一份圖表的「第 2 回合」這一行。後面這幾輪可能以高於第 1 回合平均值的平均值為核心,縮小了預估的分佈。
主持人要使小組不出軌,將時間框限在 15 或20
分鐘之內,以避免無窮無盡的漫談。主持人應該遵循有效的會議主持方式,例如準時開始和結束,鼓勵所有工作者實現和維護公平而不帶批評性的環境。在前面幾輪中,維持個別預估的匿名很重要,到了某些時候,小組成員可能會同意將所有底牌放在桌上,在開放的討論中得到結論。這使他們有機會討論他們的預估差別極大的作業。不過,若非如此,在會議完成之前,主持人不應該指出各項最終預估的提出者。
組合作業
當預估會議結束時,這項工作並未完成。主持人或專案管理人員要將專案作業及他們的個人預估組合成單一主要作業清單。這個人也要將個別的假設、品質和流程相關作業、額外負荷作業及等待時間等清單合併起來。
這個合併流程包括移除重複的作業,以及取得個別作業之不同預估的合理解決方案。「合理」不表示用專案管理人員偏好的價值來取代小組的預估。當明顯類似的作業,預估差異很大時,可能是預估人員用不同的方式來解釋這項作業。例如,兩個人可能都有一項稱為「實作類別」的作業。不過,一位審查人員可能會在作業中併入單元測試和程式碼檢視,另一位可能只在意撰寫程式碼的工作。所有檢視人員都應該清楚定義他們的作業,以便在這個合併步驟期間,儘可能減少混淆。合併步驟應該保留每項作業的預估範圍,但如果一位預估人員的作業預估與其他檢視人員差別太大,請瞭解它,之後,也許要捨棄或修改它。
檢視結果
在最後一個步驟中,預估小組要檢視彙總結果,在最終結論上取得共識。專案管理人員要提供整體作業清單、個別預估、累加預估、假設清單及任何其他資訊給其他預估人員。請將小組帶回進行 30 至 60
分鐘的檢視會議來總結這項預估作業。另外,這個會議也使小組有機會思考這次運作的 Wideband Delphi 流程,並提出改進未來應用方式的建議。
工作者應該確定最終的作業清單已儘可能完整。他們可能會因為預估會議而想到其他作業,現在可以將這些加入作業清單中。請檢查個別預估差異很大的作業是否已經由合理的方式合併起來。
最終目標是產生預估範圍,讓專案管理人員和其他主要關係人繼續在可接受的信任層次上規劃和執行專案。
完成預估
當符合指定的結束準則時,預估流程便告完成,這時您可以宣告勝利,接著享受您的人生。典型的 Wideband Delphi 結束準則是:
已組合好整體作業清單。
您已有一份預估假設的摘要清單。
在如何將個別預估綜合到可接受範圍的單一集合這方面,預估人員已取得共識。
現在,您必須決定要如何處理資料。您可以只要平均最終的預估值來得出單點預估,這也是要求預估的人可能想聽到的東西。不過,簡單的平均值可能會太低,您不妨保留預估範圍。預估是預測未來,預估範圍反映了凝視水晶球本來就會有的不確定性。您可以提供三個數字:作為規劃案例的預估平均值、作為最佳案例的最小值,以及作為最差案例的最大值。您也可以提出平均值作為名義上的預期結果,加上「最大最小平均」值,再減去「平均減最小」值。
每項預估都有實現的可能,因此,一組預估便形成了一種可能性的分佈。在 A Discipline for Software Engineering (Addison-Wesley, 1995) 的第 6 章裡,Watts Humphrey
描述一種在數學上非常精確的方式,將多項預估及其不確定性結合起來,產生含有上下預測間隔的整體預估。另一個更準確的方法是執行 Monte Carlo 模擬,以最終預估值為基礎來產生可能預估結果的可能性分佈。
當權者也許並不喜歡 Delphi 會議的結果,他們可以決定要以 10%、90% 或在這之間的信心程度來規劃他們的專案。請務必比較預估和實際的專案結果,以增進您未來的預估精確度。
重做一次(反覆)
這個方法的一個好處是在最初相當粗略的預估完成(如初始階段)之後,每個階段(甚至是每次反覆)都可以修正這些預估。如果由相同的預估人員從上一個預估循環離開之處開始,流程會比較快。這時問題會有更多可用資訊,有些假設已修改了,架構也已就緒,有助於劃分工作。
新預估的範圍可能會縮小,但不必然在上一次預估的範圍內:它可能比較高,也可能比較小。如果比較高,便是向專案管理人員發出了清楚的風險信號,這個風險必須立即處理。
評估的 Wideband Delphi
沒有任何預估方法是完美的;否則,它就不是預估,而是預測。不過,Wideband Delphi 技術仍納入了一些很嚴格的預估原則。小組方法確認了組合多重專家視景的價值。產生的預估範圍會反映預估流程內在的變動本質。
雖然要花時間,且需要一組有經驗的預估人員,但 Wideband Delphi 排除了預估中的某些政治內涵,過濾了一些極初步的價值。
|