第7章 項(xiàng)目進(jìn)度安排及跟蹤
在六十年代后期,一位熱情的青年工程師①受命為一個(gè)自動(dòng)制造應(yīng)用軟件項(xiàng)目“編寫”計(jì)算機(jī)程序。選擇他的原因非常簡(jiǎn)單,因?yàn)樵谡麄€(gè)技術(shù)小組中他是參加過(guò)計(jì)算機(jī)編程培訓(xùn)班的人。這位工程師對(duì)匯編語(yǔ)言的IN和OUT指令以及Fortran語(yǔ)言略知一二,但是卻根本不懂軟件工程,更不用說(shuō)項(xiàng)目進(jìn)度安排和跟蹤了。
他的老板給了他一大堆相關(guān)的手冊(cè),以及需要做些什么的口頭描述。年輕人被告知該項(xiàng)目必須在兩個(gè)月之內(nèi)完成。
他閱讀了這些手冊(cè),想好了解決方法,就開始編寫代碼。兩周之后,老板將他叫到辦公室詢問項(xiàng)目進(jìn)展情況。
“非常好,”工程師以年輕人的熱情回答道,“這個(gè)項(xiàng)目遠(yuǎn)比我想象的簡(jiǎn)單。我差不多已經(jīng)完成了75%的任務(wù)。”
老板笑了,說(shuō)道:“真是太棒了?!比缓笏麌诟滥贻p人繼續(xù)努力工作,準(zhǔn)備好一周后再匯報(bào)工作進(jìn)度。
一周之后老板將年輕人叫到辦公室,問他說(shuō):“現(xiàn)在進(jìn)度如何?”
“一切順利,”年輕人回答說(shuō),“但是我遇到了一些小麻煩。我會(huì)排除這些困難,很快就可以回到正軌上來(lái)?!?BR> “你覺得在后期限之前能否完成?”老板問道。
“沒有問題,”工程師答道。“我差不多已經(jīng)完成了90%?!?BR> 如果讀者在軟件領(lǐng)域中工作過(guò)幾年,你一定可以將這個(gè)故事寫完。毫不奇怪,青年工程師在整個(gè)項(xiàng)目工期內(nèi)始終停留在90%的進(jìn)度上,(在別人的幫助下)直到交付期限之后一個(gè)月才做完。
在過(guò)去的30年間,這樣的故事被不同的軟件開發(fā)者重復(fù)了成千上萬(wàn)次。我們不禁要問:“為什么?”
7.1基本概念
雖然軟件延期交付的原因很多,但是大多數(shù)都可以追溯到下面列出的一個(gè)或多個(gè)根本原因上:
·一個(gè)不現(xiàn)實(shí)的截止期限,由軟件工程組以外的人所設(shè)立并強(qiáng)加給軟件工程組內(nèi)的管理者和項(xiàng)目開發(fā)者。
·客戶需求發(fā)生變化,而需求的變化沒有能夠反映在項(xiàng)目進(jìn)度的變化上。
·對(duì)工作量和/或完成該工作所需的資源數(shù)量估計(jì)不足。
·在項(xiàng)目開始時(shí),沒有將可以預(yù)測(cè)的和/或不可預(yù)測(cè)的風(fēng)險(xiǎn)考慮在內(nèi)。
·事先無(wú)法預(yù)計(jì)的技術(shù)困難。
·事先無(wú)法預(yù)計(jì)的人力困難。
·由于項(xiàng)目組成員之間的交流不暢而導(dǎo)致的延期。
·項(xiàng)目管理者未能發(fā)現(xiàn)進(jìn)度拖后,也未能采取行動(dòng)解決這一問題。
在軟件行業(yè)中,人們對(duì)過(guò)于樂觀的(即“不現(xiàn)實(shí)的”)項(xiàng)目完成期限已經(jīng)司空見慣。有時(shí)候設(shè)定截止時(shí)間的人認(rèn)為這樣的截止期限是合理的,但是常識(shí)告訴我們,合理與否還必須由完成工作的人來(lái)判斷。
7.1.1 關(guān)于“延遲”的評(píng)注
拿破侖曾經(jīng)說(shuō)過(guò):“任何同意執(zhí)行一個(gè)他本人都認(rèn)為有缺點(diǎn)的計(jì)劃的指揮官都應(yīng)該受到指責(zé);他必須提出自己的反對(duì)理由,堅(jiān)持修改這一計(jì)劃,終甚至提出辭職而不是使自己的軍隊(duì)遭受慘敗?!边@句話擲地有聲,值得軟件項(xiàng)目管理者們深思。
在第5和第6章中討論的估算和風(fēng)險(xiǎn)分析活動(dòng),以及本章中涉及的進(jìn)度安排技術(shù),通常都需要在一個(gè)定義好的截止期限的約束之下實(shí)現(xiàn)。如果樂觀的估算都表明截止期限是不現(xiàn)實(shí)的,一個(gè)勝任的項(xiàng)目管理者就應(yīng)該“保護(hù)其隊(duì)伍免受不適當(dāng)?shù)倪M(jìn)度安排的壓力并將這種壓力反映給施加壓力的一方”[PAG85]。
不妨舉例說(shuō)明,假定一個(gè)軟件開發(fā)小組的任務(wù)是構(gòu)造一個(gè)醫(yī)療診斷儀器的實(shí)時(shí)控制器,該控制器需要在9個(gè)月之內(nèi)推向市場(chǎng)。在進(jìn)行了仔細(xì)的估算和風(fēng)險(xiǎn)分析之后,軟件項(xiàng)目管理者得到的結(jié)論是在現(xiàn)有人員條件下,需要14個(gè)月的時(shí)間才能完成這一軟件。這位項(xiàng)目管理者下一步該怎么辦?
闖進(jìn)客戶的辦公室(這里的客戶非常可能是市場(chǎng)或銷售人員)并要求修改交付日期似乎不太現(xiàn)實(shí)。外部市場(chǎng)壓力決定了交付日期,屆時(shí)必須發(fā)布產(chǎn)品。而(從事業(yè)前途的角度出發(fā))拒絕這一項(xiàng)目同樣是魯莽的。那么應(yīng)該怎么辦呢?
在這種情況下,推薦以下的處理步驟:
1.使用從以前的項(xiàng)目中得到的數(shù)據(jù),進(jìn)行詳細(xì)的估算。確定項(xiàng)目的估算工作量和持續(xù)時(shí)間。
2.使用增量過(guò)程模型(參見第2章),制定一個(gè)軟件開發(fā)策略,以能夠在規(guī)定的交付日期提供關(guān)鍵功能,而將其他功能的實(shí)現(xiàn)推到以后。將這一計(jì)劃做成文檔。
3.與客戶會(huì)談并(用詳細(xì)估算結(jié)果)來(lái)解釋為什么規(guī)定的交付日期是不現(xiàn)實(shí)的,一定要指出所有這些估算都是基于以往的項(xiàng)目實(shí)踐,而且一定要指出為了在目前規(guī)定的交付期限完成項(xiàng)目,與以往相比在工作效率上必須提高的百分比①。做如下解釋將是恰如其分的:
“我認(rèn)為在XYZ控制器軟件的交付日期方面存在一個(gè)問題,我已經(jīng)將一份以往項(xiàng)目中生產(chǎn)率的簡(jiǎn)化明細(xì)分類表和以多種不同方式進(jìn)行的項(xiàng)目估算提交給各位,你會(huì)注意到我已經(jīng)假設(shè)與以往的生產(chǎn)率相比有20%的提高,但是我們?nèi)匀恢荒艿玫?4個(gè)月而不是9個(gè)月的交付時(shí)間。”
4.將增量開發(fā)策略作為可選計(jì)劃提交給客戶。
“我們有幾個(gè)選擇,而我希望各位能夠在這些選擇的基礎(chǔ)上做出決策。首先,我們可以增加預(yù)算,并引入額外的資源,以便使我們能夠在9個(gè)月時(shí)間內(nèi)完成這一工作。但是應(yīng)該知道由于時(shí)間限制過(guò)于苛刻,這樣做將會(huì)增加質(zhì)量差的風(fēng)險(xiǎn)②。第二個(gè)方案是,去掉一部分需求中所列出的軟件功能和特性。由此得到功能稍弱的產(chǎn)品的初版本,但是我們可以對(duì)外宣布全部功能,并在總共14個(gè)月的時(shí)間內(nèi)發(fā)布這些功能。第三種選擇是不顧現(xiàn)實(shí)條件的約束,而希望項(xiàng)目能夠在9個(gè)月時(shí)間內(nèi)完成。結(jié)果是我們竭盡全力,但是卻無(wú)法向用戶提供任何功能。我想你們會(huì)同意,第三種選擇是不可接受的。過(guò)去的歷史和我們樂觀的估算都表明這是不現(xiàn)實(shí)的,是在選擇一場(chǎng)災(zāi)難。”
盡管這樣做會(huì)有些抱怨,但如果你給出了基于準(zhǔn)確的歷史數(shù)據(jù)的可靠估算,那么終的談判結(jié)果將可能是選擇1或者選擇2。不現(xiàn)實(shí)的交付期限就不存在了。
7.1.2基本原則
曾經(jīng)有人請(qǐng)教的《神秘的人月》(The Mythical Man-Month,見文獻(xiàn)[BRO95])一書的作者Fred Brooks,“軟件項(xiàng)目的進(jìn)度是如何延遲的?”他的回答即簡(jiǎn)單又深刻:“一天?!?BR> 技術(shù)性項(xiàng)目(不論它是涉及到水力發(fā)電廠建設(shè),還是開發(fā)一個(gè)操作系統(tǒng))的現(xiàn)實(shí)情況是,在實(shí)現(xiàn)一個(gè)大目標(biāo)之前必須完成數(shù)以百計(jì)的小任務(wù)。這些任務(wù)中有些是處于主流之外,其實(shí)現(xiàn)不會(huì)影響到整個(gè)項(xiàng)目的完成時(shí)間;其他任務(wù)則位于“關(guān)鍵路徑”①之上,如果這些“關(guān)鍵”任務(wù)的進(jìn)度拖后,則整個(gè)項(xiàng)目的完成日期就會(huì)受到威脅。
項(xiàng)目管理者的目標(biāo)是定義所有項(xiàng)目任務(wù),識(shí)別關(guān)鍵任務(wù),然后跟蹤關(guān)鍵任務(wù)的進(jìn)展以保證“一天”的發(fā)現(xiàn)進(jìn)度拖延情況。為了做到這一點(diǎn),管理者必須建立一個(gè)具有一定詳細(xì)程度的進(jìn)度表,使得項(xiàng)目管理者能夠監(jiān)督進(jìn)度,并控制整個(gè)項(xiàng)目。
軟件項(xiàng)目進(jìn)度安排是一種活動(dòng),它通過(guò)將工作量分配給特定的軟件工程任務(wù),而將所估算的工作量分布于計(jì)劃好的項(xiàng)目持續(xù)時(shí)間內(nèi)。但是,進(jìn)度是隨著時(shí)間的改變而不斷演化的,注意到這一點(diǎn)至關(guān)重要。在項(xiàng)目計(jì)劃的早期,首先建立一個(gè)宏觀的進(jìn)度安排表。該進(jìn)度表標(biāo)識(shí)所有主要的軟件工程活動(dòng)和這些活動(dòng)影響到的產(chǎn)品功能。隨著項(xiàng)目的進(jìn)展,宏觀進(jìn)度表中的每個(gè)條目都被精化成一個(gè)“詳細(xì)進(jìn)度表”。于是(完成一個(gè)活動(dòng)所必須實(shí)現(xiàn)的)特定軟件任務(wù)被標(biāo)識(shí)出來(lái),并進(jìn)行進(jìn)度安排。
可以從兩個(gè)不同的視角考察軟件開發(fā)項(xiàng)目的進(jìn)度安排。第一個(gè)視角,基于計(jì)算機(jī)的系統(tǒng)的終發(fā)布日期已經(jīng)確定(而且不能更改)。軟件開發(fā)組織在這一約束下將工作量分布在預(yù)先確定的時(shí)間框架內(nèi)。第二個(gè)視角,假定大致的時(shí)間界限已經(jīng)討論過(guò),但是終發(fā)布日期是由軟件開發(fā)組設(shè)定的,工作量以一種能夠好地利用資源的方式加以分布,且在對(duì)軟件進(jìn)行仔細(xì)分析之后才定義終發(fā)布日期。但不幸的是,第一種情況發(fā)生的頻率遠(yuǎn)遠(yuǎn)高于第二種情況。
同軟件工程的所有其他領(lǐng)域一樣,有一些基本原則能夠指導(dǎo)軟件項(xiàng)目的進(jìn)度安排:
劃分:項(xiàng)目必須被劃分成若干可以管理的活動(dòng)和任務(wù)。為了實(shí)現(xiàn)項(xiàng)目的劃分,對(duì)產(chǎn)品和過(guò)程都需要進(jìn)行分解(參見第3章)。
相互依賴性:各個(gè)被劃分的活動(dòng)或任務(wù)之間的相互關(guān)系必須是確定的。有些任務(wù)必須順序發(fā)生;而其他的則可以并發(fā)進(jìn)行。有些活動(dòng)只有在其他活動(dòng)產(chǎn)生的工作產(chǎn)品完成時(shí)才能夠開始,而其他的則可以獨(dú)立進(jìn)行。
時(shí)間分配:必須為每個(gè)被調(diào)度的任務(wù)分配一定數(shù)量的工作單位(例如,若干人天的工作量)。此外,必須為每個(gè)任務(wù)指定開始和結(jié)束日期,這些日期是與工作完成的方式相互依賴的(全職還是兼職)是工作方式的函數(shù)。
工作量確認(rèn):每個(gè)項(xiàng)目都有預(yù)定數(shù)量的人員參與。在進(jìn)行時(shí)間分配時(shí),項(xiàng)目管理者必須確保在任意時(shí)段中分配給任務(wù)的人員數(shù)量不會(huì)超過(guò)項(xiàng)目組中的人員數(shù)量。例如,一個(gè)項(xiàng)目分配了3名員工參加(即,每天可分配的工作量為3人天②)。在某一天中,需要完成7項(xiàng)并發(fā)的任務(wù),每個(gè)任務(wù)需要0.50人天的工作量,在這種情況下,所分配的工作量就大于可用于分配的工作量。
定義責(zé)任:每個(gè)被調(diào)度的任務(wù)都應(yīng)該指定某個(gè)特定的小組成員來(lái)負(fù)責(zé)。
定義結(jié)果:每個(gè)被調(diào)度的任務(wù)都應(yīng)該有一個(gè)定義好的結(jié)果。對(duì)于軟件項(xiàng)目而言,結(jié)果通常是一個(gè)工作產(chǎn)品(例如一個(gè)模塊的設(shè)計(jì))或某個(gè)工作產(chǎn)品的一部分。通常將多個(gè)工作產(chǎn)品組合成“可交付產(chǎn)品”。
定義里程碑:每個(gè)任務(wù)或任務(wù)組都應(yīng)該與一個(gè)項(xiàng)目里程碑相關(guān)聯(lián)。當(dāng)一個(gè)或多個(gè)工作產(chǎn)品經(jīng)過(guò)質(zhì)量復(fù)審(參見第8章)并且得到認(rèn)可時(shí),標(biāo)志著一個(gè)里程碑的完成。
隨著項(xiàng)目進(jìn)度的發(fā)展,上述每一條原則都會(huì)被用到。
在六十年代后期,一位熱情的青年工程師①受命為一個(gè)自動(dòng)制造應(yīng)用軟件項(xiàng)目“編寫”計(jì)算機(jī)程序。選擇他的原因非常簡(jiǎn)單,因?yàn)樵谡麄€(gè)技術(shù)小組中他是參加過(guò)計(jì)算機(jī)編程培訓(xùn)班的人。這位工程師對(duì)匯編語(yǔ)言的IN和OUT指令以及Fortran語(yǔ)言略知一二,但是卻根本不懂軟件工程,更不用說(shuō)項(xiàng)目進(jìn)度安排和跟蹤了。
他的老板給了他一大堆相關(guān)的手冊(cè),以及需要做些什么的口頭描述。年輕人被告知該項(xiàng)目必須在兩個(gè)月之內(nèi)完成。
他閱讀了這些手冊(cè),想好了解決方法,就開始編寫代碼。兩周之后,老板將他叫到辦公室詢問項(xiàng)目進(jìn)展情況。
“非常好,”工程師以年輕人的熱情回答道,“這個(gè)項(xiàng)目遠(yuǎn)比我想象的簡(jiǎn)單。我差不多已經(jīng)完成了75%的任務(wù)。”
老板笑了,說(shuō)道:“真是太棒了?!比缓笏麌诟滥贻p人繼續(xù)努力工作,準(zhǔn)備好一周后再匯報(bào)工作進(jìn)度。
一周之后老板將年輕人叫到辦公室,問他說(shuō):“現(xiàn)在進(jìn)度如何?”
“一切順利,”年輕人回答說(shuō),“但是我遇到了一些小麻煩。我會(huì)排除這些困難,很快就可以回到正軌上來(lái)?!?BR> “你覺得在后期限之前能否完成?”老板問道。
“沒有問題,”工程師答道。“我差不多已經(jīng)完成了90%?!?BR> 如果讀者在軟件領(lǐng)域中工作過(guò)幾年,你一定可以將這個(gè)故事寫完。毫不奇怪,青年工程師在整個(gè)項(xiàng)目工期內(nèi)始終停留在90%的進(jìn)度上,(在別人的幫助下)直到交付期限之后一個(gè)月才做完。
在過(guò)去的30年間,這樣的故事被不同的軟件開發(fā)者重復(fù)了成千上萬(wàn)次。我們不禁要問:“為什么?”
7.1基本概念
雖然軟件延期交付的原因很多,但是大多數(shù)都可以追溯到下面列出的一個(gè)或多個(gè)根本原因上:
·一個(gè)不現(xiàn)實(shí)的截止期限,由軟件工程組以外的人所設(shè)立并強(qiáng)加給軟件工程組內(nèi)的管理者和項(xiàng)目開發(fā)者。
·客戶需求發(fā)生變化,而需求的變化沒有能夠反映在項(xiàng)目進(jìn)度的變化上。
·對(duì)工作量和/或完成該工作所需的資源數(shù)量估計(jì)不足。
·在項(xiàng)目開始時(shí),沒有將可以預(yù)測(cè)的和/或不可預(yù)測(cè)的風(fēng)險(xiǎn)考慮在內(nèi)。
·事先無(wú)法預(yù)計(jì)的技術(shù)困難。
·事先無(wú)法預(yù)計(jì)的人力困難。
·由于項(xiàng)目組成員之間的交流不暢而導(dǎo)致的延期。
·項(xiàng)目管理者未能發(fā)現(xiàn)進(jìn)度拖后,也未能采取行動(dòng)解決這一問題。
在軟件行業(yè)中,人們對(duì)過(guò)于樂觀的(即“不現(xiàn)實(shí)的”)項(xiàng)目完成期限已經(jīng)司空見慣。有時(shí)候設(shè)定截止時(shí)間的人認(rèn)為這樣的截止期限是合理的,但是常識(shí)告訴我們,合理與否還必須由完成工作的人來(lái)判斷。
7.1.1 關(guān)于“延遲”的評(píng)注
拿破侖曾經(jīng)說(shuō)過(guò):“任何同意執(zhí)行一個(gè)他本人都認(rèn)為有缺點(diǎn)的計(jì)劃的指揮官都應(yīng)該受到指責(zé);他必須提出自己的反對(duì)理由,堅(jiān)持修改這一計(jì)劃,終甚至提出辭職而不是使自己的軍隊(duì)遭受慘敗?!边@句話擲地有聲,值得軟件項(xiàng)目管理者們深思。
在第5和第6章中討論的估算和風(fēng)險(xiǎn)分析活動(dòng),以及本章中涉及的進(jìn)度安排技術(shù),通常都需要在一個(gè)定義好的截止期限的約束之下實(shí)現(xiàn)。如果樂觀的估算都表明截止期限是不現(xiàn)實(shí)的,一個(gè)勝任的項(xiàng)目管理者就應(yīng)該“保護(hù)其隊(duì)伍免受不適當(dāng)?shù)倪M(jìn)度安排的壓力并將這種壓力反映給施加壓力的一方”[PAG85]。
不妨舉例說(shuō)明,假定一個(gè)軟件開發(fā)小組的任務(wù)是構(gòu)造一個(gè)醫(yī)療診斷儀器的實(shí)時(shí)控制器,該控制器需要在9個(gè)月之內(nèi)推向市場(chǎng)。在進(jìn)行了仔細(xì)的估算和風(fēng)險(xiǎn)分析之后,軟件項(xiàng)目管理者得到的結(jié)論是在現(xiàn)有人員條件下,需要14個(gè)月的時(shí)間才能完成這一軟件。這位項(xiàng)目管理者下一步該怎么辦?
闖進(jìn)客戶的辦公室(這里的客戶非常可能是市場(chǎng)或銷售人員)并要求修改交付日期似乎不太現(xiàn)實(shí)。外部市場(chǎng)壓力決定了交付日期,屆時(shí)必須發(fā)布產(chǎn)品。而(從事業(yè)前途的角度出發(fā))拒絕這一項(xiàng)目同樣是魯莽的。那么應(yīng)該怎么辦呢?
在這種情況下,推薦以下的處理步驟:
1.使用從以前的項(xiàng)目中得到的數(shù)據(jù),進(jìn)行詳細(xì)的估算。確定項(xiàng)目的估算工作量和持續(xù)時(shí)間。
2.使用增量過(guò)程模型(參見第2章),制定一個(gè)軟件開發(fā)策略,以能夠在規(guī)定的交付日期提供關(guān)鍵功能,而將其他功能的實(shí)現(xiàn)推到以后。將這一計(jì)劃做成文檔。
3.與客戶會(huì)談并(用詳細(xì)估算結(jié)果)來(lái)解釋為什么規(guī)定的交付日期是不現(xiàn)實(shí)的,一定要指出所有這些估算都是基于以往的項(xiàng)目實(shí)踐,而且一定要指出為了在目前規(guī)定的交付期限完成項(xiàng)目,與以往相比在工作效率上必須提高的百分比①。做如下解釋將是恰如其分的:
“我認(rèn)為在XYZ控制器軟件的交付日期方面存在一個(gè)問題,我已經(jīng)將一份以往項(xiàng)目中生產(chǎn)率的簡(jiǎn)化明細(xì)分類表和以多種不同方式進(jìn)行的項(xiàng)目估算提交給各位,你會(huì)注意到我已經(jīng)假設(shè)與以往的生產(chǎn)率相比有20%的提高,但是我們?nèi)匀恢荒艿玫?4個(gè)月而不是9個(gè)月的交付時(shí)間。”
4.將增量開發(fā)策略作為可選計(jì)劃提交給客戶。
“我們有幾個(gè)選擇,而我希望各位能夠在這些選擇的基礎(chǔ)上做出決策。首先,我們可以增加預(yù)算,并引入額外的資源,以便使我們能夠在9個(gè)月時(shí)間內(nèi)完成這一工作。但是應(yīng)該知道由于時(shí)間限制過(guò)于苛刻,這樣做將會(huì)增加質(zhì)量差的風(fēng)險(xiǎn)②。第二個(gè)方案是,去掉一部分需求中所列出的軟件功能和特性。由此得到功能稍弱的產(chǎn)品的初版本,但是我們可以對(duì)外宣布全部功能,并在總共14個(gè)月的時(shí)間內(nèi)發(fā)布這些功能。第三種選擇是不顧現(xiàn)實(shí)條件的約束,而希望項(xiàng)目能夠在9個(gè)月時(shí)間內(nèi)完成。結(jié)果是我們竭盡全力,但是卻無(wú)法向用戶提供任何功能。我想你們會(huì)同意,第三種選擇是不可接受的。過(guò)去的歷史和我們樂觀的估算都表明這是不現(xiàn)實(shí)的,是在選擇一場(chǎng)災(zāi)難。”
盡管這樣做會(huì)有些抱怨,但如果你給出了基于準(zhǔn)確的歷史數(shù)據(jù)的可靠估算,那么終的談判結(jié)果將可能是選擇1或者選擇2。不現(xiàn)實(shí)的交付期限就不存在了。
7.1.2基本原則
曾經(jīng)有人請(qǐng)教的《神秘的人月》(The Mythical Man-Month,見文獻(xiàn)[BRO95])一書的作者Fred Brooks,“軟件項(xiàng)目的進(jìn)度是如何延遲的?”他的回答即簡(jiǎn)單又深刻:“一天?!?BR> 技術(shù)性項(xiàng)目(不論它是涉及到水力發(fā)電廠建設(shè),還是開發(fā)一個(gè)操作系統(tǒng))的現(xiàn)實(shí)情況是,在實(shí)現(xiàn)一個(gè)大目標(biāo)之前必須完成數(shù)以百計(jì)的小任務(wù)。這些任務(wù)中有些是處于主流之外,其實(shí)現(xiàn)不會(huì)影響到整個(gè)項(xiàng)目的完成時(shí)間;其他任務(wù)則位于“關(guān)鍵路徑”①之上,如果這些“關(guān)鍵”任務(wù)的進(jìn)度拖后,則整個(gè)項(xiàng)目的完成日期就會(huì)受到威脅。
項(xiàng)目管理者的目標(biāo)是定義所有項(xiàng)目任務(wù),識(shí)別關(guān)鍵任務(wù),然后跟蹤關(guān)鍵任務(wù)的進(jìn)展以保證“一天”的發(fā)現(xiàn)進(jìn)度拖延情況。為了做到這一點(diǎn),管理者必須建立一個(gè)具有一定詳細(xì)程度的進(jìn)度表,使得項(xiàng)目管理者能夠監(jiān)督進(jìn)度,并控制整個(gè)項(xiàng)目。
軟件項(xiàng)目進(jìn)度安排是一種活動(dòng),它通過(guò)將工作量分配給特定的軟件工程任務(wù),而將所估算的工作量分布于計(jì)劃好的項(xiàng)目持續(xù)時(shí)間內(nèi)。但是,進(jìn)度是隨著時(shí)間的改變而不斷演化的,注意到這一點(diǎn)至關(guān)重要。在項(xiàng)目計(jì)劃的早期,首先建立一個(gè)宏觀的進(jìn)度安排表。該進(jìn)度表標(biāo)識(shí)所有主要的軟件工程活動(dòng)和這些活動(dòng)影響到的產(chǎn)品功能。隨著項(xiàng)目的進(jìn)展,宏觀進(jìn)度表中的每個(gè)條目都被精化成一個(gè)“詳細(xì)進(jìn)度表”。于是(完成一個(gè)活動(dòng)所必須實(shí)現(xiàn)的)特定軟件任務(wù)被標(biāo)識(shí)出來(lái),并進(jìn)行進(jìn)度安排。
可以從兩個(gè)不同的視角考察軟件開發(fā)項(xiàng)目的進(jìn)度安排。第一個(gè)視角,基于計(jì)算機(jī)的系統(tǒng)的終發(fā)布日期已經(jīng)確定(而且不能更改)。軟件開發(fā)組織在這一約束下將工作量分布在預(yù)先確定的時(shí)間框架內(nèi)。第二個(gè)視角,假定大致的時(shí)間界限已經(jīng)討論過(guò),但是終發(fā)布日期是由軟件開發(fā)組設(shè)定的,工作量以一種能夠好地利用資源的方式加以分布,且在對(duì)軟件進(jìn)行仔細(xì)分析之后才定義終發(fā)布日期。但不幸的是,第一種情況發(fā)生的頻率遠(yuǎn)遠(yuǎn)高于第二種情況。
同軟件工程的所有其他領(lǐng)域一樣,有一些基本原則能夠指導(dǎo)軟件項(xiàng)目的進(jìn)度安排:
劃分:項(xiàng)目必須被劃分成若干可以管理的活動(dòng)和任務(wù)。為了實(shí)現(xiàn)項(xiàng)目的劃分,對(duì)產(chǎn)品和過(guò)程都需要進(jìn)行分解(參見第3章)。
相互依賴性:各個(gè)被劃分的活動(dòng)或任務(wù)之間的相互關(guān)系必須是確定的。有些任務(wù)必須順序發(fā)生;而其他的則可以并發(fā)進(jìn)行。有些活動(dòng)只有在其他活動(dòng)產(chǎn)生的工作產(chǎn)品完成時(shí)才能夠開始,而其他的則可以獨(dú)立進(jìn)行。
時(shí)間分配:必須為每個(gè)被調(diào)度的任務(wù)分配一定數(shù)量的工作單位(例如,若干人天的工作量)。此外,必須為每個(gè)任務(wù)指定開始和結(jié)束日期,這些日期是與工作完成的方式相互依賴的(全職還是兼職)是工作方式的函數(shù)。
工作量確認(rèn):每個(gè)項(xiàng)目都有預(yù)定數(shù)量的人員參與。在進(jìn)行時(shí)間分配時(shí),項(xiàng)目管理者必須確保在任意時(shí)段中分配給任務(wù)的人員數(shù)量不會(huì)超過(guò)項(xiàng)目組中的人員數(shù)量。例如,一個(gè)項(xiàng)目分配了3名員工參加(即,每天可分配的工作量為3人天②)。在某一天中,需要完成7項(xiàng)并發(fā)的任務(wù),每個(gè)任務(wù)需要0.50人天的工作量,在這種情況下,所分配的工作量就大于可用于分配的工作量。
定義責(zé)任:每個(gè)被調(diào)度的任務(wù)都應(yīng)該指定某個(gè)特定的小組成員來(lái)負(fù)責(zé)。
定義結(jié)果:每個(gè)被調(diào)度的任務(wù)都應(yīng)該有一個(gè)定義好的結(jié)果。對(duì)于軟件項(xiàng)目而言,結(jié)果通常是一個(gè)工作產(chǎn)品(例如一個(gè)模塊的設(shè)計(jì))或某個(gè)工作產(chǎn)品的一部分。通常將多個(gè)工作產(chǎn)品組合成“可交付產(chǎn)品”。
定義里程碑:每個(gè)任務(wù)或任務(wù)組都應(yīng)該與一個(gè)項(xiàng)目里程碑相關(guān)聯(lián)。當(dāng)一個(gè)或多個(gè)工作產(chǎn)品經(jīng)過(guò)質(zhì)量復(fù)審(參見第8章)并且得到認(rèn)可時(shí),標(biāo)志著一個(gè)里程碑的完成。
隨著項(xiàng)目進(jìn)度的發(fā)展,上述每一條原則都會(huì)被用到。

